diff --git a/content/resources/accelerometer.mdx b/content/resources/accelerometer.mdx new file mode 100644 index 0000000..6aa9c68 --- /dev/null +++ b/content/resources/accelerometer.mdx @@ -0,0 +1,354 @@ +--- +title: "The Accelerometer" +date: "2021-06-22" +categories: ["All", "Guides"] +tags: [] +excerpt: "Learn what the accelerometer is and how to code it." +featuredImage: "/images/resources/accelerometer.gif" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624308220564-JGA87APUQZ8SP6YUVIL5/diagram.png) + +The accelerometer is one of the the five sensor types on the Micromelon Rover. The accelerometer is a component built into the Rover’s PCB (printed circuit board). It’s only about a 2.5mm x 3.0mm wide and 0.83mm tall. That component also includes another sensor, the gyroscope. + +**What Does It Do?** + +The accelerometer is a device designed to detect the acceleration caused by forces acting on the rover (which we’ll dig into a bit more later). The accelerometer is a great tool for figuring out the rovers orientation in the world. Think of it as the primary tool for the Rover’s sense of balance. + +### Important Concepts + +Before we get into the mechanics of an accelerometer, we need to cover some physics concepts. + +**Acceleration** + +Acceleration is the change in velocity of an object. For example when you go from a walk to a run, you are accelerating by using the forces you generate with your muscles. As you slow down, you decrease your acceleration. All movement has a rate of acceleration. Whenever our rovers are moved, either by a force like gravity or the rotation of their motors, that movement also have a rate of acceleration. + +**Forces** + +When we push our rover, we are applying a force to it. When that force is unopposed the rover will be in motion. Anything that can apply motion to the Rover and change its position in space is considered a force. We can organize all forces into two categories, **static forces** & **dynamic forces**. + +**Dynamic Force** + +Dynamic forces can change. When we pick up and move our rover, our hand moves at an unpredictable and changing rate, so the force applied to the rover is dynamic. + +**Static Force** + +Static forces do not change. The best example of a static force is gravity. Our rover will always be affected by gravity, as are all objects on earth. + +--- + +Now that we have covered those things, it’s time to jump into how the accelerometer works. + +### How Does An Accelerometer Work? + +The accelerometer on the Rover is a MEMS accelerometer. MEMS stands for microelectromechanical systems. There is a lot of marvellous engineering in MEMS however they are complicated devices that we won’t go into in this post. To simplify things for this post, just imagine that inside the accelerometer there is a spring with a weight attached to it. This weight moves around when there is a force applied to it. As the weight moves, the spring will contract, expand, and tilt. + +Depending on how the spring contracts, expands, and tilts, the accelerometer can measure acceleration. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624336913633-VY5GQ36LSDO8KPRET58Z/accelerometer+diagram.png) + +Simplified Accelerometer Example + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624489447617-SAJNIG5BZQGZJMHE7X2I/demonstration+evened+out+-+3.gif) + +Let’s walk through an example where the outside force is gravity. + +- When no force is applied, the spring is sitting in it’s default position. + +- As gravity is applied, the weight is pulled down and the spring compresses under it. + +- When the rover is flipped upside down, the accelerometer is as well. The weight is still pulled down by gravity but now the spring is extending. + +**When the spring compresses & extends, the accelerometer can detect there is force being applied to the rover. ** + +So we have a rough idea of how the accelerometer is able to determine that force is being applied. Let’s talk now about how it communicates to us where the force is coming from. ** ** + +**The 3 Axes Of Movement** + +With the accelerometer, our Rover can detect its acceleration, but it needs a way to communicate it. It would be a bit confusing if our Rover told us *“hey I’m accelerating down but I’m upside down so I’m moving in this direction but also accelerating to the side as well to my right, your left…”*. This is a bit confusing. We need a simple way for us to understand and communicate the rover’s direction of motion. This is what the axes of movement are for. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624491832533-FNRJ3MWTB50A5FNHLWWQ/rotating+planes.gif) + +**The X, Y, and Z axes** + +The **X axis **runs from back to front of the rover. The **Y axis** runs across the rover middle from left to right. The **Z axis** runs up and down through the rover. + +As the rover moves, these axis stay localized to the rover. So as the rover rotates, the axis rotate with it. You can see where the 3 Axes are on the rover and how they move when it rotates. + +**The 3 Axes In the Accelerometer** + +Let’s look back at our weight and spring example and apply the 3 axis of movement to it. Remember, the 3 axis are localized to the rover. As the Rover rotates, the axis rotate as well. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624411779388-PGKSPLKDM78LHL422H03/z+axis+up+right.png) + +The force of gravity is applied downwards on the Rover as it sits flat. **The accelerometer detects force of gravity against the Z axis**.** ** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624411794778-H6PKSWQMH2PZ6U98GCX9/z+axis+down+bad.png) + +When the rover flips over the force is still applying downwards but to the Rover’s underside. **The accelerometer detects force of gravity going with the Z axis.** + +**Bringing It All Together** + +The accelerometer is a device built into the Rover. As forces like gravity, our hands, or the rover’s own motors move the rover, the accelerometer mechanisms move and shift around. The accelerometer monitors this moving and shifting and then calculates which of the 3 axis is affected by the outside forces. We can then read this data and program the Rover to respond to outside forces being applied. + +**Does Nature Have Accelerometers?** + +Similar to how the Rover may use the accelerometer to help balance itself, humans also have a form of accelerometer we use to balance. Our accelerometer is in our ear, specifically a part of our ear called the inner ear. + +**How the Inner Ear Helps Us Balance** + +The inner ear has a lot of parts, not all of them are to help us balance. Three parts that do help us balance are the three semicircular canals. These are named the **posterial**, **anterior **& **lateral **canals. + +Inside these canals are tiny hairs and liquid. As we move our head the liquid inside the canals shifts back and forth. The tiny hairs detect the liquid moving and send signals to our brain. + +Our Rover’s accelerometer is designed to understand movement along 3 axes. Our inner ear does the same, each semicircular canal is responsible for an axis. The Lateral canal is for our Z axis, the Anterior for our Y axis and the Posterior for the X axis. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625007193961-15WFOFS3X7HH5K7HL55L/ear+diagram.png) + +Diagram of the ear + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625008085436-MYXNF8R3CWFUHV7YYOCH/inner+ear+diagram.png) + +Diagram of the inner ear + +### Programming The Accelerometer + +Open up the Code Editor, connect to a Micromelon Rover and open up the sensor view. To open sensor view, click the ROVER button next to your rover’s name. + +In the sensor view dialog, the accelerometer values are located in the bottom right table. The first column of the table is the accelerometer values. Move the rover around and take note of how the X, Y and Z values change. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623908456123-SFLGD6EJY3YZD9ICDIIR/opening+sensor+view.gif) + +**Understanding Accelerometer Values** + +The values you see in the accelerometer column are g-force values. G-force ( *g )* is a standard unit of measurement for force. 1*g* equals the same amount of force applied by Earth’s gravity. When a Rover is in free-fall, with no external forces, it will read 0*g *in all axes. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624427492326-NO9FNLAPKSQTZFJE7GZ4/demonstrating+g+force+upright.png) + +**Demonstrating G-Force** + +Rest the rover up right on a flat surface, you will see both the X and Y value are roughly 0*g*, however the Z value will be roughly 1*g*. The only force applied to the rover is Earth’s gravity, pushing down on the Z-axis. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624427468437-WBU0GXE9Y96H3SEPVA39/demonstrating+g+force+upside+down.png) + +If you flip the rover upside down, X and Y will still be roughly 0*g*. The Z axis will be equal to roughly -1*g*. This is because Earth’s gravity is now going the other way on the Z axis. + +**Beyond 1 G-Force** + +Most of the time while using your rover, you will only see accelerometer readings between -1 and 1. The accelerometer is configured to track up to (+/-)2 g-force (the easiest way to see this is to lift your rover up against gravity). In normal use, your rover will have to be moving fairly fast to reach those high values. Remember, the old Micromelon saying…*It’s not the speed that breaks your rover, it’s the sudden stop that will.* + +**Using The Accelerometer In Code** + +Let’s write a simple program to change our Rover’s LEDs depending on the value of the z axis of our accelerometer. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624429103078-T02HNN7M88C03LUNT1ZI/coding+example.gif) + +- Start by adding an **IF/ELSE **block. + +- Inside the condition, place a **Read X Axis From Accelerometer **block. You can find this in the **Sensors **category. + +- Change the **X Axis** dropdown to **Z Axis**. + +The python command for reading the Z axis is **IMU.readAccel(2)** + +- Change the second value on the **< condition** block from **10 to 0**. This will check if the value is either positive or negative. + +- Inside the IF/ELSE block true case, place an **Set All LEDs** block. You can find this in the **Lights/Sound** category. + +- Inside the IF/Else block false case, place another **Set All LEDs** block but set it to a different colour. + +- Place the whole IF/ELSE block in a **While True **loop. + +- Press Play! + +While this code is running, we will see the Rover LEDs change to our selected colours depending on if it is right way up or upside down. Flip the rover over to test if it works! + +### Wrapping Up + +Now that we’re familiar with what the accelerometer is, how it works, and how to program it, it’s time to start doing some activities. Try these activities that require using the accelerometer. + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1707816060620-E9G2ZYTTX0RIM6DYI839/balance+bot.png) + + ](/resources/balance-bot) + + Jun 4, 2021 + + [Activity: Balance Bot](/resources/balance-bot) + + Jun 4, 2021 + +Learn iteration, algorithm design, maths, and how to use the Rover’s accelerometer and motors. + + [Read More →](/resources/balance-bot) + + Jun 4, 2021 + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/40a5024f-93a3-4d8d-8ade-505d96aa6977/Screenshot+2023-10-31+083156.png) + + ](/resources/windup-rover) + + Jun 3, 2021 + + [Activity: Wind-up Rover](/resources/windup-rover) + + Jun 3, 2021 + +Learn iteration, variables, maths, and how to use the Rover’s motors and accelerometer. + + [Read More →](/resources/windup-rover) + + Jun 3, 2021 + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1707816181015-J8KMIGESSN8NUSG83XOK/flip+bot.png) + + ](/resources/flip-bot) + + Jun 3, 2021 + + [Activity: Flip Bot](/resources/flip-bot) + + Jun 3, 2021 + +Learn branching, iteration, and how to use the accelerometer. + + [Read More →](/resources/flip-bot) + + Jun 3, 2021 + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622687189833-RQ5DB6PUES80KPSMWG3L/turnoverrover.png) + + ](/resources/turn-over-rover) + + Jun 3, 2021 + + [Activity: Turn Over Rover](/resources/turn-over-rover) + + Jun 3, 2021 + +Learn branching, iteration, and how to use the accelerometer and LEDs. + + [Read More →](/resources/turn-over-rover) + + Jun 3, 2021 + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464675848-K9YEOYK65IWRFRX4QJ1R/blog+header+image+.png) + + ](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Robot Simulator](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +How to get started with the Micromelon Robot Simulator. + + [Read More →](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1626837419969-WBB4D85KQIXSOP750N5M/resized+banner+%281%29.png) + + ](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Micromelon Rover](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +Crash course on basic rover function, how and what to program and starter activities to attempt. + + [Read More →](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622691207784-0X6JV7RYRQXZAFRG712S/pisonescape.png) + + ](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + + [Activity: Prison Escape](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + +Learn branching and iteration using the colour sensors and motors. + + [Read More →](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) diff --git a/content/resources/activity-claw-attachment.mdx b/content/resources/activity-claw-attachment.mdx new file mode 100644 index 0000000..8f5160a --- /dev/null +++ b/content/resources/activity-claw-attachment.mdx @@ -0,0 +1,138 @@ +--- +title: "Activity: Claw Attachment" +date: "2023-07-31" +categories: ["Activities", "All", "Simulator Activities"] +tags: ["Colour Sensors", "Branching", "Iteration", "Algorithm Design", "Advanced"] +excerpt: "Use the claw to grab the Meloncube and perform delivery tasks in a warehouse scenario. Use the colour sensors on the robot to read colour codes for delivery instructions. SetupThe initial activity can be to have an indicator line on the" +featuredImage: "/images/resources/activity-claw-attachment.jpg" +--- + +Use the claw to grab the Meloncube and perform delivery tasks in a warehouse scenario. Use the colour sensors on the robot to read colour codes for delivery instructions. + +### Setup + +The initial activity can be to have an indicator line on the ground using tape, which the robot starts behind. The Meloncube can be placed 30cm in front of this line, and students can be tasked to grab the cube and bring it back over the line. Depots can then be introduced to create a warehouse scenario. + +Any object can be used in place of our Meloncube, however, if you wish to use it, head on over to Printables or Thingiverse to download the print file: + + [ + Printables: MelonCube + ](https://www.printables.com/model/639390-micromelon-meloncube) + + [ + Thingiverse: MelonCube + ](https://www.thingiverse.com/thing:6284246) + +Depots are walled square areas for the rover to deposit a Meloncube in. The walls can be constructed from tape on the ground or solid materials in a 20cm x 15cm area. Use the diagrams below as a reference for the layout of the depots. A number can be allocated to each depot, and students can deliver the cube to each depot on demand. + +Add coloured tape to the previous challenge to add more complexity. The tape could indicate which depot the cube must be delivered to. The rover can use the colour sensor to detect the colour of the tape and use the appropriate delivery instructions. A final extension challenge is leaving the cube in one of the depots and having the rover retrieve it and put it behind the indicator line. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/65619701-0e77-46fb-92db-9d8b4d9531d9/Activity+1.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/e520af9d-d7d9-4216-94a6-7907bcfbed04/Activity+2.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/2612060c-142e-43c1-95bf-89720ef254ad/Activity+3.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/6ceb0a5e-7715-408e-b51a-95ffea1fdfec/Challenge.PNG) + +### Here’s Our Approach + +**Constant - **A constant is a variable that never changes when the code is run. In python, we write this in all capitals with underscores between words. + +#### 1) Setting the Constants: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/28f3a018-8334-4ca7-9962-bb39221d8703/Constants.png) + +Start by defining two constants: the servo claw open and close positions. Trial and error will have to be used to find the correct settings for your rover. + +#### 2) Grab and Release: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/40c9fd43-023e-4be9-a230-f4d55ee98e77/Functions.jpg) + +Next, make two functions for ‘*grab*’ and ‘*release’. *While these functions only have the ‘Move Servo’ block, doing this makes it easier to understand the code. + +#### **3) Data Input:** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/d711d1c8-53ae-4124-9848-b5a73b82ada6/Input.png) + +In the main code, we’ll make a variable named ‘Input’, which will request the depot number to deliver the cube. + +If you’re using colour indicators instead, the input request can be replaced with an ‘if else’ statement that detects the colour and sets the input to a depot number. + +#### **4) Secure the Cube:** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/0954bd9f-a08b-46ca-b6cb-addfe659951b/move.png) + +Once the robot has acquired the delivery instructions, the robot will approach the cube and use the ‘*grab*‘ function to pick up the meloncube. + +#### 5) Delivering the Cube: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/c682d5c0-13b9-41b2-937d-c28b673ff06b/Depot.png) + +Depending on how your depots are set up, create delivery instructions using movement blocks to deliver the cube. Finish off the code by releasing the cube. + +#### Complete Code: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/deca8e70-c92c-47b5-9b0f-793819dd193f/Capture.PNG) + +**Tip: ** + +You can add tracks on the ground for the rover to line-follow or create maze walls to allow the use of the IR sensors for navigation. + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/activity-digger-and-tipper-attachment.mdx b/content/resources/activity-digger-and-tipper-attachment.mdx new file mode 100644 index 0000000..a95d475 --- /dev/null +++ b/content/resources/activity-digger-and-tipper-attachment.mdx @@ -0,0 +1,214 @@ +--- +title: "Activity: Digger and Tipper" +date: "2023-01-11" +categories: ["Activities", "All", "Simulator Activities"] +tags: ["Colour Sensors", "Branching", "Iteration", "Algorithm Design", "Advanced"] +excerpt: "Use the digger and tipper attachments together to make your own construction site. Put the digger to work on a pile of material like beads or seeds, and use the tipper to transport it to a new location. SetupFirst, find some grain-like" +featuredImage: "/images/resources/activity-digger-and-tipper-attachment.jpg" +--- + +Use the [digger ](https://micromelon.com.au/store/p/micromelon-digger-attachment)and [tipper ](https://micromelon.com.au/store/p/micromelon-tipper-attachment)attachments together to make your own construction site. Put the digger to work on a pile of material like beads or seeds, and use the tipper to transport it to a new location. + +### Setup + +First, find some grain-like material, for example, jewellery beads or seeds. Then set up a small area with walls on three sides. This area will hold the grains, and the digger will come in from the opening to pick up the material. Position the tipper near the pile so the digger can load it up. Then have the tipper move to a new area outlined by tape to deposit this pile. Change the locations, materials, and number of robots to customise your construction site! + +### Here’s Our Approach + +**Constant - **A constant is a variable that never changes when the code is run. In python, we write this in all capitals with underscores between words. + +#### Digger + +**0) Servo Interpolation:** + +``` +def slow_servo(Left, Right): + # This is a function that slowly moves both servos to new positions + # Right - The new position of the right servo + # Left - The new position of the left servo + TIME = 400 + STEP_TIME = 20 + currentPosition = Servos.read() + lCurrent = currentPosition[0] + rCurrent = currentPosition[1] + steps = round(TIME / STEP_TIME) + + if currentPosition[0] == Left: + lCurrent += 1 + if currentPosition[1] == Right: + rCurrent += 1 + + lStepSize = steps / (Left - lCurrent) + rStepSize = steps / (Right - rCurrent) + + for i in range(1, steps + 1): + Servos.setBoth(lCurrent + i / lStepSize, rCurrent + i / rStepSize) + delay((STEP_TIME / 1000)) + +``` + +Servo interpolation is a technique we implemented to smooth out the servo movements. This is because if the servos jerk around too much, the digger may drop the load. This technique is optional, as the normal servo block still works. If you wish to use smooth servos, switch to the text editor and copy the code below into it. Then switch back to blocks if desired. + +#### 1) Setting the Constants: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/d377ed57-dbcc-437b-89fa-e3742a364b60/d_constants.PNG) + +First, we set the constants for the two servos on the digger. + +The digger will need to go between a resting position, used to pick up material, a raised position, to hold materials, and a tip position to deposit the material. + +For the resting position, we will define two constants: + +- ‘bucket_neutral’ should position the bucket, so it is flat on the ground + +- ‘arm_down’ should place the arms flat against the rover's body. + +For the loading position, we will define another two constants: + +- ‘bucket_up’ should position the bucket, so the items don’t fall out in the air but they also don’t fall out the back either + +- ‘arm_up’ should place the arms so they are raised in the air. + +For the tip position, we will define another two constants: + +- ‘bucket_down’ should tip the bucket fully forward to deposit its contents + +- ‘arm_tip’ should position the arm slightly forward + +The constants we have provided might need to be tweaked for your specific rover. This can be done through trial and error to find the best values for you. + +**2) Define the Functions:** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/c4f207e9-b9fe-48ad-9941-c1a0ca77f167/d_functions.PNG) + +Next, we’ll make some functions to make operating the arm easier. The three functions to be defined are ‘Up’, ‘Tip’, and ‘Down. We define these functions simply to make the code cleaner. Each function is in charge of moving the servos to the correct positions to move the arm up, down, and to tip. + +It can help to look at section (1) and see the constants are grouped in each of these functions. Remember that it is optional to use the ‘slow_servo’ function. Simply replace it with the ‘Set servo degrees’ block as an alternative. + +#### **3) Prepare the Servos:** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/622edb2f-a60d-4be8-a9a6-33d645cbe876/d_down.PNG) + +Back in the main code, start by setting the down position on the digger. + +#### **4) Make Your Routine:** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/f77ede6c-9194-4ace-925c-7162d0e20faf/d_routine.PNG) + +From here, you can choose how your digger operates depending on the layout of the construction site. Make sure to use the functions when making your sequence. The digger in our example acts out the following sequence: + +- Moves forward into the pile + +- Backs away a little from the pile + +- Raises the arm + +- Backs away completely from the pile + +- Turns towards the tipper + +- Moves forward towards the tipper + +- Tips the load into the tipper + +#### Complete Code: + +Note that the ‘slow_servo’ function is not included in this snippet. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/b0da1700-525e-42af-b309-41156aaf2e08/d_complete.PNG) + +#### + +#### Tipper + +#### 1) Setting the Constants: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/3b5b529e-fc27-4be3-be4b-f80fd93e60d7/t_constants.PNG) + +Similar to the digger, we need to set the tipper servo positions. ‘tip_up’ is when the tray is fully tipped, and ‘tip_rest’ is the resting position of the tray. + +#### **2) Prepare the Servos:** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/f11ea60e-ae0c-4bb4-9853-5e18c48284ca/t_sevo.PNG) + +The servo is set to the rest position. + +#### **3) Make Your Routine:** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/483aa30c-eaaa-41c2-8497-3aa1d1a79758/t_routine.PNG) + +From here, you can choose how your tipper operates depending on the layout of the construction site. The tipper in our example acts out the following sequence after being loaded: + +- Moves away from the digger + +- Turns towards the pile + +- Moves towards the pile + +- Tips the load + +#### Complete Code: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/5d8f18b1-d237-4947-8200-a6641cecbdbf/t_complete.PNG) + +#### Tip: + +Feel free to use the sensors on the robots to make your way around the construction site. Add tape on the ground for line follow and walls for proximity sensing. Additionally, the loads don’t have to be grain-like either. Try using the digger to load up a meloncube. + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/activity-forklift-attachment.mdx b/content/resources/activity-forklift-attachment.mdx new file mode 100644 index 0000000..f9304a2 --- /dev/null +++ b/content/resources/activity-forklift-attachment.mdx @@ -0,0 +1,122 @@ +--- +title: "Activity: Forklift Attachment" +date: "2023-09-14" +categories: ["Activities", "All", "Simulator Activities"] +tags: ["Colour Sensors", "Branching", "Iteration", "Algorithm Design", "Advanced"] +excerpt: "Use the forklift to move and stack meloncubes into increasingly taller towers. Calculate the correct times to power the servo to reach the maximum height. SetupAgainst a wall, set up a series of towers using solid materials. We generall" +featuredImage: "/images/resources/activity-forklift-attachment.jpg" +--- + +Use the forklift to move and stack meloncubes into increasingly taller towers. Calculate the correct times to power the servo to reach the maximum height. + +### Setup + +Against a wall, set up a series of towers using solid materials. We generally use blocks of wood differing in height. Use multiple Meloncubes and practice picking them up using the forklift. Once this has been mastered, raise the fork to the heights of the various towers and stack the Meloncubes on each. Note that the forklift's maximum lift height is about 8cm off the ground. + +To extend the students, task them with designing and printing a modular cube that can easily be picked up by the fork. These can be used to create stacked building blocks using the forklift. + +To download the print file for the Meloncube, head on over to either Printables or Thingiverse: + + [ + Printables: MelonCube + ](https://www.printables.com/model/639390-micromelon-meloncube) + + [ + Thingiverse: MelonCube + ](https://www.thingiverse.com/thing:6284246) + +### Here’s Our Approach + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/31ef27d2-a9d6-40ca-a1ea-00eec27ddf7b/1.png) + +#### 1) Move towards the Meloncube + +Start by moving the rover towards the Meloncube. + +#### **2) Capture the Cube:** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/e6b11911-31c3-42e8-b6ba-cffb8e9eee6a/2.png) + +Next, we will set the continuous servo to turn on in one direction by powering it to 90. The delay will choose how long the servo will spin for. We will set the servo to 0 to turn it off. + +#### **3) Approach the Tower:** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/e1a874e9-b316-48d7-8c30-1edd12d9d2e0/3.png) + +Once the fork has been lifted, the rover will move towards the tower and stop in front of it. This may vary depending on the distance from the tower. + +Maybe add tape on the ground for the colour sensor to detect. + +#### 4) Deposit the Cube: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/fb7fd882-d224-453e-8fad-f182a7c9ad46/4.png) + +Once the tower has been reached, the fork should be lowered to the correct height for the tower. A delay of half a second was added to allow for the servo to settle. Finally, the rover will back away from the tower. + +#### Complete Code: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/b739b4bb-b494-4f74-989e-456d7a860b25/Complete.png) + +**Tip: ** + +Try and design your own type of modular cubes that are easy to lift and stack. We’ve provided the measurements for the fork to make designing easier. Maybe you can start a construction project like building a city or a staircase! + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/b0a9e106-d599-49d0-81a4-bd7809cf76f8/Dimensions.png) + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/activity-making-music-advanced.mdx b/content/resources/activity-making-music-advanced.mdx new file mode 100644 index 0000000..dfe57a2 --- /dev/null +++ b/content/resources/activity-making-music-advanced.mdx @@ -0,0 +1,249 @@ +--- +title: "Activity: Making Music (Advanced)" +date: "2024-12-31" +categories: ["Activities", "All", "Simulator Activities"] +tags: ["Iteration", "Buzzer", "Algorithm Design", "Variables", "Advanced"] +excerpt: "Use the Rovers speaker to make it play songs. Learn to combine the world of music and robotics by going through sheet music and coding the Rover to play each note.In the advanced code, we will make a system to allow us to write our enti" +featuredImage: "/images/resources/activity-making-music-advanced.jpg" +--- + +Use the Rovers speaker to make it play songs. Learn to combine the world of music and robotics by going through sheet music and coding the Rover to play each note. + +In the advanced code, we will make a system to allow us to write our entire song as a string and program the Rover to read the music by itself. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1b373aca-f5dd-4d23-8d4b-8c9fc5e61f74/IMG_1856.jpg) + +Activity Demonstration + +### Basics of Music: + +When it comes to reading sheet music for this task, we will be using two pieces of information from each note. The tone of the note and how long the note is played. The diagrams for music theory and the example song have been added underneath, but for further information on reading music, head over to ‘Activity: Making Music (Beginner)’. + + [ + Activity: Making Music (Beginner) + ](/resources/activity-making-music-beginner) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/260dce37-b51d-4f2b-b36c-649818f124f9/Notes.png) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1ac936de-2a08-4851-a14b-239e8bb3c831/rhythm.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/32143e7d-5b25-4ad1-8b59-a0243df04a93/Mary+had+a+little+lamb.png) + +## Code: + +We will switch to the text code editor for the intermediate and advanced music activities as some of the following functions are easier to build in that editor. Unfortunately the block editor cannot be used for this code as we will be using python dictionaries which are incompatible with blocks. + +**Constant - **A constant is a variable that never changes when the code is run. In python, we write this in all capitals with underscores between words. + +**Lists/Arrays - **A list is an object that can contain many variables inside it. Lists can be looped through to access each of the elements. Head to ‘Activity: Making Music (Intermediate)’ to learn more about lists. + + [ + Activity: Making Music (Intermediate) + ](/resources/activity-making-music-intermediate) + +**Dictionaries - **A dictionary is an object that can access multiple variables like a list. The difference is that dictionaries have ‘keys’ assigned to each value instead of numbered indexes like a list. As seen below, dictionaries are written using curly brackets, with a key and value paired together using a colon. Both the key and value can be anything as long as all keys are unique. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/52d45e72-17a8-45d4-8e8e-3c0c648ed986/dictionary.jpg) + +*Credit: PYnative* + +Just like accessing list values, enter the key into the square brackets after the dictionary, and it will return the value assigned to that key. For further info on using dictionaries, we recommend visiting the guide to dictionaries by W3Schools: + + [ + W3Schools: Python Dictionaries + ](https://www.w3schools.com/python/python_dictionaries.asp) + +#### 1) Setting the Constants: + +As in the other ‘Making Music’ guides, we set the note lengths as constants. Next, we also set the octave as a constant (make sure the number is in a string). + +We’re then going to organise our note lengths into our first dictionary. As seen in the code, create a ‘note_lengths’ constant dictionary. Here, we will assign a single letter to each constant. For example, we can use the key ‘C’ to get the length of a crotchet out. This makes coding faster as we only need to type a single letter for the note length. + +``` +CROTCHET = 0.5 +MINUM = 2 * CROTCHET +SEMIBREVE = 4 * CROTCHET +OCTAVE = '4' + +NOTE_LENGTHS = { + 'C': CROTCHET, + 'M': MINUM, + 'S': SEMIBREVE +} + +``` + +#### 2) Preparing Inputs and Outputs: + +``` +input_song = 'E/C D/C C/C D/C E/C E/C E/M D/C D/C D/M E/C G/C G/M' +output_song = [] + +``` + +We must write the input song in a format the following code can understand. Each note will be represented by the note tone and the note length letter combined by a forward slash. For example, a crotchet of E is E/C. Each note should then be separated with a space. An empty list will also be needed to store the output song. + +We’ll print out the first two notes of the song string underneath at every step, so you can see how it changes: + +``` +Current Song = 'E/C D/C' + +``` + +#### 3) Break up the Input: + +``` +# Break up the string into each note +for note in input_song.split(' '): + output_song.append(note.split('/')) + +``` + +Next, we use the python ‘string.split(‘ ‘)’ to break the input song into a list. This breaks up the string at the spaces and puts the pieces into a list. Inside the loop, we do this again with the slashes to break each note into a list with tone and note length. + +``` +Current Song = [['E', 'C'], ['D', 'C']] + +``` + +#### 4) Attaching the Octave: + +``` +# Attach the octave to the tone +for note in output_song: + note[0] += OCTAVE + +``` + +We know that the Micromelon note system must take the tone and octave together, for example, NOTES.C4. Currently, each tone doesn’t have an octave attached to it. So we will loop through the ‘output_song’ and add the octave constant to each tone. + +``` +Current Song = [['E4', 'C'], ['D4', 'C']] + +``` + +#### 5) Translate to True Values: + +``` +# Translate the string to the true values +for note in output_song: + note[0] = NOTES[note[0]] + note[1] = NOTE_LENGTHS[note[1]] + +``` + +The final step before we play the song is to convert the tone and the note length to their actual values. This is where the dictionaries come in. For the tone, we’re going to feed the tone into the ‘NOTES’ dictionary and feed the note length into the ‘NOTE_LENGTHS’ dictionary to get the actual values. Remember that notes are actually frequencies for the buzzer to play. + +``` +Current Song = [[329.63, 0.5], [293.66, 0.5]] + +``` + +#### Play the Song: + +``` +# Play the song +for note in output_song: + Sounds.playNote(note[0]) + delay(note[1]) + +``` + +Now, exactly like in the intermediate guide, we can loop through the ‘output_song’ and play the music. + +#### Complete Code: + +The complete code here will play the first line of the song. Try and fill in the rest of the song yourself! If you find your input song too long, try to make variables for each line and add them together to make your ‘input_song’. + +``` +CROTCHET = 0.5 +MINUM = 2 * CROTCHET +SEMIBREVE = 4 * CROTCHET +OCTAVE = '4' + +NOTE_LENGTHS = { + 'C': CROTCHET, + 'M': MINUM, + 'S': SEMIBREVE +} + +input_song = 'E/C D/C C/C D/C E/C E/C E/M D/C D/C D/M E/C G/C G/M' +output_song = [] + +# Break up the string into each note +for note in input_song.split(' '): + output_song.append(note.split('/')) + +# Attach the octave to the tone +for note in output_song: + note[0] += OCTAVE + +# Translate the string to the true values +for note in output_song: + note[0] = NOTES[note[0]] + note[1] = NOTE_LENGTHS[note[1]] + +# Play the song +for note in output_song: + Sounds.playNote(note[0]) + delay(note[1]) + +``` + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/activity-making-music-beginner.mdx b/content/resources/activity-making-music-beginner.mdx new file mode 100644 index 0000000..a506063 --- /dev/null +++ b/content/resources/activity-making-music-beginner.mdx @@ -0,0 +1,122 @@ +--- +title: "Activity: Making Music (Beginner)" +date: "2024-12-31" +categories: ["Activities", "All", "Simulator Activities"] +tags: ["Buzzer", "Beginner", "Variables"] +excerpt: "Use the Rovers speaker to make it play songs. Learn to combine the world of music and robotics by going through sheet music and coding the Rover to play each note. Activity Demonstration Basics of Music:When it comes to reading sheet mu" +featuredImage: "/images/resources/activity-making-music-beginner.jpg" +--- + +Use the Rovers speaker to make it play songs. Learn to combine the world of music and robotics by going through sheet music and coding the Rover to play each note. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1b373aca-f5dd-4d23-8d4b-8c9fc5e61f74/IMG_1856.jpg) + +Activity Demonstration + +### Basics of Music: + +When it comes to reading sheet music for this task, we will be using two pieces of information from each note. The tone of the note and how long the note is played. + +As the image to the right shows, a note can sit on a line or a space. You may find many notes of the same letter (tone) but at a higher pitch (different octave) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/ba06dbea-f91c-4616-9c89-3cbedb2d06cb/Notes.jpg) + +Songs can be divided into a rhythm, the constant beat the music follows. Shown in the diagram to the right, we have the note durations. One whole note (semibreve) lasts for 4 beats. Next, minums last for 2, and crotchets last for 1. We’ll only use semibreves, minums, and crotchets for basic songs. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/dc4935ce-d22c-47ab-ad15-03107fac7252/rhythm.jpg) + +Below is an example of ‘Mary Had a Little Lamb’ in sheet music. The letters have already been written below the notes. This is the example we will use for the guide, but feel free to find your own songs or even write your own music! + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a581c6da-2f3e-4473-93d9-2e684388d54d/Mary+had+a+little+lamb.png) + +## Code: + +**Constant - **A constant is a variable that never changes when the code is run. In python, we write this in all capitals with underscores between words. + +#### 1) Setting the Constants: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/297498c0-f5e0-4c19-bf26-62e1fff9db75/Constants.PNG) + +Now we need to start setting up the framework in our code to make music. We’ll begin by setting constants for each of the note lengths. A constant is a value used repeatedly throughout the code that never changes, which is perfect for what we need here. As all the notes are multiples of the Crotchet, we can use the diagram above and some simple multiplication to set all the constants. We also need to decide on an octave to use, so make a comment to remember this. For this example, we’ll use octave 4. + +#### 2) Making the Music: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/5cd901e3-6999-4462-a423-f2b6122f4e10/note.PNG) + +This part can take a little while, but we will use the ‘Play Note’ and the ‘Delay’ blocks to play each note individually. The ‘Play Note’ block starts playing the note on the Rover, and the ‘Delay’ block controls how long the note is played. We use the constants we made before to control how long we delay. Do this for each note in the song with the correct note lengths. + +#### Complete Code: + +We went through and completed part of the example song. Try to finish the rest of the song on your own: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/234908a0-d1a5-497b-be40-81b752fe8f74/song.PNG) + +### Up Next: + +Ready to challenge yourself with faster ways to code music? Head on over to the intermediate or advanced ‘Making Music’ guides! + + [ + Activity: Making Music (Intermediate) + ](/resources/activity-making-music-intermediate) + + [ + Activity: Making Music (Advanced) + ](/resources/activity-making-music-advanced) + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/activity-making-music-intermediate.mdx b/content/resources/activity-making-music-intermediate.mdx new file mode 100644 index 0000000..46f7452 --- /dev/null +++ b/content/resources/activity-making-music-intermediate.mdx @@ -0,0 +1,203 @@ +--- +title: "Activity: Making Music (Intermediate)" +date: "2024-12-30" +categories: ["Activities", "All", "Simulator Activities"] +tags: ["Intermediate", "Variables", "Buzzer", "Iteration"] +excerpt: "Use the Rovers speaker to make it play songs. Learn to combine the world of music and robotics by going through sheet music and coding the Rover to play each note.In the intermediate course, we will focus on making the code from the beg" +featuredImage: "/images/resources/activity-making-music-intermediate.jpg" +--- + +Use the Rovers speaker to make it play songs. Learn to combine the world of music and robotics by going through sheet music and coding the Rover to play each note. + +In the intermediate course, we will focus on making the code from the beginner guide more efficient. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1b373aca-f5dd-4d23-8d4b-8c9fc5e61f74/IMG_1856.jpg) + +Activity Demonstration + +### Basics of Music: + +When it comes to reading sheet music for this task, we will be using two pieces of information from each note. The tone of the note and how long the note is played. The diagrams for music theory and the example song have been added underneath, but for further information on reading music, head over to ‘Activity: Making Music (Beginner)’. + + [ + Activity: Making Music (Beginner) + ](/resources/activity-making-music-beginner) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/260dce37-b51d-4f2b-b36c-649818f124f9/Notes.png) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a034c26c-5022-4669-8956-4fe8ce19ee74/rhythm.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/79602ccc-8999-4323-83e9-c36a72c6fed6/Mary+had+a+little+lamb.png) + +## Code: + +We will switch to the text code editor for the intermediate and advanced music activities as some of the following functions are easier to build in that editor. If you wish to see the block version of the code, paste the complete code at the bottom of this activity into the text editor and then switch to block view in the IDE. + +**Constant - **A constant is a variable that never changes when the code is run. In python, we write this in all capitals with underscores between words. + +**Lists/Arrays - **A list is an object that can contain many variables inside it. Lists can be looped through to access each of the elements. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/69da879c-a6b8-4985-b24d-31852041c636/arrays.png) + +*Credit: Srijan kumar Samanta* + +An array or list is an object that can contain multiple variables. As seen above, the image displays a list containing six strings, each representing a colour. You can put any data type in a list, and in python, you can also have data of different types in the same list. Each position in the list has an ‘index’, which is like the address of that position. Indexes start at 0 and can be used to tell the list which element you would like to read. + +To get a complete understanding of lists in python, we recommend checking out the introduction to lists by W3Schools: + + [ + W3Schools - Python Lists + ](https://www.w3schools.com/python/python_lists.asp) + +We will first make a ‘note’ list containing two elements, as seen below. Index 0 contains the tone of the note (C on octave 4). Index 1 contains the length of the note. A note is not inherent to python but something we have defined for this activity. + +``` +note = [NOTE.C4, CROTCHET] + +``` + +The idea for this code is to create a list that contains several of the above ‘notes’. The list containing the notes will represent the whole song. We will then loop through every element in the song list and play each note for the correct note length in order. + +#### 1) Setting the Constants: + +Now we need to start setting up the framework in our code to make music. We’ll begin by setting constants for each of the note lengths. A constant is a value used repeatedly throughout the code that never changes, which is perfect for what we need here. As all the notes are multiples of the Crotchet, we can use the diagram above and some simple multiplication to set all the constants. We also need to decide on an octave to use, so make a comment to remember this. For this example, we’ll use octave 4. + +``` +CROTCHET = 0.5 +MINUM = 2 * CROTCHET +SEMIBREVE = 4 * CROTCHET +# Octave 4 + +``` + +#### 2) Making the Song: + +``` +song = [ + [NOTES.E4, CROTCHET], + [NOTES.D4, CROTCHET], + [NOTES.C4, CROTCHET], + [NOTES.D4, CROTCHET], + [NOTES.E4, CROTCHET], + [NOTES.E4, CROTCHET], + [NOTES.E4, MINUM], + [NOTES.D4, CROTCHET], + [NOTES.D4, CROTCHET], + [NOTES.D4, MINUM], + [NOTES.E4, CROTCHET], + [NOTES.G4, CROTCHET], + [NOTES.G4, MINUM] + ] + +``` + +This part can take a little while, but the idea is to make a new list called ‘song’ and fill it with lists containing a note and note length. To use a note in the text editor, type ‘NOTES’ in all capitals, followed by the note and the octave number. We’ve done the first line of the song for reference. + +#### 3) Playing the Song: + +``` +for note in song: + Sounds.playNote(note[0]) + delay(note[1]) + +``` + +Now to play the music, we can use a loop to cycle through each ‘note’ list in the song. ‘note[0]’ is the first index in the ‘note’ list, which is the tone. ‘note[1]’ is the next index in the ‘note’ list, which is the duration of the note. + +#### Complete Code: + +The complete code here will play the first line of the song. Try and fill in the rest of the song yourself! + +``` +CROTCHET = 0.5 +MINUM = 2 * CROTCHET +SEMIBREVE = 4 * CROTCHET +# Octave 4 + +song = [ + [NOTES.E4, CROTCHET], + [NOTES.D4, CROTCHET], + [NOTES.C4, CROTCHET], + [NOTES.D4, CROTCHET], + [NOTES.E4, CROTCHET], + [NOTES.E4, CROTCHET], + [NOTES.E4, MINUM], + [NOTES.D4, CROTCHET], + [NOTES.D4, CROTCHET], + [NOTES.D4, MINUM], + [NOTES.E4, CROTCHET], + [NOTES.G4, CROTCHET], + [NOTES.G4, MINUM] + ] + +for note in song: + Sounds.playNote(note[0]) + delay(note[1]) + +``` + +### Up Next: + +Up for a challenge? The advanced course will take you through how to process data through strings. This technique will be more complex but allows you to create songs faster and add more options to your music. + + [ + Activity: Making Music (Advanced) + ](/resources/activity-making-music-advanced) + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/activity-pingpong-attachment.mdx b/content/resources/activity-pingpong-attachment.mdx new file mode 100644 index 0000000..48bbb42 --- /dev/null +++ b/content/resources/activity-pingpong-attachment.mdx @@ -0,0 +1,125 @@ +--- +title: "Activity: Ping-Pong Shooter" +date: "2023-10-12" +categories: ["Activities", "All", "Simulator Activities"] +tags: ["Colour Sensors", "Branching", "Iteration", "Algorithm Design", "Advanced"] +excerpt: "Use the ping-pong shooter attachment to locate and topple towers from a distance. The ultrasonic sensor can be used to find the tower by searching in a radar motion. Once the tower is located, the distance can be used to move the rover" +featuredImage: "/images/resources/activity-pingpong-attachment.jpg" +--- + +Use the ping-pong shooter attachment to locate and topple towers from a distance. The ultrasonic sensor can be used to find the tower by searching in a radar motion. Once the tower is located, the distance can be used to move the rover close enough to topple the tower. + +### Setup + +Start with a large empty space on the floor, and place a tower, approximately 20cm tall, with a light object like a Lego figurine on top. The tower should be made of lightweight material like paper or cardboard. The larger the tower, the easier it is for the shooter to hit, so choose a size from 10cm - 5cm wide. Outline a circle of tape on the ground around the tower. This is the shooting limit that the rover must not cross over. Again, the larger the ring, the harder it is to hit the target, so size accordingly. + +First, the rover must be placed in a random location near the tower. Then, the robot should spin around and locate the tower. Finally, it must distance itself from the tower without crossing the line and hit the tower with a ping-pong ball. + +### Here’s Our Approach + +**Constant - **A constant is a variable that never changes when the code is run. In python, we write this in all capitals with underscores between words. + +#### 1) Setting the Constants: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/daee31e5-931c-4d58-afed-f0d3bbbc89d7/constant.PNG) + +Start by making the ‘servo_out’ and ‘servo_in’ constants. ‘servo_out’ is how long the servo spins to shoot a ball. ‘servo_in’ is how long the servo spins to retract the pusher. + +The constants we have provided might need to be tweaked for your specific rover. This can be done through trial and error to find the best values for you. + +#### **2) The Shoot Function:** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/8e0a0183-8a12-4be4-b13f-651342216b57/shoot.PNG) + +Continuous servos can spin without limit, similar to a motor. Setting the servo to 90 degrees spins it at top speed in one direction, and -90 degrees turns it the other way. Setting the servo to 0 degrees stops the servo. + +Here, we set the servo to spin and delay for the constant ‘servo_out’. We stop the servo for half a second and then turn it in the other direction for the duration of ‘servo_in’. + +#### **3) Ultrasonic Loop:** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/8ba170c0-6993-43f3-a730-b5343cd01493/ultrasonic.PNG) + +In the main code, the rover spins around until the ultrasonic detects an object within 50cm. Put a ‘Turn Left’ movement block in a while loop that checks the ultrasonic distance. The slower the rover turns, the easier it will be to find the tower, so adjust the speed accordingly. + +If the rover keeps spinning a bit after seeing the tower, put a ‘Turn Right’ on the outside of the loop to correct it. + +#### 4) Colour Sensor Loop: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/0dddb415-2352-4b94-9821-dbeb23825e5e/colour.PNG) + +In this stage, the rover moves forward while the brightness reading from the middle colour sensor is low. For our setup, the ground had a brightness of 100 and the white tape had a brightness of 180. According to these values, when the brightness passes halfway from black to white (140), the loop ends. + +Make sure to enter your own values for this part. + +#### +5) Fire!: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/55da7e22-8216-4231-a14b-e31dbf4c3f70/fire.PNG) + +The rover will stop the motors and call the ‘*shoot*’ function to hit the tower. This will pause the robot until the entire shoot sequence is complete. + +#### Complete Code: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/70bb1ea0-f585-4367-adfb-2251e6dd9f2f/code.PNG) + +**Tip: ** + +Our code aims to get as close as possible to the line and fire. However, another technique is to find the perfect distance from the tower to shoot from and use the ultrasonic to stop the robot. + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/activity-rover-theremin.mdx b/content/resources/activity-rover-theremin.mdx new file mode 100644 index 0000000..4f691ad --- /dev/null +++ b/content/resources/activity-rover-theremin.mdx @@ -0,0 +1,112 @@ +--- +title: "Activity: Rover Theremin" +date: "2024-12-31" +categories: ["Activities", "All", "Simulator Activities"] +tags: ["Colour Sensors", "Branching", "Iteration", "Algorithm Design", "Advanced"] +excerpt: "Let’s convert the rover into one of the weirdest musical instruments of all time! In this activity, you will learn to code the rover to act like a Theremin and play it without touching a thing. Getting Into Music: As instruments go, the" +featuredImage: "/images/resources/activity-rover-theremin.jpg" +--- + +Let’s convert the rover into one of the weirdest musical instruments of all time! In this activity, you will learn to code the rover to act like a Theremin and play it without touching a thing. + +### Getting Into Music: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/8aa96bf5-a620-4cdd-a09b-36f24b5f1611/Theremin.PNG) + +As instruments go, the Theremin is quite an odd machine. The device uses two antennae that have an electromagnetic field surrounding them. These fields can be affected when a hand is moved near them. One antenna (horizontal) is used to control the note's volume, and the other (vertical) is used to control the note's pitch. + +We're going to make the rover behave similarly to the Theremin to play music. For an introduction to reading music and for an example song, head over to the 'Making Music' activity guide + + [ + Activity: MAking Music (Beginner) + ](/resources/activity-making-music-beginner) + +### Setup: + +So to make our rover theremin, we need two sensors on the rover to act as the two antennae. We'll use the left IR sensor to serve as the volume control and the right IR as the pitch control. The idea is that covering the left IR sensor will cause the rover to play a note. We can use a hand's distance from the right IR to control the note's pitch. + +To get started, print this attachment: [Note_Scale.pdf](/s/Note_Scale) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/fa78d5dd-280b-48f6-9273-b4990bbfc120/theramin+scale.PNG) + +After printing the page, position the rover so that the right track is precisely on the line for note C. As seen on the page, each note has a number in cm. This indicates how far each line is from the rover IR. We'll be using this information in the code. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/0f083ee8-b2c2-41a5-8f3a-b369659175a7/IMG_1868.jpg) + +### Code: + +#### 1) Volume Control: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/9f2bc370-98c2-4b38-b7ea-d872976d4866/Volume+control.PNG) + +First, we need to code in the volume control. If the left IR is uncovered, all sounds must stop. If the IR is covered, the rover can continue playing the notes. + +As seen in the code, if the left IR distance sees less than 6cm, the code will continue. Otherwise, all sounds will be stopped. + +#### 2) Pitch Control: + +Now, all that is left is to add a large 'if/else if 'code to the inside of the volume control to control the pitch. As the code shows, the 'if' statement checks through each distance on the note scale to see which note is being triggered. The code plays the correct note depending on how far the hand is from the right IR. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/c519b426-b768-4608-b0fc-17cfb04f2a2c/code.PNG) + +#### Tips: + +Try to make your own note scale and change the code to suit it. Maybe you can add two octaves of notes on your page. + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/activity-servo-gauge.mdx b/content/resources/activity-servo-gauge.mdx new file mode 100644 index 0000000..fccd12e --- /dev/null +++ b/content/resources/activity-servo-gauge.mdx @@ -0,0 +1,132 @@ +--- +title: "Activity: Servo Gauge" +date: "2024-12-31" +categories: ["Activities", "All", "Simulator Activities"] +tags: ["Attachments", "Servo Motors", "Intermediate"] +excerpt: "Use a micro servo to make your own visual gauges. Program the gauge to react to a sensor value, motor speed, or robot tilt to visualise data in a new way. In this activity, we’ll be making a gauge to display the stability of the rover." +featuredImage: "/images/resources/activity-servo-gauge.jpg" +--- + +Use a micro servo to make your own visual gauges. Program the gauge to react to a sensor value, motor speed, or robot tilt to visualise data in a new way. In this activity, we’ll be making a gauge to display the stability of the rover. + +### Setup + +**1) **We need a visual scale to attach to the servo. Start by printing the scale attachment below. It can help to glue the paper to card or cardboard for additional rigidity. + +[Scale Attachment](/s/gauge.png) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/5e157500-3f60-4775-ad77-fc0f6d3846df/gauge.png) + +**2) **Cut out the scale on the outer black line, as shown in the picture below. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/81665ce4-0af5-4c69-94af-47805de2864f/cut.jpg) + +**3) **Position the scale on the front of the servo with the axle at the centre of the scale. Poke through the circles on the scale, and screw in two servo-mounting screws to keep the scale in place. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/5fd4b48b-39d6-42c0-9320-31826181c612/screw.jpg) + +**4) **Connect the servo to the left servo port on the rover and turn it on. Calibrate the servo by setting the servo to position -90, and attaching the servo horn pointing to the red portion on the scale. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/7f3b6cfe-8553-4a16-8bb3-b171a9d545fb/set+servo.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a65b18be-27d3-4045-ba22-4fb449b4e9ec/program.jpg) + +### Here’s Our Approach + +**Constant - **A constant is a variable that never changes when the code is run. In python, we write this in all capitals with underscores between words. + +#### 1) Prepare the Loop: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/7c03ef85-1768-4667-9fde-314cc78648f4/loop.PNG) + +Start by setting up a ‘While’ loop that will run forever. The gauge will read the sensor and update itself each time in this loop. + +#### **2) The Scale Function:** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/59f828f7-dcfa-4d51-8e42-d82b120f5085/scale.PNG) + +1st row (x) - This is the sensor value that will be scaled + +2nd row (xmin) - This is the lowest number the sensor can be + +3rd row (xmax) - This is the highest number the sensor can be + +4th row (newMin) - The lowest number the scaled value can be + +5th row (newMax) - The highest number the scaled value can be + +From the math section, grab the ‘Scale Number’ block. The purpose of this block is to take an input (like a sensor reading) and scale it to suit an output (like servo movements). This block works similarly to the diagram below. Here are the inputs for the block: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/fe8798a8-1392-4602-bb04-3e75a8b784db/map_diagram.jpg) + +*Example of the scale function from [0, 1023] to [0, 4]* + +For this activity, we will use the y-axis of the accelerometer as our sensor. The limits of this sensor are [-1, 1]. We will connect this to the output of a servo with limits of [-90, 90]. Fill in the ‘Scale’ block using these values. + +#### **3) Complete Code:** + +Finally, place a ‘Move Servo’ block into the loop and put the scale function inside. Run the code and tilt the robot on its side. The gauge should move the hand the more you tilt the rover. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/339dd50a-1ea5-4aa8-8034-1da4febab50d/complete+code.PNG) + +**Tip: ** + +Try changing some of the colours on the scale and adding numbers to it. Maybe connect it to other sensors like the Ultrasonic, and use the gauge to display how close an object is to the rover. + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/balance-bot.mdx b/content/resources/balance-bot.mdx new file mode 100644 index 0000000..84ccc57 --- /dev/null +++ b/content/resources/balance-bot.mdx @@ -0,0 +1,148 @@ +--- +title: "Activity: Balance Bot" +date: "2021-06-04" +categories: ["Activities", "All", "Simulator Activities"] +tags: ["Iteration", "Algorithm Design", "Accelerometer", "Motors", "Maths", "Advanced"] +excerpt: "Learn iteration, algorithm design, maths, and how to use the Rover’s accelerometer and motors." +featuredImage: "/images/resources/balance-bot.png" +--- + +** | ** + +Challenge students to program their rover to always try and stabilise itself. When complete, the rover will always turn and drive upwards on any tilted surface. Once the surface the robot is driving on is flat, it should stop moving. This means the robot will balance on a seesaw. Students will need to use data from the accelerometer to control the motors based on the orientation of the rover. + +#### + Relevant Coding Skills + + Branching + + --> + + Iteration + + Functions + + Variables + + --> + + Algorithm Design + + Maths + +#### + Relevant Rover Concepts + + Ultrasonic + + --> + + IR + + --> + + Colour + + Gyroscope + + Accelerometer + + Motors + + LEDs + + --> + + Buzzer + + --> + +Activity Demonstration + +### Setup + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622791717500-EVGL2F387L08PUMP3JUA/balancebot-setup.png) + +We use a large hard cover book for this challenge as a platform. Any flat surface that can be moved and tilted will work. When the object is tilted the rover should move up the surface in an attempt to stabilize. When the surface is flat the rover has found balance and will not move. + +For this exercise you can also use a seesaw style balance board or a circular wobble board. We use a seesaw board build from 2 pieces of wood as pictured. + +### Here’s Our Approach + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/2c208513-92e1-4454-a85f-5bf189edb0af/Screenshot+2023-10-31+083156.png) + +Example Code (single axis balancing) + +#### Stage 1 + +Using an IF statement block, we can check if the x axis of the accelerometer is above or below zero. If its above, we can use a motor block to move forward, otherwise we can use the motor block to move backwards. + +#### **Stage 2** + +To make the rover move smoothly and make fine adjustments, we can use the scale number block to scale the X axis between -1 and 1 to -30 and 30 for the motor block. + +#### **Stage 3** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622791925793-ZR3JU9N77ENPMDUUJLFP/balance-bot-answer-2.png) + +Example Code (multi-axis balancing) + +To make the program also work for a circular board we need to also take into account the Y axis of the accelerometer. We can use the same scale number block to create a variable called rotation, which we can include in our motor block. Since our speed variable determines the speed the motors move forward or back, the rotation modifier needs a + or - sign. We need this sign because the robot rotates by making its tracks move in opposite directions. + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/balloon-battle-bots-at-trinity-college-beenleigh.mdx b/content/resources/balloon-battle-bots-at-trinity-college-beenleigh.mdx new file mode 100644 index 0000000..157e894 --- /dev/null +++ b/content/resources/balloon-battle-bots-at-trinity-college-beenleigh.mdx @@ -0,0 +1,40 @@ +--- +title: "Balloon Battle Bots at Trinity College Beenleigh" +date: "2022-08-05" +categories: ["Customer Stories", "All"] +tags: [] +excerpt: "Last year supported by ACS and the Gateway to Industry Schools ICT program Trinity College and Micromelon started their first Balloon Battle Bots Competition.Using the Micromelon Rovers students learnt to program their robots in Blocks and Python, be" +featuredImage: "/images/resources/balloon-battle-bots-at-trinity-college-beenleigh.jpeg" +--- + +Last year supported by ACS and the Gateway to Industry Schools ICT program Trinity College and Micromelon started their first Balloon Battle Bots Competition. + +Using the Micromelon Rovers students learnt to program their robots in Blocks and Python, before moving onto 3D modelling and printing to design their battle bots. Most designs were done in TinkerCAD but some used Fusion360 and Blender. + +After around 10 weeks of learning, designing and practicing they were ready for the final battle. The school hosted the Battle Bots event at lunchtime, for students to participate and battle their robots against others, including a handful of teacher designs. + +To kick off the program and get the students started, Adam and Tim from Micromelon visited the school with their own creations. Micromelon provided base files for all designs including toothpick holders, balloon & ping pong ball holders, and some motor mounts on top of the base shell with mounting holes for all attachments. In this session students drove the robots around the desk in remote control mode, trying to pop each others balloons. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1c55e7b4-45dc-4daa-998d-177b2863a22d/IMG_3356.jpeg) + +As the term went on students designs got more and more elaborate, including spray painting and extra skewers to pop balloons from all angles! + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/fd4fefb5-f049-4c2e-b39a-0342d07dd40e/IMG_3617.jpeg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/3c7fea74-40a8-4006-b481-1a6c0ba7fb80/IMG_3616.jpeg) + +For the final event there were over 10 teams competing, including a few from different teachers around the school. The rules for the competition were fairly simple with points awarded for each accomplishment. + +Rounds were timed and ended at 2.5 minutes or when one challenger is defeated (both balloon popped and ping pong ball dislodged). Robots leaving the arena are replaced into the arena once, otherwise eliminated. If the robots become attached or make no progress, robots are returned to opposite corners and the round continues. + +1 point - Knocking off ping pong ball + +1 point - Popping opponents balloon + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/145084b3-6f08-4abc-9cc8-e489d5d32dd3/IMG_3585.jpeg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/39087251-ce46-4c1f-bc9a-e8902c16490d/IMG_3577.jpeg) + +Want to run this program at your school? Get in contact and we’ll help! + + All the 3D print files are available on [Printables](https://www.printables.com/model/252751-micromelon-balloon-battle-shell) to get you started with your very own Battlebot. diff --git a/content/resources/binary-bot.mdx b/content/resources/binary-bot.mdx new file mode 100644 index 0000000..607dc0b --- /dev/null +++ b/content/resources/binary-bot.mdx @@ -0,0 +1,108 @@ +--- +title: "Activity: Binary Bot" +date: "2022-05-10" +categories: ["Activities", "All", "Simulator Activities"] +tags: ["Iteration", "Motors", "Maths", "Intermediate"] +excerpt: "Complete a simple exercise using only binary numbers!" +featuredImage: "/images/resources/binary-bot.png" +--- + +** ** + +Complete the Driving Shapes exercise but using only binary numbers instead of decimal numbers. If you’re unfamiliar with Driving Shapes, all you need to do is program your rover to move in a shape e.g. square or triangle. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622683712761-D72929460ZY42PMDHFYM/drivingshapes.png) + +Activity Demonstration + +### Setup + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1648414878984-60O0E082C4MTXTT0WT81/unsplash-image-KgLtFCgfC28.jpg) + +#### Learning Binary + +[**READ MORE**](/resources/learning-binary) + +All you need is your computer, a Micromelon Rove and a flat, uniform surface to drive it on. If you’re unfamiliar with what binary is check out our Learning Binary post. + +### Here’s Our Approach + +You can write a binary number by prefacing 0b before your binary number in python, e.g. 0b100 is 4. + +The binary number block can be placed in any position a normal number block would go. + +The convert block located in the utilities category has an option for binary. You can put a normal number block (from the MATH category) into this and convert it to any binary number, this is useful when you want to print out what a normal number would look like in binary. + +#### **Stage 1** + +For this solution we repeated the while loop forever so we keep getting a square movement pattern. Then I substituted my binary blocks into the turn degrees and movement blocks. + +#### To Note + +Sometimes you’ll need to adjust your angles since the rovers will turn different amounts depending on the surface they are on. See if you can find a really accurate solution with your rover and on the floor in the classroom. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/4f54c6d8-55eb-47f2-ac20-705dd90b296b/binary+bot+answer+1.png) + +Example Code + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/593cbd3d-fbaf-4de0-9168-01e01fccfc48/binary+bot+answer+2.png) + +Example Code + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/build-guide-bulldozer.mdx b/content/resources/build-guide-bulldozer.mdx new file mode 100644 index 0000000..31ee7d9 --- /dev/null +++ b/content/resources/build-guide-bulldozer.mdx @@ -0,0 +1,72 @@ +--- +title: "Build Guide: Bulldozer" +date: "2025-02-20" +categories: ["Build Guides"] +tags: [] +excerpt: "What You’ll Need: Click on the buttons below to collect the print files! Thingiverse Printables Makerworld #" +featuredImage: "/images/resources/build-guide-bulldozer.png" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/9e9f3a18-3344-4db6-8c2d-7f072fd64b7e/Bulldozer+real.jpg) + +## What You’ll Need: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/f507e1e5-db88-464b-9d8d-bc143e0400c8/Bulldozer+Parts.jpg) + +Click on the buttons below to collect the print files! + + [ + Thingiverse + ](https://www.thingiverse.com/thing:6955418) + + [ + Printables + ](https://www.printables.com/model/1199183-micromelon-bulldozer-attachment) + + [ + Makerworld + ](https://makerworld.com/en/models/1129214#profileId-1129115) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1910c295-c9d8-45a6-822b-ae82a63b2bb4/%28master%29+orange+spacer.png) + +## Step 1: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/0880fc0f-66d3-4f39-bd8a-06fe6da24ec4/Bulldozer+Step+1.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1910c295-c9d8-45a6-822b-ae82a63b2bb4/%28master%29+orange+spacer.png) + +## Step 2: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/c4933ab2-5ac7-4a5b-ad3b-37ec52b127e4/Bulldozer+Step+2.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1910c295-c9d8-45a6-822b-ae82a63b2bb4/%28master%29+orange+spacer.png) + +## Step 3: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/04be49ee-7124-415c-9436-79ddf3486274/Bulldozer+Step+3.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1910c295-c9d8-45a6-822b-ae82a63b2bb4/%28master%29+orange+spacer.png) + +## Step 4: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/390b18b7-88e5-4858-b00f-dd81c3fcb3a1/Bulldozer+Step+4.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1910c295-c9d8-45a6-822b-ae82a63b2bb4/%28master%29+orange+spacer.png) + +## Step 5: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/71c45b7d-df55-4abe-b4cf-543e530067a9/Bulldozer+Step+5.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1910c295-c9d8-45a6-822b-ae82a63b2bb4/%28master%29+orange+spacer.png) + +## Step 6: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/f80eb7b9-9658-4b4e-8a1f-5e476aceeac1/Bulldozer+Step+6.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1910c295-c9d8-45a6-822b-ae82a63b2bb4/%28master%29+orange+spacer.png) + +## Complete + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/e54a1353-c7c2-44f6-8224-87ae5c6f5cf5/bulldozer-complete.png) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/4936b839-1b4d-4c57-af5a-584764afef05/%28master%29+black+spacer.png) diff --git a/content/resources/build-guide-claw.mdx b/content/resources/build-guide-claw.mdx new file mode 100644 index 0000000..3dc449e --- /dev/null +++ b/content/resources/build-guide-claw.mdx @@ -0,0 +1,100 @@ +--- +title: "Build Guide: Claw" +date: "2022-07-26" +categories: ["Guides", "Build Guides"] +tags: ["Build Guide", "3D Printing"] +excerpt: "What You’ll Need: Click the buttons below to collect the print files! Printables Thingiverse Makerworld #b" +featuredImage: "/images/resources/build-guide-claw.jpg" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/6c156f39-d49e-4cf7-bf21-61ddeb66195d/Final.jpg) + +## What You’ll Need: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/3e67ee2f-fd06-43da-8850-0abfcd1023b6/Slide1.PNG) + +Click the buttons below to collect the print files! + + [ + Printables + ](https://www.printables.com/model/639391-micromelon-claw-attachment) + + [ + Thingiverse + ](https://www.thingiverse.com/thing:6284251) + + [ + Makerworld + ](https://makerworld.com/en/models/147783#profileId-641414) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/99b36761-8464-4ea7-9f32-f81fb17ddffd/Spacer.png) + +## Step 1: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/f5b6a919-d962-4eaa-a4fb-70b0ecd22a46/Slide2.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/8fb0f372-0b87-4c06-aa65-a4400aafd859/Spacer.png) + +## Step 2: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/24ab4146-8c9c-42c6-b83b-22297ff402fc/Slide3.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/501eac84-2f38-4593-a6af-8205957d5121/Spacer.png) + +## Step 3: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/80d8c2ae-ab27-4592-acd1-dfcd794c355f/Slide4.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/2bb07de0-9b94-49cd-8f70-8cfbcbf6f8c8/Spacer.png) + +## Step 4: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/49fa3def-2370-43e2-9537-3ed322ec597d/Slide5.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/f4ba95a8-cf11-4430-b769-bb158c3cee67/Spacer.png) + +## Step 5: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/7e58cfbf-af36-4e3b-8e44-a93de19b6a56/Slide6.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/484bba2d-85bf-445d-ad51-15295481028b/Spacer.png) + +## Complete + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/0561b1a6-6082-490b-a77c-7fa8a18c9c5e/Complete.png) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/8341cf4b-1d5e-4d05-bc3e-4629fa57c9ee/Black+Spacer.png) + +## Servo Calibration: + +Before attaching a servo horn to a servo, we need to make sure that the servo moves in the correct range. This guide will help you calibrate your servos correctly. + +--- + +#### Step 1: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/c2c5dbf1-de8d-43c7-8b9c-18c801ebe357/Code.jpg) + +Once step 1 is completed, plug the servo into the right port and run the following code: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/8809c767-f8fe-4991-b7a5-eeb7d250fcb0/Step+1+servo.jpg) + +Once the code has been uploaded, without rotating the servo, re-attach the servo horn, so when the servo is at 0, the servo horn is in the same orientation as the image. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/727606f4-ca0c-4d20-a6c1-a15a7793b53d/Black+Spacer.png) + +## What’s Next? + +With your fully built Micromelon Claw attachment, head on over to our claw attachment activity to get started! For a bonus print, grab our Meloncube from Printables or Thingiverse to help with your activity. + + [ + Activity: Claw Attachment + ](/resources/activity-claw-attachment) + + [ + Printables: MelonCube + ](https://www.printables.com/model/639390-micromelon-meloncube) + + [ + Thingiverse: MelonCube + ](https://www.thingiverse.com/thing:6284246) diff --git a/content/resources/build-guide-digger.mdx b/content/resources/build-guide-digger.mdx new file mode 100644 index 0000000..6cf527a --- /dev/null +++ b/content/resources/build-guide-digger.mdx @@ -0,0 +1,104 @@ +--- +title: "Build Guide: Digger" +date: "2022-07-28" +categories: ["Build Guides"] +tags: ["Build Guide", "3D Printing"] +excerpt: "What You’ll Need: Click on the buttons below to collect the print files! Printables Thingiverse Makerworld" +featuredImage: "/images/resources/build-guide-digger.jpg" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/0a5f1858-52b1-44a5-b665-10aea85abddc/Real.PNG) + +## What You’ll Need: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/3c0ea742-863a-49cb-8970-5c3f7db3cb13/Parts.PNG) + +Click on the buttons below to collect the print files! + + [ + Printables + ](https://www.printables.com/model/252745-micromelon-digger-attachment/comments) + + [ + Thingiverse + ](https://www.thingiverse.com/thing:5240349) + + [ + Makerworld + ](https://makerworld.com/en/models/147792#profileId-575290) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/33f20ec3-fb72-42dd-aa78-bbef2ef86c36/Spacer.png) + +## Step 1: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/3a01bdda-f4c5-446a-9edc-83a4a16c5198/Step+1.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/86a6d6ec-4a70-4c97-be36-3afc71d4d52c/Spacer.png) + +## Step 2: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/43ca2a4d-4251-4c4c-a932-f14a878ab98c/Step+2.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/0cf3bc81-83b5-431f-99bb-d68b555ce414/Spacer.png) + +## Step 3: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/fb3d00c5-2883-4fc9-a44b-6963ca66b948/Step+3.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/461a4d9a-d861-47b2-8b66-00c131696815/Spacer.png) + +## Step 4: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/67f3c7c2-a6ef-479d-b4ce-bfbbe2a467d9/Step+4.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/ebdb04f8-8853-4567-b6e9-6603c9c50c3a/Spacer.png) + +## Step 5: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/5522fd94-ffa4-4415-9a1e-cb923460edf0/Step+5.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/eadcb419-5a5e-4070-8449-b0cbe656acb0/Spacer.png) + +## Complete + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/c908abf8-cc4e-4635-b24a-b7f5bd8ec945/Final.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/4cf5f69f-a94d-4f79-ba91-0ce32a979d00/Black+Spacer.png) + +## Servo Calibration: + +Before attaching a servo horn to a servo, we need to make sure that the servo moves in the correct range. This guide will help you calibrate your servos correctly. + +--- + +#### Step 3: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/93a1cf22-5113-4f5d-8504-ac23ab19f787/Code.PNG) + +Once step 3 is completed, plug the servo into the right port and run the following code: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/856ee5ef-af67-4040-a50e-8a4212554d46/step+3+servo.PNG) + +Upload the code and attach the servo horn to the servo so it’s in this position when the servo is at 0. + +--- + +#### Step 4: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/90fda568-6518-41af-a438-8777e6d45472/code+left.PNG) + +Once step 4 is completed, plug the servo into the left port and run the following code: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/f5b29ca7-a4da-4f46-a35d-1bf1282de86a/step+4+servo.PNG) + +Upload the code and attach the servo horn to the servo so it’s in this position when the servo is at 0. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/727606f4-ca0c-4d20-a6c1-a15a7793b53d/Black+Spacer.png) + +## What’s Next? + +With your fully built Micromelon Digger attachment, head on over to our Digger and Tipper activity to get started! + + [ + Activity: Digger and Tipper + ](/resources/activity-digger-and-tipper-attachment) diff --git a/content/resources/build-guide-forklift.mdx b/content/resources/build-guide-forklift.mdx new file mode 100644 index 0000000..67615c5 --- /dev/null +++ b/content/resources/build-guide-forklift.mdx @@ -0,0 +1,88 @@ +--- +title: "Build Guide: Forklift" +date: "2022-07-22" +categories: ["Build Guides"] +tags: ["Build Guide", "3D Printing"] +excerpt: "What You’ll Need:In the print files for the fork and screw, note that there are different speed grades. The slower the speed, the stronger it is. When downloading files, choose your speed, and make sure to print out a fork and a screw of the same spe" +featuredImage: "/images/resources/build-guide-forklift.png" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/df379f3f-a36e-401a-87e4-1666a2a2fb42/IMG_3866.jpg) + +## What You’ll Need: + +In the print files for the fork and screw, note that there are different speed grades. The slower the speed, the stronger it is. When downloading files, choose your speed, and make sure to print out a fork and a screw of the same speed. A fork and screw of different speeds will not work together! + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/bd15f465-54bd-4e06-bfe1-85785b6328dd/Slide1.PNG) + +Click on the a button below to collect the print files! + + [ + Printables + ](https://www.printables.com/model/639392-micromelon-forklift-attachment) + + [ + Thingiverse + ](https://www.thingiverse.com/thing:6284242) + + [ + Makerworld + ](https://makerworld.com/en/models/147782?from=search) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a3ff0f6c-aec2-4eb0-9893-5e2bbcf0545c/Spacer.png) + +## Step 1: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/0c83d23b-df8d-4946-bd71-823c44525ed5/Slide2.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/6830e71c-c86b-472c-afff-c3af2e09a7df/Spacer.png) + +## Step 2: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/e8641366-653a-49fe-919d-623774f4ac00/Slide3.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/6c19c16c-f6e8-4175-89b9-9e25e8dfc6f6/Spacer.png) + +## Step 3: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/34df40da-ff02-4762-97dc-97f32a210db2/Slide4.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/2fe219b8-aa6f-484a-bdcc-6241422f8cbe/Spacer.png) + +## Step 4: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/26ecb03d-650c-4942-bb9b-f3b4161b336a/Slide5.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/01df5f55-da35-488b-80c0-5e0c56ce27f2/Spacer.png) + +## Step 5: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/b1dd1a22-71eb-41a0-8b79-a30b78f613f2/Slide6.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a49fb132-6781-4604-b088-7889f2877d00/Spacer.png) + +## Complete + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/f5ce5a22-2a7a-492e-9b9a-163f986fb51a/Complete.png) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/7e0e93d0-67ef-4c62-ad61-a86e5fe7d1f9/Black+Spacer.png) + +## What’s Next? + +With your fully built Micromelon Forklift attachment, head on over to our Forklift activity to get started! To help out with your activity, print out our bonus Meloncube, specifically designed for the Forklift attachment to pick up. + + [ + Activity: Forklift Attachment + ](https://micromelon.com.au/resources/activity-forklift-attachment) + + [ + Printables: MelonCube + ](https://www.printables.com/model/639390-micromelon-meloncube) + + [ + Thingiverse: MelonCube + ](https://www.thingiverse.com/thing:6284246) + + [ + Makerworld: MelonCube + ](https://makerworld.com/en/models/147793?from=search#profileId-575479) diff --git a/content/resources/build-guide-pen.mdx b/content/resources/build-guide-pen.mdx new file mode 100644 index 0000000..3abd8eb --- /dev/null +++ b/content/resources/build-guide-pen.mdx @@ -0,0 +1,74 @@ +--- +title: "Build Guide: Whiteboard Marker Holder" +date: "2022-07-29" +categories: ["Build Guides"] +tags: ["Build Guide", "3D Printing"] +excerpt: "What You’ll Need: Click on a button below to collect the print files! Printables Thingiverse Makerworld #b" +featuredImage: "/images/resources/build-guide-pen.jpg" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/95df284b-79fe-497e-9798-5c1096b5e0c2/IMG_0469.JPG) + +## What You’ll Need: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/6ab3b389-3c0a-4048-aa72-ac8e42a3992c/Parts.PNG) + +Click on a button below to collect the print files! + + [ + Printables + ](https://www.printables.com/model/252743-micromelon-pen-attachment) + + [ + Thingiverse + ](https://www.thingiverse.com/thing:5368110) + + [ + Makerworld + ](https://makerworld.com/en/models/147862#profileId-641400) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a3a8a4ea-070b-4b65-9da6-4f847401d491/Spacer.png) + +## Step 1: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/8f697961-cab6-46dd-98a9-59b92fb9daa1/Step+1.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/b358c1f4-9766-4e29-b4b1-ea77b555c54e/Spacer.png) + +## Step 2 + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/4f4983b5-4564-458a-83ba-ba77e5273806/Step+2.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/2291864e-14ce-4af2-bd49-0ebe2cbf625e/Spacer.png) + +## Complete + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/f2285054-d33c-4e3a-83ca-100eb44dea4a/Final.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/5c94f70b-f7d3-4e15-a943-0887fa5f940b/Black+Spacer.png) + +## Servo Calibration: + +Before attaching a servo horn to a servo, we need to make sure that the servo moves in the correct range. This guide will help you calibrate your servos correctly. + +--- + +#### Step 1: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/5291e7ca-c297-43da-b4d9-9a26409e1d49/Code.PNG) + +Once step 1 is completed, plug the servo into the right port and run the following code: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a059a0ea-e564-426c-a1f8-0d1d949a7048/Screenshot+2024-09-18+124443.jpg) + +Upload the code and attach the servo horn to the servo so it’s in this position when the servo is at 0. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/727606f4-ca0c-4d20-a6c1-a15a7793b53d/Black+Spacer.png) + +## What’s Next? + +With your fully built Micromelon Pen attachment, head on over to our rover Van Gogh activity to start drawing! + + [ + Activity: Rover Van Gogh + ](https://micromelon.com.au/resources/rover-van-gogh?rq=attachments) diff --git a/content/resources/build-guide-ping-pong-shooter.mdx b/content/resources/build-guide-ping-pong-shooter.mdx new file mode 100644 index 0000000..913734a --- /dev/null +++ b/content/resources/build-guide-ping-pong-shooter.mdx @@ -0,0 +1,92 @@ +--- +title: "Build Guide: Ping Pong Shooter" +date: "2024-12-31" +categories: ["Build Guides"] +tags: ["Build Guide", "3D Printing", "Attachments"] +excerpt: "What You’ll Need:When creating the printed parts, make sure to print the wings using PETG. These parts need to be flexible in order to shoot ping pong balls. Click on the buttons below to collect the print files! Thingiverse #block-yui_3_17_2_1_16993" +featuredImage: "/images/resources/build-guide-ping-pong-shooter.PNG" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/82401be6-e1ec-4619-a3e2-bccba9302fcf/IMG_4627.jpg) + +## What You’ll Need: + +When creating the printed parts, make sure to print the wings using PETG. These parts need to be flexible in order to shoot ping pong balls. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/8a919d31-a5db-413c-a462-3836eff61fc1/Parts.JPG) + +Click on the buttons below to collect the print files! + + [ + Thingiverse + ](https://www.thingiverse.com/thing:6284146) + + [ + Printables + ](https://www.printables.com/model/639385-micromelon-ping-pong-shooter-attachment) + + [ + Makerworld + ](https://makerworld.com/en/models/462433) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/627f547e-a346-4a69-9d26-36b72f3609df/Spacer.png) + +## Step 1: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/36afdd28-c3ff-493e-bbdb-28fb2a0de229/Step+1.JPG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/2f328ae2-7532-465d-a3f1-fa22fb03df69/Spacer.png) + +## Step 2: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/07017f4a-0cff-41c1-acaa-b03ddd60b28f/Step+2.JPG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/2e672967-3cc5-49c9-9fe5-e3ff6465678b/Spacer.png) + +## Step 3: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/e8251e2a-7c4e-4472-ba3f-ac84df597c51/Step+3.JPG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/041a67e9-ba7b-4494-a4bd-9f8f14d3784d/Spacer.png) + +## Step 4: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/21286391-b070-44b3-9c53-8931067a2061/Step+4.JPG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/3595466f-b4c0-4623-8851-ffd0fe627a8f/Spacer.png) + +## Step 5: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/2368f34d-d3a3-460c-913a-964502a74996/Step+5.JPG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/0f70e13f-f7bb-4b1f-b69b-1aeda816fff8/Spacer.png) + +## Step 6: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/d2218cb9-dc71-4d67-b00e-222d6da640dd/Step+6.JPG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/c0d09138-da72-497c-8a0f-54ebce4f0a51/Spacer.png) + +## Step 7: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/285e105a-c0e5-433c-91df-45908283c8b5/Step+7.JPG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/451f7d83-d949-4ba9-a80b-bf5202bc214f/Spacer.png) + +## Complete: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/e5da7cac-20a2-494f-9eda-55565e70e876/Complete.png) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/727606f4-ca0c-4d20-a6c1-a15a7793b53d/Black+Spacer.png) + +## What’s Next? + +To see how the designs of the Ping Pong Shooter came to be, click on the button below to visit the design blog. Or if you want to test out your newly built Ping Pong Shooter attachment, click on the button to head to our ping pong activity! + + [ + Design Blog: Ping Pong Shooter + ](https://micromelon.com.au/resources/design-blog-ping-pong-shooter) + + [ + Activity: Ping Pong Shooter + ](/resources/activity-pingpong-attachment) diff --git a/content/resources/build-guide-planter.mdx b/content/resources/build-guide-planter.mdx new file mode 100644 index 0000000..4fa2e12 --- /dev/null +++ b/content/resources/build-guide-planter.mdx @@ -0,0 +1,104 @@ +--- +title: "Build Guide: Seed Planter" +date: "2024-05-13" +categories: ["Build Guides"] +tags: [] +excerpt: "What You’ll Need: Click on the buttons below to collect the print files! Printables Thingiverse Makerworld" +featuredImage: "/images/resources/build-guide-planter.png" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/af19cd26-1286-464d-b95a-c8d1a6f8aa0b/IMG_3785.jpg) + +## What You’ll Need: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/555fc078-3997-4090-bdf8-b7cbf75943b7/Parts.jpg) + +Click on the buttons below to collect the print files! + + [ + Printables + ](https://www.printables.com/model/639387-micromelon-seed-planter-attachment) + + [ + Thingiverse + ](https://www.thingiverse.com/thing:6284174) + + [ + Makerworld + ](https://makerworld.com/en/models/147788) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/5a638455-24df-4cf9-8ed8-fafcbd52f564/Spacer.png) + +## Step 1: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/8efa4d48-22a8-432b-9f9a-cb6d397b83c8/Step+1.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a9b20202-16b3-4e5f-853e-d84fa604d327/Spacer.png) + +## Step 2: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/fa198de9-9161-4a87-bcab-85c8c6bfc178/Step+2.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/ed59b2c5-b009-4575-ba7e-4c0b00a63331/Spacer.png) + +## Step 3: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/359fed79-e3ee-495f-ac02-849415a1ec3e/Step+3.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/6feae948-67c5-4f96-9d8d-bf1eef902193/Spacer.png) + +## Step 4: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/ecf0cf94-a6ad-47d2-9761-585aad1f801d/Step+4.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/b1f844c0-f1c5-489b-8265-44ad8d0fd143/Spacer.png) + +## Step 5: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a8ce9c62-6ade-4ab6-8271-0b6277a740ac/Step+5.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/470718cc-7d04-402c-81a8-cde9a3a84285/Spacer.png) + +## Step 6: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/4f10aa22-6662-446e-b41e-49b04020ec85/Step+6.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1910c295-c9d8-45a6-822b-ae82a63b2bb4/%28master%29+orange+spacer.png) + +## Step 7: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/9afd3a9c-0bea-413a-b1a4-c8baa457d638/Step+7.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1910c295-c9d8-45a6-822b-ae82a63b2bb4/%28master%29+orange+spacer.png) + +## Complete + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/027d1653-0d81-4d48-9e69-9d003866403e/Complete.png) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/4936b839-1b4d-4c57-af5a-584764afef05/%28master%29+black+spacer.png) + +# Servo Calibration + +Before attaching a servo horn to a servo, we need to make sure that the servo moves in the correct range. This guide will help you calibrate your servos correctly. + +--- + +#### Step 6: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/dbb3c80a-e5a8-4ab9-b983-54ea833771cc/code+left.PNG) + +Once step 6 is completed, plug the servo into the left port and run the following code: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/c30a19a6-093a-414d-a178-cb5ac5797e75/Step+6+Servo.png) + +Upload the code and attach the servo horn to the servo so it’s in this position when the servo is at 0. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/4936b839-1b4d-4c57-af5a-584764afef05/%28master%29+black+spacer.png) + +## What’s Next? + +With your fully built Micromelon Seed Planter attachment, head on over to our Seed Planter activity to get started! + + [ + Activity: Seed Planter + ](https://micromelon.com.au/resources/line-following-h433h-89p7d-capak-lpsxl) diff --git a/content/resources/build-guide-roborave-line-follow.mdx b/content/resources/build-guide-roborave-line-follow.mdx new file mode 100644 index 0000000..152f461 --- /dev/null +++ b/content/resources/build-guide-roborave-line-follow.mdx @@ -0,0 +1,110 @@ +--- +title: "Build Guide: RoboRAVE Line Follow" +date: "2024-12-31" +categories: ["Build Guides"] +tags: ["Build Guide", "3D Printing", "Line Follow"] +excerpt: "What You’ll Need: Click on the buttons below to collect the print files! Printables Thingiverse Makerworld" +featuredImage: "/images/resources/build-guide-roborave-line-follow.jpg" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/06b1edb8-569b-4a74-b843-70fcbd709345/IMG_1131.jpg) + +## What You’ll Need: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/11b8addc-b96a-4d25-a417-ee41cf226110/Parts.PNG) + +Click on the buttons below to collect the print files! + + [ + Printables + ](https://www.printables.com/model/639386-micromelon-roborave-line-follow-attachment) + + [ + Thingiverse + ](https://www.thingiverse.com/thing:6284165) + + [ + Makerworld + ](https://makerworld.com/en/models/147778) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/92405d2b-7ba2-4907-ab74-671e95e93483/Spacer.png) + +## Step 1: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/683562cf-bfa9-44cb-91d9-3fa4b7a2b863/Step+1.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/6e89d704-2860-470f-a944-c31d76d79d3a/Spacer.png) + +## Step 2: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/e83628b4-fbe8-458f-a9f7-28c5f693adbf/Step+2.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1270518c-ade1-4d7b-a504-545d2c23238e/Spacer.png) + +## Step 3: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/f71d9a33-f9cc-4435-9c99-2cb9fd6f708b/Step+3.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/56045e9d-987e-4193-a016-439429419639/Spacer.png) + +## Step 4: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/f7e57c6d-7a2f-4f31-988f-b971232a2aee/Step+4.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/ae5ddb8f-202e-431a-809c-f299897df0d3/Spacer.png) + +## Step 5: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/bc9c7646-496e-4a21-bcc6-f48dc1eeec97/Step+5.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/0082261a-2e3d-4823-9ad6-590481eb6f44/Spacer.png) + +## Step 6: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/82f25a3b-1af5-4d8a-8036-a471c0a14784/Step+6.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/e1e31233-e518-44ac-9e0d-484e81e0fc6e/Spacer.png) + +## Step 7: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/3b9942be-2cf4-40b4-a999-9c504baad90b/Step+7.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/b08d92f0-5f70-47c8-9f3f-7646fc59d3d5/Spacer.png) + +## Step 8: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/28e3e166-8922-4e76-9b27-06190427b492/Step+8.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/491f1dc9-3231-420c-993e-be3cbbba269f/Spacer.png) + +## Complete: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a66e838c-9aa3-4cfa-b84e-bca8827b2c9f/Complete.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/92d4ff8b-67fc-4cee-a7ba-06c7b6b5a100/Black+Spacer.png) + +## Servo Calibration: + +Before attaching a servo horn to a servo, we need to make sure that the servo moves in the correct range. This guide will help you calibrate your servos correctly. + +--- + +#### Step 5: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/3cc8bfb2-5ac1-4148-adb9-0fb47daf5fbf/Code.PNG) + +Once step 5 is completed, plug the servo into the right port and run the following code + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/f3b5874f-f027-4618-acb8-f3db7a34729d/Servo+calibration.PNG) + +Upload the code and attach the servo horn to the servo so it’s in this position when the servo is at 0. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/015cf679-68e8-4e77-b571-6b23d635f73f/Black+Spacer.png) + +## What’s Next? + +With your fully built Micromelon RoboRAVE attachment, head on over to our guide to RoboRAVE line follow to get started! + + [ + Guide to RoboRAVE Line Follow + ](https://micromelon.com.au/resources/guide-to-roborave-line-follow) diff --git a/content/resources/build-guide-tipper.mdx b/content/resources/build-guide-tipper.mdx new file mode 100644 index 0000000..fd26ddf --- /dev/null +++ b/content/resources/build-guide-tipper.mdx @@ -0,0 +1,116 @@ +--- +title: "Build Guide: Tipper" +date: "2022-08-18" +categories: ["Build Guides"] +tags: ["Build Guide", "3D Printing"] +excerpt: "What You’ll Need: Click on the buttons below to collect the print files! Printables Thingiverse Makerworld" +featuredImage: "/images/resources/build-guide-tipper.jpg" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/4e252d31-ef94-4251-8408-3720de2f36a4/IMG_0655.jpg) + +## What You’ll Need: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/9683eb33-7919-4ddb-bb6a-ce4e7cae0218/Parts.PNG) + +Click on the buttons below to collect the print files! + + [ + Printables + ](https://www.printables.com/model/252744-micromelon-tipper-attachment) + + [ + Thingiverse + ](https://www.thingiverse.com/thing:5317282) + + [ + Makerworld + ](https://makerworld.com/en/models/147786#profileId-575448) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a7444382-36e9-444e-b71e-a69b47e20aea/Spacer.png) + +## Step 1: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/c0cf680a-cdc8-4ea5-9316-784931411980/Step+1.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/be53203f-ce05-4bca-b3f9-c65ae0bb1860/Spacer.png) + +## Step 2: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/e2761035-802b-47fa-9a5e-8f277c728d3f/Step+2.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/f6a7bdf5-3ed3-4530-a632-3f1d4960034d/Spacer.png) + +## Step 3: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/d77ef6e5-f5c0-4603-8c96-f0d038eb71b4/Step+3.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/0dbf536e-0c69-4d48-aaf0-564420daa943/Spacer.png) + +## Step 4: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a0463c21-3be4-4f9c-a35b-4deec7c29429/Step+4.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/6f00014a-28d9-4d31-b25b-842aeef367e6/Spacer.png) + +## Step 5: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/ea2e55c3-2782-48b6-89ea-3eac088f69bc/Step+5.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/8efba3d9-882f-4a4e-9d30-8f63d3392cea/Spacer.png) + +## Step 6: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/e8dad294-c9d2-408b-a4ee-3ff1217ce065/Step+6.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/7622de86-a5e2-4e91-8989-7a754c8b1bc7/Spacer.png) + +## Step 7: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a9c1891b-3312-4d09-aaea-e5cd80c7aed5/Step+7.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/b01dcc51-c947-4c6a-84f0-e66b6ab0175a/Spacer.png) + +## Step 8: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/754ce73b-5f96-4f87-b122-c5383e6dc7b2/Step+8.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/f66186d4-9301-4b21-8f32-ed3fde1f354e/Spacer.png) + +## Step 9: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/5f271ced-210f-42b2-9fb2-aed2446b6f56/Step+9.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/0c2e75d6-61db-4735-85d1-98820dbac3bc/Spacer.png) + +## Complete: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/87ae2e5f-8c33-4c59-b6ed-55b3536933ea/Finished.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a14bc807-db0f-4ac6-a1b8-6fdc835e32f5/Black+Spacer.png) + +### Servo Calibration: + +Before attaching a servo horn to a servo, we need to make sure that the servo moves in the correct range. This guide will help you calibrate your servos correctly. + +--- + +#### Step 3: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/c2b9dcf8-338b-4b37-8b95-247700d1a0c7/Code.PNG) + +Once step 3 is completed, plug the servo into the right port and run the following code: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/90d40d33-a5d0-4ebc-9c04-73b9b49f8075/Step+3+Servo.PNG) + +Upload the code and attach the servo horn to the servo so it’s in this position when the servo is at 0. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/727606f4-ca0c-4d20-a6c1-a15a7793b53d/Black+Spacer.png) + +## What’s Next? + +With your fully built Micromelon Tipper attachment, head on over to our Digger and Tipper activity to get started! + + [ + Activity: Digger and Tipper + ](/resources/activity-digger-and-tipper-attachment) diff --git a/content/resources/cargo-bot.mdx b/content/resources/cargo-bot.mdx new file mode 100644 index 0000000..a565ba6 --- /dev/null +++ b/content/resources/cargo-bot.mdx @@ -0,0 +1,88 @@ +--- +title: "Cargo Bot" +date: "2022-03-13" +categories: ["Activities", "All"] +tags: ["Motors", "Beginner"] +excerpt: "Don’t drop the cargo!" +featuredImage: "/images/resources/cargo-bot.png" +--- + +** ** + +Create a small obstacle course for rovers to drive through whilst carrying cargo on top. Students need to program their rover motors carefully to navigate through the course with as much cargo on board as possible. This is a simple exercise to help students practice using rover motors and understand how to regulate speed. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/485e1497-a0fa-4759-a6ec-a809d27c3731/cargo+bot.png) + +### Setup + +This exercise is about students learning that slow and steady often works better. To construct the course we recommend placing some books down for the rover to drive over. Try not to make the course too difficult. For cargo we use common stationary, about 3-4 items that all fit on the rover is best. Avoid using cargo that will be damaged if caught in the rover tracks. + +### Some Useful Blocks + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/7877cd5c-c806-49b5-87a3-3699ac47eb37/cargo+bot+answer.png) + +Example code + +The correct answer for this challenge will change depending on the obstacle course. + +The blocks to the right are some of the different type of ways you can program a rover to move and turn. We encourage students to try and experiment with different movement blocks to learn how to determine what blocks are useful in what scenarios. + +We let students use fixed distance blocks in this exercise as the aim is to help them understand the important of choosing the right motor speed. You can add your own rules to introduce concepts like branching and iteration with sensors depending on the obstacle course. + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/colour-sensor.mdx b/content/resources/colour-sensor.mdx new file mode 100644 index 0000000..07577f9 --- /dev/null +++ b/content/resources/colour-sensor.mdx @@ -0,0 +1,336 @@ +--- +title: "The Colour Sensor" +date: "2021-06-30" +categories: ["All", "Guides"] +tags: [] +excerpt: "Learn what the colour sensor is and how to code it." +featuredImage: "/images/resources/colour-sensor.gif" +--- + +The colour sensors are one of the five sensor types on the Micromelon Rover. They’re located on the underside of the rover, directly under the ultrasonic sensor. The rover has 3 identical colour sensors. + +The Rover is designed to have three sensors to make it possible to attempt more difficult challenges. Line following challenges can be completed with a single colour sensor, but using multiple sensors allow for more comprehensive solution. + +**What Do They Do?** + +The colour sensors are designed to detect what colour they are currently facing. They are located on the underside of the rover so we can determine what colour the surface is that the Rover is driving over. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625029574986-JHNM08UZI14W31Y2O6WG/top+pointout.png) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625029701737-4HHXWDZ59MY4LW7HO2CF/underside+pointout.png) + +### What Exactly is Light & Colour? + +Before we learn about how the colour sensors work, let’s learn a bit more about what colour is. Colour as we see it on things around us like green in grass and brown in wood is produced by light. The visible light emitted by the sun or a light bulbs reflecting off of objects which makes it possible for us to see what colour they are. Light is actually made up of electromagnetic waves. The science behind electromagnetic waves and how we see them is complicated, for now all we need to know is they are types of light. Electromagnetic waves vary in length, similar to how there are big waves and small waves at the beach. The size of the electromagnetic wave determines what colour that light will be. All visible light we see with our eyes ranges from about 380nm (nanometres) to 750nm. Below is a diagram of the visible light spectrum. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625035522529-VS995FLIII9Z9RVQL7VA/visible+light+spectrum.png) + +As we can see in our light spectrum, violets and blues are shorter electromagnetic waves at around 380-485nm and orange and reds have longer wave lengths at around 590-750nm. + +**Where is White?** + +White is a colour but why is white on the colour spectrum? The reason it’s not there is because white light is actually what we are seeing when we see all coloured light at once. White light is the kind of light emitted from the sun. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625532898955-D48HV0MZZC8519BN7XZ7/red+reflect.png) + +**White Light Becomes the Colour We See in Objects** + +When white light is produced it travels outwards and hits things in the world. When it hits objects, it is either absorbed or reflected. When a coloured light is reflected off of an object it continues to travel. This reflected light is the coloured light we see from objects. The light that isn’t reflected is absorbed by the object and we can’t see it. A red object is red because it will always reflect red light and absorb other coloured light. + +### How Does the Colour Sensor Work? + +To detect what colour the colour sensor is facing, all the colour sensor has to do is detect what coloured light is being reflected off of that surface. Each colour sensor has 4 LEDs and a light detector. Let’s breakdown how these components work together to detect surface colour. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625100311503-WDDSCHSQ1WV859CPT1WE/animation+diagram.png) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625100333671-W96TNT63WMR1GW4LCSHJ/colour+animation.gif) + +- The colour sensor LEDs illuminate with white light (white light consists of all coloured light from the visible light spectrum). + +- The white light travels down and hits the surface. Some light is absorbed, some is reflected. + +- The reflected light travels away from the surface. + +- The sensor detects the returning reflected coloured light.** ** + +**The colour sensor determines what colour it is facing by detecting what coloured light is reflected off of the surface. ** + +### Colour Sensor Problems & Limitations + +**Light Pollution & Shadow** + +When using the colour sensors, you may receive a different value on each sensor from the same surface. This might be caused by shadows moving over the surface or alternative light sources illuminating parts of the surface with a higher intensity of reflected light to the light detector. Unfortunately, light pollution is an unavoidable obstacle when programming a real colour sensor and you should always adjust and calibrate the light values you use for the environment your Rover is in. + +**Colour Sensor Range Is Short** + +The light sensors work most effectively when the target surface looking to be checked is within 1-1.5cm from the sensor. This matches the height of the sensor from the ground when the rover is placed flat on the surface. + +When the sensor is within 1-1.5cm from the target surface the majority of detected light will be that which has reflected off the target surface. The further the sensor is from the target surface the more likely it is light from outside sources will pollute the readings from the light detector. This will lead to inaccurate colour readings. + +**Colour Detection Accuracy** + +The rover colour sensors are powerful however they are not as accurate as human eyes. Where humans have little trouble differentiating shades of green e.g. dark green and light green; the rover may only identify them as green. This is true for other like colours, e.g. a lighter shade of red and orange may be mistaken for the same colour. When completing colour based activities, its easier to have coloured components with a clear contrast. This is why typical line following challenges have a white background and black line. + +### Programming The Colour Sensor + +Open the Code Editor, connect to a Micromelon Rover and open up the sensor view. To open sensor view, click the ROVER button next to your rover’s name. For a refresher on the code editor, check out the [Getting Started With The Micromelon Rover](/resources/getting-started-with-the-micromelon-rover) post + +In the sensor view dialog, the colour sensor values are located in the top right table. The table has a range of colour values. The top row contains the approximated colour the Rover colour sensors see. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623908456123-SFLGD6EJY3YZD9ICDIIR/opening+sensor+view.gif) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625533093718-SQ2UVFK2X7TK8WBFFW0D/colourtable.png) + +**Understanding The Values** + +Unlike the ultrasonic sensor or IR sensor that have one default value, the colour sensors report to use a range of different values we can use in different scenarios. The left, middle and right sensor all return the same type of data. Each sensor has a **hue, red, green, blue **and **brightness** values. Let’s breakdown and understand the values that the sensors return. + +**Hue** + +Hue is a way to define colour based on a range of 0 to 360. This range is based on the 360 degrees of a colour wheel. All colours that humans perceive are represented on a degree of the wheel. But where exactly are black and white? Hue is one component of the HSV (hue, saturation, value) colour model. The saturation and value components of the HSV colour spectrum help us demonstrate black and white. Our Rover only communicates the hue of a colour and not the saturation or value. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625535015990-8D63EJTQ85J7YBQRAFWD/hue+circle.png) + +**Red, Green & Blue (RGB)** + +The red, green and blue values are in the range of 0 to 255. The red values show the amount of red light the sensor detects, blue values for blue light and green values for green light. A sensor facing a pure red surface will show a high red value and low green and blue values. A sensor facing a pure yellow surface will show a high red & green value but low blue value. This follows the logic of the RGB colour model where combining colours creates new colours. You can use the RGB values to determine what colour you are looking at. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625540269857-KYF2Z2SCBWDA0HFLO8SC/rgb+diagram.png) + +**Brightness** + +Brightness is a value in the range of 0 to 255. The brightness value shows how much white light the colour sensor is currently detecting. Like we’ve talked about previously white light isn’t the same as red, green or blue light. White light is all coloured light combined. A high brightness value indicates the colour sensor is detecting a range of coloured light. A pure white surfaces will always produce a large brightness value. + +**Using the Colour Values in Code** + +Let’s write a simple program to make our Rover set its LED colour to the colour it currently sees from the middle colour sensor. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/656e7059-1db7-464c-b6fc-8359c67b02c0/programing+the+sensor.gif) + +- Start with our **While True** loop as this program will need to be repeated many times in order for the sensor to keep gathering data. + +- Let’s get a **Set All LEDs** block from the **Lights/Sounds** category. + +This block takes a colour block. We need a way to translate our colour sensor value to a colour block. + +- In the **Colour **category there is a **Hue Colour** block. This will translate a hue value to a colour block. Place the **Hue Colour** block in the **Set All LEDs **block. + +- Now we just get a hue value of our middle sensor and attach it to our **Hue Colour **block. In the **Sensors** category, grab the **Read Hue From Middle Colour Sensor** block and attach this to the **Hue Colour** block. + +- Press Play! + +While this code is running our rover will be changing its LEDs to match the colour it is currently approximating from the middle colour sensor. + +### Wrapping Up + +Now that we’re familiar with what the colour sensor is, how it works and how to program it, it’s time to start doing some activities. Try these activities that require using the colour sensors. + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1678160894853-587IRX3HY6N4T701GHY8/cover.jpg) + + ](/resources/activity-rover-theremin) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Activity: Rover Theremin](/resources/activity-rover-theremin) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Read More →](/resources/activity-rover-theremin) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1719456652868-A60EBBK9BOY7S6D987RW/IMG_3785.jpg) + + ](/resources/line-following-h433h-89p7d-capak-lpsxl) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Activity: Seed Planter](/resources/line-following-h433h-89p7d-capak-lpsxl) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Read More →](/resources/line-following-h433h-89p7d-capak-lpsxl) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1673240078055-UBVC2EKJV99G0ZCTBIHD/IMG_1578.jpg) + + ](/resources/activity-pingpong-attachment) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Activity: Ping-Pong Shooter](/resources/activity-pingpong-attachment) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Read More →](/resources/activity-pingpong-attachment) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1716518225046-XC8YN4EIX7ZRQOAOFVDB/IMG_3866.jpg) + + ](/resources/activity-forklift-attachment) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Activity: Forklift Attachment](/resources/activity-forklift-attachment) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Read More →](/resources/activity-forklift-attachment) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1673231471076-JXN2HUDF7O7BSHCC7NHW/IMG_1574.jpg) + + ](/resources/activity-claw-attachment) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Activity: Claw Attachment](/resources/activity-claw-attachment) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Read More →](/resources/activity-claw-attachment) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1673404495130-B9UES0ICCTHVU3KYQLJT/IMG_1586.jpg) + + ](/resources/activity-digger-and-tipper-attachment) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Activity: Digger and Tipper](/resources/activity-digger-and-tipper-attachment) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Read More →](/resources/activity-digger-and-tipper-attachment) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464675848-K9YEOYK65IWRFRX4QJ1R/blog+header+image+.png) + + ](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Robot Simulator](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +How to get started with the Micromelon Robot Simulator. + + [Read More →](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1626837419969-WBB4D85KQIXSOP750N5M/resized+banner+%281%29.png) + + ](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Micromelon Rover](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +Crash course on basic rover function, how and what to program and starter activities to attempt. + + [Read More →](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622691207784-0X6JV7RYRQXZAFRG712S/pisonescape.png) + + ](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + + [Activity: Prison Escape](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + +Learn branching and iteration using the colour sensors and motors. + + [Read More →](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) diff --git a/content/resources/colourful-sounds.mdx b/content/resources/colourful-sounds.mdx new file mode 100644 index 0000000..d029c37 --- /dev/null +++ b/content/resources/colourful-sounds.mdx @@ -0,0 +1,140 @@ +--- +title: "Activity: Colourful Sounds" +date: "2021-06-03" +categories: ["Activities", "All"] +tags: ["Colour Sensors", "Iteration", "Buzzer", "LEDs", "Maths", "Intermediate"] +excerpt: "Learn iteration and how to use the colour sensor, LEDs, and buzzer." +featuredImage: "/images/resources/colourful-sounds.png" +--- + +** | ** + +Create a program that allows our robot to translate data from the colour sensors to display on the LEDs and play sounds. When you move your rover over new colours the LEDs will match that surface colour and create sound unique to that colour. + +#### + Relevant Coding Skills + + Branching + + --> + + Iteration + + Functions + + Variables + + --> + + Algorithm Design + + --> + + Maths + +#### + Relevant Rover Concepts + + Ultrasonic + + --> + + IR + + --> + + Colour + + Gyroscope + + Accelerometer + + Motors + + LEDs + + Buzzer + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622691478946-R1HY13KLGAY8T9YJUTX5/colourfulsounds.png) + + Activity Demonstration + +### Setup + +This exercise requires access to many different coloured surfaces or cards. Lay them out in different orders on the floor and have the rover drive across them to play different tunes. To make this music sound good you will have to do some more complex calculations from the hue value to frequency. Try looking up the frequencies of musical notes. + +### Here’s Our Approach + +#### Stage 1 + +We want to set all our LEDs to the colour our sensor is detecting. The Set LED blocks use an RGB value. The blocks we use to get colour sensor values do not return values in RGB. This means we need a way to translate the value from our colour sensor to an RGB value. One of the values we can get from our colour sensor block is hue, we can use a hue to colour block from the colour category and place that in our Set all LEDs block. + +**Stage 2** + +The hue colour sensor block returns a single number. We can program our rover’s buzzer to play sound at a specific frequency (in Hz), which is just a number of vibrations per second. We can place the hue value we get from our colour sensor directly inside our Play Sound block. We multiply this with a math block to make the sound more pronounced. See if you can add to this calculation to make better music. + +#### **Stage 3** + +We want to repeat this behaviour indefinitely so once it’s running we can pickup and move move our robot over new colours around us and it will play sound. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622691451073-Q4DJXIV8XQ9HKA09RZH1/colourfulsounds-answer.png) + +Example Code + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/connections-in-3d-printing.mdx b/content/resources/connections-in-3d-printing.mdx new file mode 100644 index 0000000..26cb098 --- /dev/null +++ b/content/resources/connections-in-3d-printing.mdx @@ -0,0 +1,164 @@ +--- +title: "Connections in 3D Printing" +date: "2024-12-31" +categories: ["Guides"] +tags: [] +excerpt: "Credit: Sculpteo When creating objects for 3D printing, it’s sometimes hard to print the entire object at once. It helps to break it up into smaller pieces and put them together. But gluing pieces together can sometimes be tedious and challenging whe" +featuredImage: "/images/resources/connections-in-3d-printing.jpg" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/f4dc3e33-2a5d-4c2c-b0af-250d67fb3b95/Connector.jpg) + +*Credit: Sculpteo* + +When creating objects for 3D printing, it’s sometimes hard to print the entire object at once. It helps to break it up into smaller pieces and put them together. But gluing pieces together can sometimes be tedious and challenging when you want to replace parts. So how can we 3D print our own connections? In this guide, we have listed some ways you can use 3D printing to make connections. + +## Joints: + +Simple shape joints can be made by simply having male-to-female connectors 3D printed. You can find inspiration for connectors from woodworking joinery such as dovetails. Connecting these are simple as snapping the two parts together, using friction to hold the joint together. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/7f16b44e-2bea-4f63-bf5f-9b8f4e35f5d0/Joints.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/8e634973-511b-4e41-90f6-0a30560fdd89/dovetail.jpg) + +*Credit: Markforged* + +It’s important to remember that printers do not print dimensions perfectly, so it helps to add a bit of tolerance. In connections like the ones above, it’s good to make the female connector slightly larger than the male connector. This is a trial and error process as each printer is different. In our experience, +0.3mm for a hole is a good place to start. + +## Cons + +## Pros + +--- + +- Somewhat breakable + +- Lots of trial and error + +- Weak connection + +- Simple to design + +- Easy to print + +- Easy to assemble + +## Self-Tapping Screw Holes: + +Adding appropriately sized holes to your design will allow you to add screws that will self-tap as they are screwed in. While normal circular holes work, a great way to implement self-tapping holes is to use the following design: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/d3e10bc3-e921-4fc0-892f-11f82a7ad600/selftap.PNG) + +- Create a circle the same size as your screw size (this dimension should be adjusted depending on your printer) + +- Create a triangle with lines tangential to the circle + +- Apply a slight fillet to this triangle + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a4982112-67ae-4394-80f8-514a8c4b1665/selftap+hole.PNG) + +Once these holes are printed, screw a screw all the way in, which will apply thread to the inside of the hole. Remember, if the screw feels loose, make the dimension of the circle in step 1 a bit smaller. + +### Cons + +### Pros + +--- + +- Requires purchase of screws + +- Weak connection + +- Simple to design + +- Easy to assemble + +- Easy to print + +## **Threaded Inserts:** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/ec94930d-3909-4b43-bffb-286e85ac7c8b/threaded+insert.PNG) + +*Credit: Joshua Vasquez - Threading 3D Printed Parts: How to Use Heat-Set Inserts* + +Threaded inserts are the step up from self-tapping screw holes. These are a great way to add strong metal threads to screw holes in 3D prints. First, you must obtain threaded brass inserts for your desired screw size. These brass inserts can then be heated and gently pressed into a corresponding hole in your print. Once the insert is flush with the print’s surface, leave it to cool, and it will be held in place. We have outlined a basic technique below. However, a great resource is an extensive guide on heat-set inserts by Joshua Vasquez on Hackaday ([Link Here](https://hackaday.com/2019/02/28/threading-3d-printed-parts-how-to-use-heat-set-inserts/)). + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/7068f917-7ef4-4caf-8056-f61af73c8310/brass+insert.jpg) + +- Purchase threaded inserts for desired screw size (ID). Note the outer diameter (OD) of the insert (not the screw size) + +- When designing, create the holes the same size as the insert OD, and make the depth of the hole 1.5 times the length of the insert. + +- Hold an insert on the mouth of the 3D-printed hole using a pair of pliers. + +- Gently rest a soldering iron (same temp as the material melting range) on the insert and slowly start pushing it into the hole once it’s hot. + +- When there is about 0.5mm left of the insert to push in, remove the soldering iron and use a flat piece of metal to push the insert the rest of the way in. + +- Once the metal is flush with the printed surface, hold it until the plastic and the insert cool down again. + +## Cons + +### Pros + +--- + +- Requires purchase of brass inserts and screws + +- Can be time-consuming to insert into prints + +- Simple to design + +- Very strong connection + +- Easy to assemble + +- Easy to print + +## Print-In-Place: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/5e776cce-585b-4522-89f0-5bc2e8f2f577/race+car.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/8de109d8-805f-4005-ae5c-e10b65e7093b/IMG_1937.JPG) + +Print-in-place is a technique for designing objects with moving components that do not require additional assembly. The idea is to design a single object in two unconnected and free-standing parts. If designed correctly, the part should hold together even when taken off the build plate. In the design above, the four wheels are printed with axles and can rotate about the axle without assembly. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/3a2a025c-208a-44f9-9946-ca5643f8baa1/Sketch.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/f6561c27-19bc-4f7d-97ef-7b0674465fdb/cross+section.PNG) + +As you can see in the wheel design, the axle inside is not actually touching the inner surface of the wheel. Still, the printer can print the axle and wheel without support. Furthermore, the wheel can’t slip off because of the angle between the axle and the wheel. This technique above is a great way to print-in-place wheels and axles. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/ac112b63-2322-4ca8-acf5-d7c9f5624321/hinge.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/5e778098-d763-428a-99bd-fed18daa9fb9/Untitled+%E2%80%91+Made+with+FlexClip.gif) + +Show above is a print-in-place hinge by mikeprusa. As seen in the gif, the hinge uses a technique similar to the wheels on the race car. This design, however, is printed in a different orientation. This technique can be used to create hinges in your parts. There are many other versions of print-in-place joints, but they can be very complex to design. + +## Cons + +## Pros + +--- + +- Difficult to design + +- Difficult to print + +- Joints can be breakable + +- No Assembly required + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/727606f4-ca0c-4d20-a6c1-a15a7793b53d/Black+Spacer.png) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/514f66e4-0c76-4ca8-8451-b38d0c4b39e6/2021-12-16_16-01-19_1639630906.jpg-2_9aae3875-8e0b-41ff-8d46-14a38ce51916.webp.jpeg) + +# Say Hi to Makerhero! + +From filament, to repairs and spare parts. Micromelon has spent the last 6 years working with schools, businesses and individuals to repair, maintain and print great things. We run 3D printing training and webinars to the public focused around using 3D printers safely around students at schools, robotics clubs and at home. + +We also own MakerHero, our very own 3D printing filament and parts brand. + + [ + Buy MakerHero Filament and Parts + ](https://makerhero.com.au) diff --git a/content/resources/conversation-bot.mdx b/content/resources/conversation-bot.mdx new file mode 100644 index 0000000..b2e4387 --- /dev/null +++ b/content/resources/conversation-bot.mdx @@ -0,0 +1,140 @@ +--- +title: "Activity: Conversation Bot" +date: "2021-06-03" +categories: ["Activities", "All"] +tags: ["Branching", "Iteration", "Buzzer", "LEDs", "Beginner"] +excerpt: "Learn iteration, branching, and how to use the buzzer and LEDs." +featuredImage: "/images/resources/conversation-bot.png" +--- + +** | ** + +Use the input block to create a conversation between you and your rover. Use variables to save information in the conversation or ask the robot to do different tasks. + +#### + Relevant Coding Skills + + Branching + + Iteration + + Functions + + Variables + + --> + + Algorithm Design + + --> + + Maths + +#### + Relevant Rover Concepts + + Ultrasonic + + --> + + IR + + --> + + Colour + + Gyroscope + + Accelerometer + + Motors + + --> + + LEDs + + Buzzer + +Activity Demonstration + +### Setup + +This exercise doesn't necessarily require a lot of space as you can choose whether the robot will move or not. There is no limit to how the conversation can work. Try and involve things like LEDs and Sounds from the rover. This often leads to needing to use variables, branching, loops, and functions. + +### Here’s Our Approach + +This example code is not the only conversation that can be had with the rover. This just demonstrates how you can use the input block with variables and if statements. This can be easily extended with loops, motors, sensors, and functions. + +#### Stage 1 + +Use the request input block to greet the user and then ask which colour they prefer. We can use a print block with string concatenation to say hello. Make sure to store the inputs in well-named variables to make your code easy to read. + +#### **Stage 2** + +Use an IF statement to check whether the response is something we understand and the ELSE branch to say when we don’t understand. Use a set all LEDs block to set the colour of the LEDs when we get a response we understand + +#### **Stage 3** + +Add more responses to the IF statement as ELSE IF (ELIF) branches. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622691722875-A8F2392YSG73XLX93G0W/conversationbot-answer.png) + +Example Code + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/creating-a-maze-unit.mdx b/content/resources/creating-a-maze-unit.mdx new file mode 100644 index 0000000..0f27a91 --- /dev/null +++ b/content/resources/creating-a-maze-unit.mdx @@ -0,0 +1,382 @@ +--- +title: "Creating A Maze Solving Unit For Your Digital Technologies Class" +date: "2021-07-10" +categories: ["All"] +tags: [] +excerpt: "How to do maze solving in your digital technologies classroom." +featuredImage: "/images/resources/creating-a-maze-unit.png" +--- + +Maze challenges are great cumulative activities for digital technologies classes. Maze solving algorithms incorporate branching and iteration and require students to understand sensor data. This blog post will cover: + +- The digital technology learning objectives which maze algorithms cover. + +- Different maze complexity and how to make mazes the appropriate complexity for your students. + +- Assessing work and achievement standard. + +- How to build your student's knowledge throughout the term so they are ready to attempt maze assessments. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625701319275-A78S6LQ8N8YC9M1WD2IQ/maze.png) + +### **What Skill Level Are Mazes Appropriate For?** + +Mazes can be a great challenge for students of all skill levels. Maze complexity can be adjusted easily with changes to layout and the optional inclusion of various challenges. As the maze becomes more complex, the algorithm students create will become more sophisticated. You can tailor a maze to meet the desired learning objectives necessary for your student’s skill level. + +### Possible Maze Unit Learning Objectives + +**Branching, Iteration & Algorithm Design** + +To complete a maze, students will need to design an algorithm for their Rover. The algorithm will instruct the Rover how to handle path formations and maze challenges. Successful maze algorithms will require students to have a comprehensive understanding of branching and iteration. The more complex the maze, the more sophisticated the algorithm required to solve the maze will need to be. Maze algorithms will typically implement comprehensive branching logic using **IF / Else / Else If **blocks and **conditional operator (>, <, ==, !=)** blocks. Branching logic will often need to be repeated, this is done using a variety of **Loops**. + +**Understanding & Analysing Sensor Data** + +Depending on maze complexity, there are a range of sensors students can use to solve challenges and optimize their algorithm. Most common mazes will require students to utilize the Rovers **ultrasonic**,** IR** and **colour sensors**. The **IR and ultrasonic sensors** will be used to detect the walls of the maze. The **colour sensors** are used to detect changes to floor colour e.g. to detect when the rover finds the finish point or an obstacle. More complex solutions may also make use of the **gyroscope**. + +You can create criteria that tests student’s ability to understand how the sensors generate their data and then organize and analyse this data. An example of an auxiliary objective might be for students to correctly have their rover determine how many left and right turns it made while solving the maze based on **gyroscope **data. To complete this, student’s need to understand how the gyroscope collects its data, what type of data that is and how to translate that data into useful information. + +**Team Management & Planning** + +Mazes can be quite a complex task. It’s common for students to work in pairs or small groups to work on their algorithm collaboratively. An example of how groups completing coding challenges can be organized is to delegated a specific challenge in the maze to each student to program. Once each student has their individual piece, the team has to merge their individual parts together. This is often a slow way to approach programming for students however it forces students to practice explaining their thought process and code to their peers. Being able to successfully explain their code to others is indicative of quality communication skills. + +### Designing A Maze and Adjusting Maze Complexity + +Different maze configurations will offer different opportunities for students to engage digital technologies knowledge and understanding. The appropriate maze complexity is also necessary to allow students to demonstrate the necessary achievement standard for their year level band. Below are three examples of mazes with varying complexity. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1630985800450-2RZP0VL15LQJFKOX5IE1/beginner.png) + +**Beginner** + +This beginner maze has simple path formations. There are no dead ends or T intersections, only left and right turns. + +This maze can be solved with just the ultrasonic and IR distance sensors. A basic understanding of branching and iteration can be learnt from completing a maze like this. + +**Intermediate** + +This maze has more complex path formations with the inclusion of T intersections and dead ends. + +The green rectangle is a coloured floor to signify the finish zone. Students need to use the Rover's colour sensors to detect and stop the Rover when they reach the finish zone. + +This maze requires an understanding of colour sensor data and more complex branching logic to handle the additional path formation and colour challenge. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1630963070919-OSAHNTVQGWUBS0DXZV1M/intermediate.png) + +**Advanced** + +This maze has the same variety of path formations as the intermediate maze however there are more coloured floor challenges. + +The red coloured section indicates an impassable obstacles like a fire. Rover’s are not allowed to cross the red area. + +The blue zone acts as an additional maze objective. Rovers must enter the blue zone before they can stop and finish in the green zone. + +The addition of two new colour challenges will require more sophisticated branching logic relative to the intermediate maze. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1630986417032-FOHGK3PJ8OVWMND22OSP/hard.png) + +**Other Ways To Vary Maze Complexity ** + +You can increase complexity a variety of ways beyond what we’ve mentioned so far. Here’s a quick list of some other ways you can diversify maze exercises. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1630988590880-NYDI0O8R26MEIVWSMZN6/image+33.png) + +- Having students keep a small object/s (e.g. a rubber duck pilot) balanced on top of their Rover. This makes it it imperative to not drive up walls and lose the passenger/s. + +- Add more colour challenges e.g. go to all 3 colour zones before completing the maze. + +- Add a maze minotaur! This can be a different Rover you programmed to roam the maze which students have to avoid. + +- Get creative with your path formations, for example: + +Bridges and ramps which students can detect with their gyroscope and accelerometer, + +- Turns at various degrees, not just 90 degree angles, + +- Straight paths with changing width. + +- There and back! Students have to find the centre of the maze then return back through the maze to the entrance the same way they came in. + +- Expand your Rover’s with 3D printed attachments like scoops and task students to collect treasure in the maze with their scoop attachment. + +Not all of these extra challenges will make the maze vastly more complex. They can make things more interesting and fun though. The more interesting the maze, the more invested students may be in solving it. We encourage you to get creative with ways you can add challenge while making it fun. + +### Assessing Successful Maze Solutions + +The goal of running any digital technologies unit like maze solving is to allow students the opportunity to learn programmatic thinking and demonstrate understanding of these concepts through application. Criteria to assess students understanding of the concepts being taught doesn’t have to be pass or failed based on whether the students successfully solve the maze or not. Let’s look at different ways we can access students in complex challenges like maze solving. + +**Completing The Maze** + +The easiest way to test if students have created a satisfactory maze algorithm is to run it in the maze. Ideally, all students will be able to solve the maze. In some circumstances student’s may not finish the maze, we’ll get to ways to still assess their understanding in the next section. For students who complete the maze, there are still ways to distinguish higher quality algorithms that can be indicative of a more proficient understanding of digital technologies and robotics. + +Below is an example task description for an assessment sheet using the intermediate maze we outlined in the previous section. + +*Design and program an algorithm to navigate your Rover from the start point to the finish zone. The rover must start at the designed start point and find it’s way to the finish zone.* + +*Maze Objectives* + +- *The rover reaches the finish zone (5 marks)* + +- *The rover comes to a complete stops in the green finish zone (2 marks)* + +- *The rover finishes within 3 minutes (2 marks)* + +- *The rover doesn’t break any walls (1 mark)* + +**What is Hard Coding?** + +Completing the maze is a good indicator that the student/s have created a satisfactory algorithm however students may have created a solution that is hard coded. Describing a solution as “hard coded” indicates that it used a predetermined set of instructions that that will execute the same way no matter what. For a maze, a student may “hard code” a solution so the rover will always move and turn in the same pattern by just using movement blocks and using no branching or iteration. A hard coded solution will only ever work for one maze configuration. We want to avoid this as students haven’t demonstrated they understand programmatic thinking. Thankfully making sure student’s cannot hard code a solution is easy. Here are some example of ways to structure your maze assignment to prevent student’s from succeeding with hard coded solutions, + +- Require the students to complete multiple attempts of the same maze but change the Rover’s start point for each attempt. Students are not allowed to change their code between attempts. + +- Have two or more mazes set up that the students must complete. The students must run the exact same code for both mazes. + +- Look at their code and make sure they aren’t using just motor blocks and instead use branching and iteration. + +- Have students write their algorithm and practice on a different maze configuration than the final assessed maze. This won’t give them an opportunity to hard code a solution before attempting the assessible maze. + +**Should A Maze Have A Time Limit?** + +Having a time limit to maze attempts can be a positive and negative addition. A well tempered time limit (which will change depending on maze complexity) will encourage students to optimize their Rover’s algorithm which is good. If you set an unforgiving time limit an algorithm that might have eventually solved the maze may not finish it in time. Speed isn’t the only metric for algorithm quality. Solving a maze in a specific time might be a great additional challenge for more advanced students to strive for but we would not recommend it being a pass/fail criteria. + +**Supporting Documentation To Explaining The Algorithm** + +It’s often a good idea to give students a chance to demonstrate their understanding of the programmatic thinking required to create an algorithm outside of code. This will give students who may not have completed the maze or are still struggling to translate programmatic thinking to actual written code the chance to demonstrate a satisfactory achievement standard. A supporting document that is submitted with their maze attempt is one way to do this. The form of this document is up to you, what’s important is students explain the thinking behind their algorithm. + +Supporting documentation which walks through how an algorithm works and what data is used can be submitted before or after the maze code is actually written. If it is submitted before, students will have a chance to think through how their solution will work before jumping into code. + +Here is an example task description for a potential supporting document, + +*Provide a flowchart showing the steps your Rover follows when executing your maze solving algorithm. Your flowchart should show where you’ve used Branching and Iteration and where your algorithm uses sensor data. Explain what type of data the sensors use and how you have used that data in your algorithm. * + +*Objectives * + +- *Identify where you’ve used branching and explain why it you have used it (1 mark)* + +- *Identify where you’ve used iteration and explain why it you have used it (1 mark)* + +- *Identify what type of data you are gathering from the sensors and explain why your algorithm needs to collect this data (3 marks) * + +**Assessing The Code** + +The code produced by students is important to look at but it is also important to not judge a program just by it’s code quality. As with all programming assessment, it’s hard to judge the quality of an algorithm based entirely on how many lines of code there are. Two different programs may solve the maze with the same speed and efficiency but look completely different. It’s a good idea to check student code to make sure they are producing a genuine algorithm and not a hard coded solution but we wouldn’t recommend creating marking criteria based on the code written. Instead, provide marks based on if and how the algorithm completes the maze and on how students explain and understand the code as we’ve outlined in the previous sections. + +### Building Knowledge Needed For A Maze + +If students are not at the skill level yet to attempt the maze configuration you have planned it’s best to build their knowledge. If prematurely tasked to complete the maze they may get overwhelmed and have difficulty knowing where to start. Below we’ve outlined a general structure of how you can teach the skills required incrementally. Start at the step which feels most appropriate for how familiar your students are with coding in general and using the Micromelon Rover. + +How you organize the lessons leading up to your maze assessment will change depending on student skill level and the time available. These steps don’t have to be rigid lessons. You may be able to accomplish multiple steps inside a single lesson or delegate some activities for homework using the Micromelon Simulator. If you don’t know what the Micromelon Simulator is you can [read more about it here.](/resources/robot-simulator) + +**Step 1: Rover Movement** + +The primary challenge of the maze is to navigate the path formations. To deal with these path formations, students will need to be familiar with how to program the Rover’s motors to move and turn the Rover. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622684279112-XRY395UVS00KLZXFIGGS/drivingshapes.png) + +#### Activity: Driving Shapes + +[Read More](/resources/driving-shapes) + +**Activity** + +If your students have no knowledge of Micromelon Rover’s and how to program them, start with the activity **Driving Shapes**. This is a beginner activity which has students learn the basics of moving their Rover forwards and turning with the potential for some loop usage. + +More advanced way to control the motors will be necessary for completing the maze however this knowledge will be passively learnt when completing some of the other activities that we will cover when learning the about data and sensors. + +**Step 2: Introducing The Colour Sensor, Branching and Iteration** + +Once students have a basic understanding of programming the Rover you can move onto incorporating sensors into some simple algorithms using branching and iteration. This will give students a chance to start getting familiar with incorporating branching and iteration into a single algorithm and also learning how to program the colour sensor. If you are using a maze with no colour based challenges, feel free to this step. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625532898955-D48HV0MZZC8519BN7XZ7/red+reflect.png) + +#### Basics Of Colour Sensor + +[Read More](/resources/colour-sensor) + + **Understanding The Colour Sensor** + +This post will cover some of the science behind how the colour sensor works, the limitations of the sensor and how to code them. Having an understanding of the fundamentals of how colour sensing works will help students implement it in activities. + +If you’re limited on in class time, assign this post (and the other Basics Of posts) as homework reading before class. + +**Activity** + +The activities **Stop on Colour** and **Prison Escape** are great for learning how to implement sensor data into simple algorithms that use branching logic and iteration. Both of these activities require the using colour sensor. The complexity of algorithm necessary for completing these activities will not be as complicated as what is required for an efficient maze algorithm. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622684808134-8UKVMQM0O89O9XSKE04P/stoponcolour.png) + +#### Activity: Stop On Colour + +[Read More](/resources/stop-on-colour-change) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622691207784-0X6JV7RYRQXZAFRG712S/pisonescape.png) + +#### Activity: Prison Escape + +[Read More](/resources/prison-escape) + +**Step 3: Learning The IR Sensor Ultrasonic Sensor & More Complex Algorithms** + +The primary challenge of any maze is navigating the path formations. To move the rover through the maze efficiently we need to monitor where the walls are in relation to our rover. The front ultrasonic sensor and two side IR sensors are all distance sensors that we can use to detect how far away walls are. Having a thorough understanding of how these sensors work is imperative to a successful maze solution. + +**Understanding the Ultrasonic & IR Sensor** + +Knowing the science behind how the ultrasonic & IR sensors work provides students with a knowledge base that allows them to understand the limitations of the sensors and how to use them appropriately. We’ve written a post about each of these sensors that students can read to get familiar with the sensors. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624234434184-QRO7PVDGHKDS2LFKIFU2/ir+diagram+animation.gif) + +#### Basics Of The IR Sensors + +[Read More](/resources/ir-sensor) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623915734752-YSUBGA76JUDTBIFYUGB3/ultrasonic+animation.gif) + +Basics Of The Ultrasonic Sensor + +[Read More](/resources/ultrasonic-sensor) + +**Activities** + +Puppy Bot and Lane Guidance activities both require distance sensing to complete successfully. Puppy Bot will make use of the Ultrasonic primarily and Lane Guidance will make use of the IR sensors. In their most basic form solutions for these activities will require students to understand how to use sensor data in conditional operators. They will also allow students to continue practicing how to use the IF / ELSE / ELSE IF blocks to create branching logic and Loops to repeat sections of code. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622690387509-PIOQ27MB1CAZPHTMJNKM/puppybot.png) + +#### Activity: Puppy Bot + +[Read More](/resources/puppy-bot) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622692023465-YLLPXLCQJOSY6SV0W8YS/laneguidance.png) + +#### Activity: Lane Guidance + +[Read More](/resources/lane-guidance) + +**Step 4: Practicing In A Maze** + +Once students are familiar with how to use all of the sensors required and are familiar with branching and iteration it’s a good time to start getting into a maze. This doesn’t have to be the final maze they are attempting but it may be an alternative version of the intended maze configuration or a less complex practice maze. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623713907748-YNJX1RWJ6HQG5JTS3OZO/maze.gif) + +Micromelon Robot Simulator + +**Making Maze Practice Easy** + +If you’re looking for an easy way to give students an opportunity to practice in a maze without having to go through the hassle of setting up a maze in class, you can always use the Micromelon Robot Simulator. The Simulator provides you with a virtual environment you can create a endless number of maze configurations students can practice in. Students can access the simulator from home so they can practice homework. + +If you want to read more about how to get started with the Simulator [read this blog post](/resources/robot-simulator) + +### Wrapping Up + +In this post we’ve covered what maze challenges are, what they teach, how to assess them and how to prepare our students for them. Hopefully from here you can incorporate a maze challenge into your digital technologies classroom. + +If you’ve got any questions about running mazes challenges or about Micromelon Robotics please feel free to [reach out the Micromelon team](https://micromelon.com/contact.html?blog-maze-challenges). + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464675848-K9YEOYK65IWRFRX4QJ1R/blog+header+image+.png) + + ](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Robot Simulator](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +How to get started with the Micromelon Robot Simulator. + + [Read More →](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1626837419969-WBB4D85KQIXSOP750N5M/resized+banner+%281%29.png) + + ](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Micromelon Rover](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +Crash course on basic rover function, how and what to program and starter activities to attempt. + + [Read More →](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622691207784-0X6JV7RYRQXZAFRG712S/pisonescape.png) + + ](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + + [Activity: Prison Escape](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + +Learn branching and iteration using the colour sensors and motors. + + [Read More →](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) diff --git a/content/resources/creating-a-sumo-unit.mdx b/content/resources/creating-a-sumo-unit.mdx new file mode 100644 index 0000000..f459d60 --- /dev/null +++ b/content/resources/creating-a-sumo-unit.mdx @@ -0,0 +1,488 @@ +--- +title: "Creating A Sumo Unit For Your Digital Technologies Class" +date: "2021-10-11" +categories: ["All"] +tags: [] +excerpt: "How to run a sumo unit in your digital technologies classroom." +featuredImage: "/images/resources/creating-a-sumo-unit.png" +--- + +Sumo is a great cumulative activity to run for digital technologies classes. Sumo algorithms incorporate branching, iteration and requires students to understand data types from different sensors. This blog post will cover: + +- The digital technology learning objectives in sumo units, + +- Setting up for sumo battles, + +- Assessing successful sumo solutions, + +- Building knowledge needed for sumo. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/b7e49463-9dea-410f-848f-00844c6dbb86/sumo.png) + +### **What Skill Level Is Sumo Appropriate For?** + +Sumo is a great challenge for students of any skill levels. For a student, the difficulty of a sumo challenge is set by the opponent they have to defeat and since students normally battle each other, they generally end up as fairly matched opponents. However, as the teacher you can still determine how difficult the opponent rover will be meaning sumo can be a challenge for any skill level and can be continuously challenging for students. You can even seed different algorithms to students to attempt to battle as their skills progress. + +### Learning Objectives in Sumo Units + +**Branching, Iteration & Algorithm Design** + +To compete in the sumo ring, students will need to design and program a sumo algorithm that utilises branching and iteration. Sumo algorithms will typically use: + +- Branching logic using **IF / Else / Else If **and **conditional operators (>, `<, ==, !=)**. The more complex the student's algorithm, the more sophisticated the branching logic will need to be as more conditions are introduced. + +- Iterating their logic using a variety of **Loops**. + +**Understanding & Analysing Sensor Data** + +Using sensors effectively is the key to a successful sumo robot. Students will need to intimately understand how to gather and use information and data from the environment in their programs/algorithms. Possible sensor usage in sumo algorithms can include: + +- The **colour sensor**, which is the most utilized sensor. The colour sensor is used to detect the edges of the sumo arena and keep the rover from leaving. + +- The **Infrared (IR) distance & ultrasonic distance sensor** is used to locate opponents for offensive moves, like charging or pushing. + +- More sophisticated algorithms may use the **gyroscope & accelerometer. **An example is using the accelerometer to detect if the rover is being tipped over by the opponent to deploy defensive measures. + +**The Design Process & 3D Modelling ** + +Sumo units can even be expanded with 3D printed attachments for the rover e.g. battering rams or shovels attached to the front of the rover. Including a 3D printing component to your sumo unit allows you the opportunity to cover Design and Technology curriculum requirements. For example, students can explore 3D printing technology, its sustainability and other pros and cons relative to other manufacturing methods. After they have a satisfactory understanding of 3D printing, they can dive into an iterative design process to create a sumo attachment. This can include: + +- Ideation, design thinking and planning sketches on paper, + +- Critiquing other design and understanding constructive criticism, + +- Creating their 3D model in 3D modelling software like TinkerCAD or even Blender for older students. + +- 3D print the design and attach it to a rover ready for sumo. + +- Testing different materials for 3D Printing, like ABS or PLA. + +**Team Management & Planning** + +Sumo works well as an individual and team-based challenge. Having students work in pairs or teams allows more opportunities for creative collaboration over the design of their algorithm. As with other digital technologies challenges, you can organise your teams such that each student handles a specific component of the desired algorithm or robot and then have students cooperatively merge their work into the one algorithm. This is often a slow way to approach programming for students however it forces students to practice explaining their thought process and code to their peers. Being able to successfully explain their code to others is indicative of quality communication skills and general understanding. + +### Setting Up For Sumo Battles + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1634002540241-83WP13QWW068U6Z0SEJL/basic+sumo+ring.png) + +To the right is an example diagram of a simple sumo setup. The grey circle is the sumo ring and the border for the sumo area. Inside the arena there are normally two rovers battling. The two rovers are in their default starting position, with backs facing the middle of the ring. + +Below we will outline the complete rule set used for this setup as well as general notes around setting up and organizing your sumo ring. + +**Arena Shape** + +There is no limitation to the shape that you can use for your ring. We always use a circular sumo arena when running sumo units as this matches real sumo arenas. Other shaped arenas, e.g. square or octagon will work just as well as a circular arena. + +**Arena Size** + +For a circular arena with 2 rovers battling we recommend a diameter of 50cm-60cm (or about 5 rover lengths). Ideally you’re arena is big enough that the rover’s have room to move around in without constantly hitting each other but also not so big that they end up too far separated and cannot find each other. The more rover’s you intend the include in the battles, the larger the arena will need to be. + +**Starting Positions** + +We recommend starting rovers back-to-back or side facing. Starting rover’s face to face will often lead to head on collisions immediately that won’t be very interesting and don’t always allow students to get creative with their algorithms. + +**Line Colour ** + +The colour sensor will be the primary tool students can use to detect the sumo arena walls. Having the wall colour contrast the floor clearly will make it easier for the rover colour sensors to detect the wall. For example, white arena with a black line, or vice versa. This allows students to use the brightness of the line rather than actual colour making the process much simpler. For a challenge make a red or orange ring and let students explore out what works for them. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1634013117869-0CNHYG8MXV43NMMRH4P0/real+sumo+ring.png) + +Octagon shaped sumo arena made with masking tape on the floor making for a very cheap setup. + +**Other Notes On Setting Up Sumo** + +- Avoid using an sumo arena that has walls or including physical obstacles inside the arena. The ultrasonic and IR distance sensors aren’t able to determine if they are detecting an opponent rover or a wall or other obstruction. + +- Leave some space around the sumo arena. This will prevent rovers detecting objects outside of the ring like students sitting down or chairs and driving outside arena mistakenly. + +**Sumo Rules** + +We recommend that you establish your sumo rules before students start designing their algorithms as the rules will change how students create their algorithms. Here is our general ruleset for sumo and the same ruleset we use in the example sumo diagram depicted above. Feel free to copy or iterate on these rules to use it in your unit: + + [ + DOWNLOAD RULES - PDF + ](/s/Sumo-Ruleset.pdf) + + [ + DOWNLOAD RULES - DOCX + ](/s/Sumo-Ruleset.docx) + +**Sumo Battle Setup** + +All rovers start inside the arena with backs facing the centre of the ring. + +All competitors must start their code at the same time on the referee’s call. + +**Sumo Battle Rules** + +- Nobody is allowed to interfere with the rovers besides the referee. + +- The battle is over once all but one rover is defeated. The final rover in the ring is declared the winner. + +- The referee can call a stalemate if rovers are in an unwinnable situation for 10 seconds. The referee can either restart the match or declare a draw. + +- A rover is defeated when one of the following conditions are met: + +It has been **knocked out** + +- It has been **incapacitated**. + +- It is **disqualified** by the referee + +The referee will remove rovers from the battle once they have been defeated. + +**What is a Knockout ** + +When the majority of the rover’s is outside the arena. The referee decides when a knock has happened. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1634014963219-KQV16PS5ZU6JXMBPVS5A/knocked+out+diagram.png) + +**What is Incapacitation** + +A rover is considered incapacitated if: + +- The rover is unable to move on it’s own, e.g. tracks fallen off or obstruction from attachment + +- The rover’s program has stopped running. + +**What is Disqualification** + +The referee can disqualify a rover if the rover’s code does not move. The rover must attempt to battle while in the match. + +**Organising Who Battles Who** + +When you are planning your sumo unit you will have to decide how you will organise who is battling against who. Let’s go over some pros and cons of ways you can organize sumo battles. + +**Free For All or Team Battles** + +We recommend sticking with Free For All battles where all rovers battle on their own. Team battles are possible but they can be frustrating if rovers on the same team start knocking each other out. This isn’t as fun for students just starting out in their programming or sumo journey but can act as an added challenge once students have started doing well in battles. + +**How Many Rovers In The Ring** + +There’s no limit to the number of rovers you can have in the ring for a battle. It’s good to start with 1v1 as a starting point for students to start developing their algorithms. Expanding to >`2 rovers at once in the ring can be good fun once all students have finished their algorithms. We recommend you don’t associate these larger battles with any assessment item as they’re wildly chaotic and not a good way to gauge the quality of a sumo algorithm. + +**Student vs Student or Student vs Teacher** + +Students will want to battle each others rovers. There’s nothing wrong with this and it will likely be the most common type of practice. However, it is also a good idea to have a pre-programmed sumo algorithm ready before students begin developing their algorithms. While students are developing their algorithms they can spar with your prepared rover AI. This is a great way for students to iterate on their algorithms. + +The Micromelon Robot Simulator provides a few different levels of AI Sumo Algorithms that students can battle against before they even get into real sumo battles. This can be a great starting point for your sumo units and is also an excellent tool to practice these concepts outside of class time or when other classes or students are using the arena and robots. + +We like to make our prepared AI very difficult and so they act as a “final boss” for students to strive to defeat. We’ll get more into how you can make use of Artificial Intelligence (AI) rovers in creating a standardized and fair assessment for your sumo unit in the assessment section below. + +### Expanding Sumo With 3D Printed Attachments + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622686877131-P5FU2IDAB8U05PX8M98Z/sumo.png) + +Including 3D printed attachments in your sumo unit is a great way to give students more creative freedoms when designing their sumo algorithm. It can also offer opportunities to integrate an iterative design process and learn more about 3D printing as a manufacturing process into digital technologies classes. This can also provide an excellent introduction to manufacturing and industrial design concepts used in senior subjects. + +### Assessing Successful Sumo Solutions + +The goal of running any digital technologies unit is to allow students the opportunity to demonstrate understanding of digital technologies learning objectives through application. Criteria to assess students' understanding of the concepts being taught doesn’t have to be pass or fail based on whether the students wins a sumo match or not. Let’s talk a bit about what makes a good sumo solution and then look at different ways we can create assessment items to measure students capabilities. + +**What Is A Good Sumo Solution?** + +In general terms there are two ways to categorize sumo algorithms: complexity and efficiency. + +**Complexity** + +A sumo algorithm will become more complex as more conditions (most commonly introduced from utilising more sensor data) are programmed into the algorithm. For example, an algorithm that utilises the rover’s accelerometer, Infrared (IR) distance, ultrasonic distance and colour sensors will inherently be more complex than an algorithm that uses just the colour sensor. The more complex algorithm will require a wider and more thorough understanding of more sensors. Understanding how sensors work and how to write a complex algorithm is only one part of a good sumo solution. + +**Efficiency** + +Sumo algorithms also need to be efficient at correctly positioning and pushing opponent rovers out of the ring. Creating an efficient algorithm requires an understanding of material robotics concepts. For example, understanding how to account for acceleration and momentum of rover movement or understanding how friction will grip an opponent rover to the sumo floor and ways of destabilizing it. Understanding these concepts are even more relevant if you are using 3D printed attachments which create more variables to consider. + +**Complexity vs Efficiency ** + +In general, the more complex the sumo algorithm is, the more efficient it will be. However, this isn’t always true. Complex algorithms utilising many sensors may still move poorly in the ring and be easily defeated by a less complex algorithm. The difference between sumo and other digital technologies activities is that more advanced students are able to produce a less complex algorithm that is still very efficient. We don’t want to punish them for having a simple algorithm that is highly efficient. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1634075741292-DYBWI0TWFD8NCF2S4RAV/big+attachment.gif) + +To the right you can see an example of a less complex but still efficient sumo rover from a workshop we ran at a school in Brisbane. The winning rover just moves forward slowly with the bigger attachment. This is definitely not a complex algorithm but regardless the student has demonstrated an understanding of how to counter the opponent rover and has created an efficient sumo rover. + +**Balancing Complexity and Efficiency With Learning Objectives In Mind** + +The purpose of the sumo unit is to give students an opportunity to demonstrate a satisfactory understanding of the learning material. If students are creating simple but efficient algorithms, they may not be giving themselves the chance to demonstrate their understanding of the algorithmic design and interpolation of data expected for their grade bracket. In this case it’s important that you create expectations for how complex of an algorithm you want students to produce. If your students should be comfortable creating an algorithm that utilises multiple sensors, then we recommend you enforce this with algorithm rules written into the assessment. We’ve included an example of this in our example assessment in the next section where we specify a minimum number of rover sensors students are expected to include in their algorithm. + +**Defeating AI Opponents** + +The simplest way to gauge the quality of a sumo robot is to see it battle another robot in the arena. We do not recommend you make student vs student sumo battles a criterion of your assessment. This doesn’t promote a healthy classroom environment if students are competing for grades. We still encourage you to have students compete against each other but in a less competitive manner. Student vs student battles can be incentivised with other prizes like chocolates or stationary to practise or showcase capabilities without having actual sumo battles. + +For battles that are associated with marks, having students compete against Artificial Intelligence (AI) or pre programmed opponents is much more fair. Every student gets to face the same opponent and has the same chance at getting a good grade. You can also incorporate multiple opponents of varying difficulty to help differentiate algorithm quality. + +Below is an example task description for an assessment sheet using 3 different AI opponents from the Sumo activity in the Micromelon Robot Simulator. We’ve specified that to earn the marks associated for beating the AI opponent you must win a best of 3 series against that opponent. This prevents unexpected upsets when mistakes happen e.g. student’s unintentionally incapacitate or disqualify their own rover. You can see how partial marks can be allocated here if students aren’t able to defeat an opponent consistently. For example, if a student can beat “El Capitan” only once, you can allocate 1 mark or 1.5 marks. + +*Your objective for this assessment is to design, program and reflect on an algorithm that will run on a Micromelon Rover to compete in the Sumo Arena. Your sumo algorithm must make use of at least 3 of the rover sensors: * + +- *Ultrasonic Sensor* + +- *IR Distance Sensors* + +- *Colour Sensors* + +- *Accelerometer* + +- *Gyroscope* + +*Once you have finalized your sumo algorithm , you may battle the three AI opponents. You cannot change your algorithm between battles. The opponents and marks for defeating the opponent in a best of 3 series are:* + +- *Defeat the “EZ-PZ” AI 2 times out of 3 attempts (4 marks)* + +- *Defeat the “Artemis” AI 2 times out of 3 attempts (3 marks)* + +- *Defeat the “El Capitan” AI 2 times out of 3 attempts (3 marks)* + +**Supporting Documentation** + +It can be a good idea to give students a chance to demonstrate their understanding of the programmatic thinking required to create an algorithm outside of code. This will give students who may not have beaten their sumo opponents or are still struggling to translate programmatic thinking to actual written code the chance to demonstrate a satisfactory achievement level. A supporting document that is submitted with their sumo algorithm is one way to do this. The form of this document is up to you, what’s important is students explain the thinking behind their algorithm. + +Supporting documentation which walks through how an algorithm works and what data is used can be submitted before or after the sumo code is actually written. If it is submitted before, students will have a chance to think through how their solution will work before jumping into code. + +Here is an example task description for a potential supporting document, + +*The algorithm design flowchart will explain how you intend to program your sumo algorithm. It will be completed before you begin programming. The flowchart should outline the steps your Rover follows when executing your algorithm. Your flowchart should show where you’ve used:* + +- *Branching ( IF/ELSE statements ) (3 marks)* + +- *Iteration ( Loops ) (3 marks)* + +- *Data from sensors, including what type of data the sensors generate. (4 marks)* + +**Assessing The Code Itself ** + +It’s necessary to look at the code produced by students but also important not to judge a program just by it’s code quality. As with all programming assessments, it’s hard to judge the quality of an algorithm based entirely on how many lines of code or how clean the code looks. Two different programs may run with the same speed and efficiency, but the code may be completely different. It’s a good idea to check students' code to make sure they are producing a genuine algorithm and not a hard coded solution, but we wouldn’t recommend creating marking criteria solely based on how the code is written. Instead, provide marks based on if and how the algorithm competes in the sumo arena and on how students explain and understand the code as we’ve outlined in the previous sections. + +**Example Assignment Sheet** + +Below is an example assignment sheet you can use your classroom. You can use this template as a starting point for designing your assessment. The ruleset we have outlined above is also included. + + [ + DOWNLOAD ASSIGNMENT SHEET - DOCx + ](/s/Sumo-Assignment-Sheet-Rules.docx) + + [ + DOWNLOAD ASSIGNMENT SHEET - PDF + ](/s/Sumo-Assignment-Sheet-Rules.pdf) + +### Building Knowledge Needed For Sumo + +If students are not at the skill level yet to write a Sumo algorithm, we’ve outlined a general structure of how you can teach the skills required incrementally. Start at the step which feels most appropriate for how familiar your students are with coding in general and using the Micromelon Rover. These steps don’t have to be rigid lessons, you may cover multiple steps in a single lesson or delegate some tasks to homework. In the outline we will mention some potential activities you can run with your class, all of these activities can be run in the Micromelon Robot Simulator. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/28e7883e-553f-464b-acc1-cc95e1ed1990/sumo-small.gif) + +Micromelon Robot Simulator + +**The Robot Simulator** + +The simulator is a virtual world we use to simulate a real Micromelon rover and many fun coding challenges. We will choose to use the Simulator because it has already built in activities that work perfectly for learning sumo as well as a sumo arena that has AI opponents and rover attachments. + +If you’re looking for information on how to get started with the Robot Simulator, check out our [Getting Started With The Simulator](/resources/robot-simulator) post + +**Step 1: Rover Movement** + +The primary challenge of the maze is to navigate the path formations. To deal with these path formations, students will need to be familiar with how to program the Rover’s motors to move and turn the Rover. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622684279112-XRY395UVS00KLZXFIGGS/drivingshapes.png) + +#### Activity: Driving Shapes + +[Read More](/resources/driving-shapes) + +**Activity** + +If your students have no knowledge of Micromelon Rover’s and how to program them, start with the activity **Driving Shapes**. This is a beginner activity which has students learn the basics of moving their Rover forwards and turning with the potential for some loop usage. You can run this activity from the **Free Roam** exercise in the robot simulator. + +**Step 2: Introducing The Colour Sensor, Branching and Iteration** + +Once students have a basic understanding of programming the Rover you can move onto incorporating sensors into some simple algorithms using branching and iteration. This will give students a chance to start getting familiar with incorporating branching and iteration into a single algorithm and also learning how to program the colour sensor. Because the edge of the sumo arena will be detectable with the colour sensor this will be a very important step to cover as it will help students keep their rovers inside the arena. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625532898955-D48HV0MZZC8519BN7XZ7/red+reflect.png) + +#### Basics Of Colour Sensor + +[Read More](/resources/colour-sensor) + + **Understanding The Colour Sensor** + +This post will cover some of the science behind how the colour sensor works, the limitations of the sensor and how to code them. Having an understanding of the fundamentals of how colour sensing works will help students implement it in activities. + +If you’re limited on in class time, assign this post (and the other Basics of posts) as homework reading before class. You can even ask questions at the start of the next lesson or get some students to present their findings. + +**Activity** + +The activities **Stop on Colour** and **Prison Escape** are great for learning how to implement sensor data into simple algorithms that use branching logic and iteration. Both of these activities are built into the Robot Simulator. + +The complexity of program necessary for completing these activities will be similar to the programming of a very basic sumo robot. + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622684808134-8UKVMQM0O89O9XSKE04P/stoponcolour.png) + + ](/resources/stop-on-colour-change) + +#### Activity: Stop On Colour + +[Read More](/resources/stop-on-colour-change) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622691207784-0X6JV7RYRQXZAFRG712S/pisonescape.png) + +#### Activity: Prison Escape + +[Read More](/resources/prison-escape) + +**Step 3: Learning about Distance Sensors & More Complex Algorithms** + +A key part of any sumo algorithm is being able to locate the opponent in the ring so you can’t attack them. The front ultrasonic sensor and two side IR sensors are all distance sensors that we can use to detect the proximity of objects, including the opponent rover. Having a thorough understanding of how these sensors work is important to a successful sumo algorithm. + +**Understanding the Ultrasonic & IR Sensor** + +Knowing the science behind how the ultrasonic & IR sensors work provides students with a knowledge base that allows them to understand the limitations of the sensors and how to use them appropriately. We’ve written a post about each of these sensors that students can read to get familiar with the sensors. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624234434184-QRO7PVDGHKDS2LFKIFU2/ir+diagram+animation.gif) + +#### Basics Of The IR Sensors + +[Read More](/resources/ir-sensor) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623915734752-YSUBGA76JUDTBIFYUGB3/ultrasonic+animation.gif) + +Basics Of The Ultrasonic Sensor + +[Read More](/resources/ultrasonic-sensor) + +**Activities** + +Maze challenges require distance sensing to complete successfully. In their most basic form solutions for maze solving will require students to understand how to use sensor data in conditional operators. They will also allow students to continue practicing how to use the **IF / ELSE / ELSE IF blocks** to create branching logic and **Loops** to repeat sections of code. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/531a3d67-a093-4d40-bdaf-ba09e4bb3ee5/maze.gif) + +**Activity: Maze Solving** + +[Read More](/resources/maze) + +**Step 4: Practicing In the Sumo Arena** + +Once students are familiar with how to use all the sensors required and are familiar with branching and iteration it’s a good time to jump into sumo battles. Treat this as a time for students to start sparing and iterating on their sumo algorithms. No perfect algorithm was ever created in the first try. The more time students have to battle the more effective their sumo algorithms will become. If you’re using the robot simulator the students can practice their algorithms against the built in AI rovers. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/28e7883e-553f-464b-acc1-cc95e1ed1990/sumo-small.gif) + +Activity: Sumo + +[**READ MORE**](/resources/sumo) + +### Wrapping Up + +In this post we’ve covered what Sumo challenges are, what they teach, how to assess them and how to prepare our students for them. Hopefully from here you can incorporate Sumo into your digital technologies classroom. + +If you’ve got any questions about running Sumo challenges or about Micromelon Robotics please feel free to [reach out the Micromelon team](https://micromelon.com/contact.html?blog-maze-challenges). + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464675848-K9YEOYK65IWRFRX4QJ1R/blog+header+image+.png) + + ](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Robot Simulator](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +How to get started with the Micromelon Robot Simulator. + + [Read More →](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1626837419969-WBB4D85KQIXSOP750N5M/resized+banner+%281%29.png) + + ](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Micromelon Rover](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +Crash course on basic rover function, how and what to program and starter activities to attempt. + + [Read More →](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622691207784-0X6JV7RYRQXZAFRG712S/pisonescape.png) + + ](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + + [Activity: Prison Escape](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + +Learn branching and iteration using the colour sensors and motors. + + [Read More →](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) diff --git a/content/resources/dance-dance-rover-lution.mdx b/content/resources/dance-dance-rover-lution.mdx new file mode 100644 index 0000000..0e77598 --- /dev/null +++ b/content/resources/dance-dance-rover-lution.mdx @@ -0,0 +1,94 @@ +--- +title: "Dance Dance Rover-lution" +date: "2022-03-13" +categories: ["Activities", "All"] +tags: ["Iteration", "Functions", "Buzzer", "Motors", "LEDs"] +excerpt: "Time to boogie down with some programming." +featuredImage: "/images/resources/dance-dance-rover-lution.png" +--- + +** ** + +Let’s hold a dance contest in the classroom for rovers to compete in! Students can program the motors to perform dance moves, use LEDs and add sounds to add flair to their dance. Students are encouraged to use loops and functions to simplify their code. Points will be awarded to students who make good use of the rover’s tools and well written code. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/dbf1e086-ff85-4d03-b0f6-52aab4a609d0/dance+dance+roverlution.png) + +### Setup + +When running this exercise we like to group students to create collaborative dance routines involving multiple rovers. You can pick group sizes that work for your classroom. We find 4-5 students working together to create a dance routine involving 3 rovers is a good sizing. The rest of the setup depends on what you have available in the classroom. You could add obstacles or props to make the performance more interesting. + +### Here’s Our Approach + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a36f3032-a409-4d77-ad2a-879b9b900dd1/dance+dance+roverlution+answer.png) + +Example code + +#### Stage 1 + +There isn't a single correct solution for this challenge as each student will program their robots differently. Regardless of solution, we encourage students to use functions to organise their code. The example here shows how you can use a function to create a dance move and keep code organised. + +#### **Stage 2** + +Function blocks work in pairs. There is a block that holds all the instructions, and a small single block that calls upon those instructions. For this example, from the functions category we drag in a function block and name it FancySpin. Inside our function block we place our dance moves. These blocks inside the function is what will run when we call the function. With this example we will set some LEDs, play some sounds and make the rover spin around. + +#### **Stage 3** + +From our start block we are going to add a loop block that runs twice. Inside the loop we will call the FancySpin function to run by adding the FancySpin block. This means all of the blocks inside of our FancySpin function will be played twice. + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/design-blog-domino-layer.mdx b/content/resources/design-blog-domino-layer.mdx new file mode 100644 index 0000000..b9d2764 --- /dev/null +++ b/content/resources/design-blog-domino-layer.mdx @@ -0,0 +1,122 @@ +--- +title: "Design Blog: Domino Layer" +date: "2024-12-31" +categories: ["Design Blog"] +tags: ["Design Blog", "3D Printing"] +excerpt: "My name is Binara, and I will be taking you through the entire design process of how I created the domino layer attachment. The original task was to develop an attachment for the rover to store and lay dominos in patterns coded by the user. Step 1: R" +featuredImage: "/images/resources/design-blog-domino-layer.jpg" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/7f044969-2851-43b8-b0c6-49e1f5f2d703/IMG_0822.jpg) + +My name is Binara, and I will be taking you through the entire design process of how I created the domino layer attachment. The original task was to develop an attachment for the rover to store and lay dominos in patterns coded by the user. + +--- + +## Step 1: Research + +Every idea has to start somewhere, so the best way to get inspiration is to see what others have done. If your idea doesn’t exist, it can be helpful to break it up into smaller, existing ideas. + +Here are some of the ideas I found out there for domino layers: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/45231eb2-432b-4049-8977-8d3397920658/SDOM_Domino_Machine_4538_R_PDP.jpg) + +Most of these designs have the same core concept. They store the dominoes in a stack and shift them to the ground one by one. While they are not identical, all the designs are similar. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/fa6a1edc-7bbb-47a3-928a-0d3ad797dba8/p8zlu_512.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/252229ad-93e3-4336-8828-8fbb8e4f9031/maxresdefault.jpg) + +--- + +## Step 2: Ideation + +Now that we have a couple ideas, it’s time to plan out how you will tackle the problem. Sometimes sketches are a great way to get ideas down on paper, which helps to get an idea of the whole picture. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/836a6c96-5187-4281-9336-22fb2b8cbf7f/IMG_0826.jpg) + +--- + +## Step 3: Prototype + +Pick a design and get started on it! Depending on how you make your creations, this part will differ for many. I planned on using 3D printing to prototype my domino layer. To design the parts, I used Autodesk Inventor to visualise and slowly build a printable model. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/6bb729ae-5257-4eac-b36c-0713f4a6d901/cad+1.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/6a216cd9-317b-469f-a822-df1b4cab629f/cad+9.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/983d6924-0f52-4dc8-b063-49faab5105e5/cad+2.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/30bc5825-4fb5-422c-8fe3-0d3f86983d0e/IMG_0815.jpg) + +--- + +## Step 4: Iterate and Evaluate (Back to the drawing board) + +Unfortunately, it’s very unlikely that idea number 1 will go exactly as you want, and I was no exception. The important thing is to sit down, grab a pen, and write down what was good and bad about your design. Think about what you would change if you could build it again. + +After that, go back to step 3 and give it another shot! + +While thousands of tiny changes may be made along the way, a new version isn’t made until there is a significant change in how the design works. + +**Version 1:** + +Here we’ve got the dominoes coming in from the top. The paddle spins around and knocks a domino down into a slide. The domino then slides down to a door on a servo. The door is needed to prevent the dominoes from falling over from the impact of hitting the ground. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/7f0c08a8-fda5-490f-a15a-6c2be52ad009/cad+4.jpg) + +Notes to fix for the following design: + +- The door wasn’t working perfectly as some dominos fell over after being placed. + +- The domino ejecting servo sometimes got stuck on dominoes due to the angle from which it transfers force. + +- Dominoes were known to jam on the door on their way out and get stuck. + +- The screen is not visible with the attachment on. + +**Version 2:** + +We’ve added a cut-out in the body to read the screen. Also, the door was changed entirely. It was noticed in the last design that dominoes may still fall over despite the door being closed. This new door can now squeeze a domino against itself to ensure it’s standing upright. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/8c235082-a6a4-43f6-8ad6-5de87bffdc18/cad+6.jpg) + +Notes to fix for the following design: + +- The door wasn’t working perfectly as some dominos fell over after being placed. + +- The domino ejecting servo sometimes got stuck on dominoes due to the angle from which it transfers force. + +- Dominoes were known to jam on the door on their way out and get stuck. + +- The screen is not visible with the attachment on. + +**Version 3:** + +This significant change removed the paddle and replaced it with a sliding mechanism that moved back and forth. When it comes forward, it pushes a domino into the slide. And when it pulls back, the next domino will fall into position. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/ccee56cc-f3ba-437d-a6dd-e12fd31d83c5/cad+7.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/eb1f3536-a9e7-40a7-86aa-7a6f8bffe832/cad+8.jpg) + +Notes to fix for the following design: + +- The door wasn’t working perfectly as some dominos fell over after being placed. + +- The domino ejecting servo sometimes got stuck on dominoes due to the angle from which it transfers force. + +- Dominoes were known to jam on the door on their way out and get stuck. + +- The screen is not visible with the attachment on. + +--- + +## Step 5: Finalise + +And finally, after many, many iterations, the design works. Now all that’s left is to consider a couple options to make your design perfect in the future. Some considerations could be: + +- **Ease of Assembly: **How easy is it to put the design together? Maybe screws could hold a part better than glue, or you could add a space near a bolt to easily get a tool into it. + +- **Cost: **How much material does it use? There may be a way to use less plastic or cardboard. Is there another way to orient the model to make the prints faster? + +- **Aesthetic: **How does it look? Yes, we also enjoy looking at the finished product and thinking, ‘Wow, that looks awesome’. You could change the shape of the design to look more professional. Add a logo? Maybe coordinate the colour of your prints to make the appearance really pop. diff --git a/content/resources/design-blog-fan-gecko.mdx b/content/resources/design-blog-fan-gecko.mdx new file mode 100644 index 0000000..eeacdbf --- /dev/null +++ b/content/resources/design-blog-fan-gecko.mdx @@ -0,0 +1,122 @@ +--- +title: "Design Blog: Fan Gecko" +date: "2024-01-02" +categories: ["Design Blog"] +tags: [] +excerpt: "My name is Binara, and I will be taking you through the entire design process of how I created the fan gecko attachment. The original task was to create a robot that can complete the Alpine robot challenge at RoboRAVE Australia. The challenge require" +featuredImage: "/images/resources/design-blog-fan-gecko.jpg" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1714ceee-0ce5-4552-9a1e-178093746110/IMG_2680.jpg) + +My name is Binara, and I will be taking you through the entire design process of how I created the fan gecko attachment. The original task was to create a robot that can complete the Alpine robot challenge at RoboRAVE Australia. The challenge requires a robot to climb an 80° incline and deliver a flag to the summit. Further details about the challenge itself can be found on the RoboRAVE website: + + [ + RoboRAVE Australia Challenges + ](https://roboraveaustralia.com/challenges/) + +--- + +## Step 1: Research + +Every idea has to start somewhere, so the best way to get inspiration is to see what others have done. If your idea doesn’t exist, it can be helpful to break it up into smaller, existing ideas. + +As with the other design blogs, we will look into some existing designs. As there are not many existing alpine robots, research was put into wall climbing robots instead: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/5972fed4-74da-46ee-80f9-bdf4843057aa/research+1.jpg) + +Many of the existing designs rely on suction properties to stick to the walls, either using fans or suction cups. As the most common design for wall climbing seems to be fans, this is the technique that will be explored for the rover attachment. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a9d606bf-40ee-46da-94ad-c411c6d48b61/Screenshot+2023-11-07+115509.png) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/7c20a286-abb8-4168-9b7e-8e3ed974f7ba/research+2.jpg) + +--- + +## Step 2: Prototype + +As with most of my designs, the prototype phase consists of generating a 3D design on Autodesk Inventor or Fusion 360 and then 3D printing it. This project also deals with high-current applications so vigorous testing was done on all of the components before they were plugged in. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a40aca02-2f3e-41a0-8465-9b2f5ae9312c/prototype+2.png) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/12a185a5-42a1-4442-8fbb-02b18b1db1c2/prototype+1.png) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/868d1780-e5a4-4f9f-a569-6c786cd7b872/IMG_1655.jpg) + +--- + +## Step 3: Iterate and Evaluate (Back to the drawing board) + +#### Design 1: + +Prototype 1 has been labelled the ‘Spicy Sombrero’. The basic idea for this one is to use drone motors and propellors to create a thrust to push the robot down. Theoretically, when the robot starts climbing the wall, it will not fall backwards as the fan will push it into the wall. By increasing the normal force acting on the rover from the ramp, we hope to increase the friction force to give it better traction. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/bcc84f7d-610d-4674-9e13-012b6602365d/Spicy+Sombrero.jpg) + +Notes to fix for the following design: + +- The force from the propellor is nowhere near enough to affect the rover + +- The propellor used cannot handle negative pressure, thus can’t move enough air + +- The design is very bulky and not balanced very well + +- The rover is not able to mount the ramp from the ground due to weight + +#### Design 2: + +For this design, the standard quadcopter propellor was replaced with 2 EDFs. These are much larger fans that are capable of producing far more thrust, however they are much heavier and consume a lot more power. Due to this, each EDF was powered with its own battery which adds even more weight. To balance the force of the 2 fans, they were attached on either side of the rover. Another benefit of this placement is that the fans can not only create downwards thrust, but they can also make a suction effect to the ground, which will properly sick the rover to the ground. + +To greatly optimise on mass and strength (as well as aesthetics), generative design was used to create the frame holding the fans. This is the part that undergoes the most force on the rover, so it has to be very strong, but still must be made as light as possible. Generative design is a technique where a generative model (sort of like an AI), creates a part given a set of prompts and conditions. They result in organic-looking objects like the part we made below: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/2502bdc7-ca9d-4076-b3ca-0b4637f6f859/GD+wing.jpg) + +Notes to fix for the following design: + +- The force from the propellor is nowhere near enough to affect the rover + +- The propellor used cannot handle negative pressure, thus can’t move enough air + +- The design is very bulky and not balanced very well + +- While the rover sticks to the wall, the tracks are unable to move it + +- The rover is not able to mount the ramp from the ground due to weight + +- A technique must be implemented to transport the flag to the summit + +#### Design 3: + +Realising that the tracks weren’t able to move the rover up the ramp, a sort of VTOL design was incorporated and the EDFs were tilted forwards. This means that the EDFs are now pushing the robot up the ramp as well as into the ramp. Because of this, the rover movement gets a massive power boost so we have to be careful otherwise it might shoot off uncontrollably (has happened). Some other small edits were made to make the structure stronger and neater in terms of cable management. A winch was also added to the front of the robot so that the flag can be pulled up to the summit once the rover is at the top. + +To assist the rover in it’s climb to the summit, coding features used the gyro sensor to determine incline angle and required EDF thrust. The fans were also used to assist the rover in getting onto the ramp from the ground. A braking technique was used where the idle fan power served as a brace while the flag was being winched to the top. The colour sensors were used to locate the end of the ramp, and assisted with navigation on the summit. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/60cadc19-2554-4298-9de3-192453c428ad/IMG_2178.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/361fcc27-f610-4025-aa56-6dbd126a637d/IMG_2679.jpg) + +Final design review: + +- The force from the propellor is nowhere near enough to affect the rover + +- The propellor used cannot handle negative pressure, thus can’t move enough air + +- The design is very bulky and not balanced very well + +- While the rover sticks to the wall, the tracks are unable to move it + +- The rover is not able to mount the ramp from the ground due to weight + +- A technique must be implemented to transport the flag to the summit + +--- + +## Step 4: Finalise + +And finally, after many, many iterations, the design works. Now all that’s left is to consider a couple options to make the design perfect in the future. Some considerations could be: + +- **Ease of Assembly:** How easy is it to put the design together? Maybe screws could hold a part better than glue, or you could add a space near a bolt to easily get a tool into it. + +- **Cost:** How much material does it use? There may be a way to use less plastic or cardboard. Is there another way to orient the model to make the prints faster? + +- **Aesthetic:** How does it look? Yes, we also enjoy looking at the finished product and thinking, ‘Wow, that looks awesome’. You could change the shape of the design to look more professional. Add a logo? Maybe coordinate the colour of your prints to make the appearance really pop. diff --git a/content/resources/design-blog-ping-pong-shooter.mdx b/content/resources/design-blog-ping-pong-shooter.mdx new file mode 100644 index 0000000..80b3c83 --- /dev/null +++ b/content/resources/design-blog-ping-pong-shooter.mdx @@ -0,0 +1,158 @@ +--- +title: "Design Blog: Ping-Pong Shooter" +date: "2024-12-31" +categories: ["Design Blog"] +tags: ["Design Blog", "3D Printing", "Attachments"] +excerpt: "My name is Binara, and I will be taking you through the entire design process of how I created the ping pong shooter attachment. The original task was to develop an attachment for the rover to store and shoot ping-pong balls with automatic reloading." +featuredImage: "/images/resources/design-blog-ping-pong-shooter.jpg" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/243fe3f1-921a-47f9-94d1-b91857acc3b9/IMG_1117.jpg) + +My name is Binara, and I will be taking you through the entire design process of how I created the ping pong shooter attachment. The original task was to develop an attachment for the rover to store and shoot ping-pong balls with automatic reloading. + +--- + +## Step 1: Research + +Every idea has to start somewhere, so the best way to get inspiration is to see what others have done. If your idea doesn’t exist, it can be helpful to break it up into smaller, existing ideas. + +As with the domino layer, we will explore existing designs of ping-pong shooters: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/de964f0e-9b04-4663-9eb7-6061f3235f34/design+3.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/74dd72d2-129b-4108-91ed-4c0e6fa938ce/design+1.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/fe62ea07-44d3-48f3-8d5e-daa4ff8d93b3/design+2.jpg) + +The problem with these designs is that we’re constrained to using 2 servos, so flywheels are not an option. A system that automatically pulls back rubber bands and loads ping-pong balls could work, but it would also be complex. However, using elastic energy to shoot the balls might lead us in a good direction. + +--- + +## Step 2: Ideation + +It’s a good idea to get some of your thoughts and theories down on paper before building them. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/536cb9f0-73e1-4035-8409-a93a6a715993/IMG_1124.jpg) + +--- + +## Step 3: Prototype + +As with most of my designs, the prototype phase consists of generating a 3D design on Autodesk Inventor or Fusion 360 and then 3D printing it. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/cb1c5ec6-3627-49bb-9228-36d249e654ee/prototype.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/b2480c2b-4a06-4166-ab40-3b690ce7ef9f/IMG_1116.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/3ae31003-0ff2-493b-8a1a-83f7ef296df9/IMG_1115.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/7b0f7ac9-791c-4510-bc18-d75f088bee29/prototype+2.PNG) + +--- + +## Step 4: Iterate and Evaluate (Back to the drawing board) + +**Design 1:** + +This design has ping-pong balls dropping in from above. Then a servo-powered rack and pinion push the ball into ‘wings’ designed to squeeze and pop it out. The structure is made from PLA, but the wings are made using PETG, a much more flexible material. This makes it perfect for bending and squeezing the ball. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/82a51d27-75da-480a-95b4-86d1e11197d1/4.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/3fa563cf-a7c5-49ec-9729-99df38167a27/5.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/df2e5c12-0b1e-4727-a5c1-5e58397405ac/6.PNG) + +Notes to fix for the following design: + +- The actuator does not have enough power to push the ball through the wings. + +- There is a large amount of friction in the actuator, so most of the energy from the servo is wasted. + +- When the ball is pushed against the wings, it pops straight up instead of through them. + +- The print is quite large and hard to print. Also, some structural aspects are fragile. + +**Design 2:** + +Now two servos on the back drive the same rack. The idea of this was to double the power of the ejection system. Throughout the structure, I’ve made some walls thicker, which reduced the chance of the prints breaking. Finally, at the front of the robot, there is an element on the roof that holds the wings in place. This stops them from flexing too much and popping out of their socket when a ball is pushed against them. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/6fdf0a80-9d7f-49a6-8d80-6839706a870e/7.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/46f2ac82-a6ec-4afe-a2e8-e6c542ffb765/8.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/3324c0c5-4401-49be-8f52-b022b185adcb/Capture.PNG) + +Notes to fix for the following design: + +- The actuator doesn’t have much power when pushing the ball, so the ejection system is weak. + +- The actuator doesn’t always go straight, and the teeth jam in the channel it moves along in. + +- The print is massive and has several supports that are difficult to remove. + +- The element on the roof holding the wings is stuck using glue. Sometimes, it still pops out if there is enough pressure from the ping-pong ball. + +**Design 3:** + +The main issue in the previous design was that the rack jams when the servos pushed out a ping-pong ball. This is due to a very minor mistiming in the servos. The original rectangular shape of the actuator was changed to this diamond shape to prevent the rack from moving sideways. + +Next, two issues were solved in one: the roof detaching from the wings and the complexity of the prints. As you can see below, the roof was removed from the design and made to be screwed on instead. This allows all the design components to be printed without support, making it much more robust as it is assembled using screws. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/055bd377-7632-4163-9782-3d0737c9e8ab/1.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/20bff088-6e0b-4623-bfda-b916478f6078/3.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/c19d00fe-eab1-41da-855f-4752b63734d4/2.PNG) + +Notes to fix for the following design: + +- The actuator doesn’t have much power when it’s pushing the ball, so the ejection system is weak + +- The actuator doesn’t always go straight, and the teeth jam in the channel it moves along + +- The print is massive and has a large number of supports that are difficult to remove + +- Sometimes, the pressure of the ball against the wings at the front causes them to completely pop out + +- The servos are known to fall out of sync again, causing the actuator to jam + +**Design 4:** + +After experiencing several issues with the pusher design, I went for a redesign and completely removed the rack and pinion. I made a new system with a continuous servo and a worm drive to get a lot of torque in the ejection system. These systems are known to vastly increase mechanical advantage. The shooting system slowly but powerfully pushes ping-pong balls through the new, stronger wings. This lets the system shoot really far. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/d44d44ec-05c0-4f5b-8961-5db48dba6397/10.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/ba30c4a6-11f7-4ed7-aedb-0b1b3fb9aab8/11.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/df1cc918-c4d0-4df6-b255-29cab09f1f81/12.PNG) + +Final design review: + +- The actuator doesn’t have much power when it’s pushing the ball, so the ejection system is weak + +- The actuator doesn’t always go straight, and the teeth jam in the channel it moves along + +- The print is massive and has a large number of supports that are difficult to remove + +- Sometimes, the pressure of the ball against the wings at the front causes them to completely pop out + +- The servos are known to fall out of sync again, causing the actuator to jam + +--- + +## Step 5: Finalise + +And finally, after many, many iterations, the design works. Now all that’s left is to consider a couple options to make your design perfect in the future. Some considerations could be: + +- **Ease of Assembly: **How easy is it to put the design together? Maybe screws could hold a part better than glue, or you could add a space near a bolt to easily get a tool into it. + +- **Cost: **How much material does it use? There may be a way to use less plastic or cardboard. Is there another way to orient the model to make the prints faster? + +- **Aesthetic: **How does it look? Yes, we also enjoy looking at the finished product and thinking, ‘Wow, that looks awesome’. You could change the shape of the design to look more professional. Add a logo? Maybe coordinate the colour of your prints to make the appearance really pop. + +If you want to build the final version of the Ping Pong Shooter yourself, click the link below and get printing! + + [ + Build Guide: Ping Pong Shooter + ](https://micromelon.com.au/resources/build-guide-ping-pong-shooter) diff --git a/content/resources/design-blog-sumo-flipper.mdx b/content/resources/design-blog-sumo-flipper.mdx new file mode 100644 index 0000000..fae3ecb --- /dev/null +++ b/content/resources/design-blog-sumo-flipper.mdx @@ -0,0 +1,104 @@ +--- +title: "Design Blog: Sumo Flipper" +date: "2024-01-09" +categories: ["Design Blog"] +tags: [] +excerpt: "My name is Binara, and I will be taking you through the entire design process of how I created the sumo flipper attachment. The original task was to create a unique solution for sumo battles. An additional condition is that the rover must not have an" +featuredImage: "/images/resources/design-blog-sumo-flipper.jpg" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/d173e0cf-22a9-4c23-b3f0-e8e6f1882871/Complete.jpg) + +My name is Binara, and I will be taking you through the entire design process of how I created the sumo flipper attachment. The original task was to create a unique solution for sumo battles. An additional condition is that the rover must not have any expansions (ie. extra microcontrollers, motors, or power sources). + +--- + +## Step 1: Research + +Every idea has to start somewhere, so the best way to get inspiration is to see what others have done. If your idea doesn’t exist, it can be helpful to break it up into smaller, existing ideas. + +The best way to research for sumo is to take a look at robots from many different battles, as well as looking into battlebot designs. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/34d20f34-6ba0-4dca-8391-7de3ad8a5a60/research+1.png) + +Existing sumo robot design vary a great deal with some techniques being a great solution for some robots but a poor solution for others. Given this, there are still discernible trends among the winning robots. Looking at these designs, the robots try to have wheels with good traction and downforce to make sure it doesn’t slip. + +Many of these robots also have a ramp at the front with the Maker’s Muse robot going so far as to have a lever arm at the front to flip other robots. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/9a76af58-9a44-49c4-8e37-1df654f13615/research+2.png) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/bfb105cc-7f6f-42e3-ab96-d280d761ad60/research+3.png) + +--- + +## Step 2: Prototype + +As with most of my designs, the prototype phase consists of generating a 3D design on Autodesk Inventor or Fusion 360 and then 3D printing it. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/bc62ca6e-b0bf-435c-b60e-4ddd3eb24410/Prototype+1.png) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/5646d8e7-64fe-4ff6-928a-f4feae8da31f/prototype.jpg) + +--- + +## Step 3: Iteration and Design + +This design blog is a little different to the others in the sense that there were no largely different iterations. In this design, the progression was the addition and refinement of unique features along the way. Here, I will take you through numerous features of the sumo attachment and why I designed them this way. The sumo robot consisted of a flipper at the front to flip incoming opponents, and special traction wheels at the back for defensive purposes. + +#### Silicone Casting: + +The first technique experimented was crafting custom wheels for the rover. While the tracks on the rover provide some traction, they are made of TPU which is a harder rubber. To increase the traction of the rover, additional wheels were created for it using 2-part silicone. The process is the following: + +- Create the mould and the insert. The inner part of the wheels still needs to be hard, so this will be 3D printed. The insert will have a special structure designed for liquid silicone to flow through, harden, and interlock to the piece. + +- With the piece secured in the mould, the next process will have to be done quickly, as the silicone quickly hardens. Part A and B were mixed, stirred, and slowly poured into the mould until it was filled to the brim. Unfortunately we don’t have images of the casting, however the process was similar to the demonstration from crafty arts. + +- After a few hours, the outer casing of the mould (sacrificial) was destroyed to obtain the complete silicone wheel. + +This wheel has incredible grip and is very very soft. With this in use, a very large force is required for the robot to lose traction. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/b19fd957-19a3-4bb4-8fe4-c351cffad80f/silicone+process.png) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/4bd68e2c-3ff5-4a1d-8d49-0b899a993adb/silicone+mould.jpg) + +*Credit: Crafty Arts* + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/d5e94ab3-3817-4c38-8eab-e80ba8e46d86/IMG_2737.jpg) + +#### Clutch System: + +The point of the silicone wheels is defeated if we simply have them free-rolling. That’s why the next feature of the sumo flipper is the use of clutch bearings. Clutch bearings are a type of roller bearing that spins freely in one direction, but locks up tight when rotating the other direction. The first version was a print-in-place experiment to gauge whether the clutch bearing theory would actually work. Some tests were conducted and the print worked much better than expected, however it wore out quickly. + +With the confirmation that clutch bearings work, steel manufactured bearings were obtained with springs to assist the internal clutch. This version worked very well and was implemented into the design. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a1fbc33f-02ee-4289-897d-00963d3954a5/Printed+Clutch+bearing.png) + +3D printed clutch bearing design + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/83bee48e-1b59-4ba9-96a1-4f7cdfab7cf2/roller+clutch+bearing.png) + +Steel roller clutch bearing alternative + +#### Flipper and Linkage: + +Finally, the offensive system for the robot is the flipper mechanism at the front. This has been done using a first order lever with gears to increase the strength of the servo. With the use of a larger servo, this allowed the flippers at the front to lift just over 1kg which is perfect for the 1kg robot category. + +The clutch system at the back was also attached to a lever as the wheels cannot touch the ground while the robot is turning. Because of this, the paths of movement between the flipper and the clutch system had to be carefully coordinated as seen in the black and pink link paths below. + +While the flipper could lift a kg, an issue we came across was that instead of lifting the opponent, the flipper would lift the rover off the ground instead. To combat this, the clutch system was located at the back to provide counterweight, but when the clutch wheels engage, they actually assist in partially lifting the robot off the ground, and descend even lower than the level of the tracks of the rover. This ensures that the rover still has maximum contact, even if it’s been lifted off the ground. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/c0315f9d-f36d-4c3f-b808-3422e76cc9f4/IMG_2726.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/4d938720-8cab-4ecd-8687-d02d5beafe06/Linkage.png) + +--- + +## Step 4: Finalise + +And finally, after many, many iterations, the design works. Now all that’s left is to consider a couple options to make your design perfect in the future. Some considerations could be: + +- **Ease of Assembly:** How easy is it to put the design together? Maybe screws could hold a part better than glue, or you could add a space near a bolt to easily get a tool into it. + +- **Cost:** How much material does it use? There may be a way to use less plastic or cardboard. Is there another way to orient the model to make the prints faster? + +- **Aesthetic:** How does it look? Yes, we also enjoy looking at the finished product and thinking, ‘Wow, that looks awesome’. You could change the shape of the design to look more professional. Add a logo? Maybe coordinate the colour of your prints to make the appearance really pop. diff --git a/content/resources/driving-school-basics.mdx b/content/resources/driving-school-basics.mdx new file mode 100644 index 0000000..0ef3a4d --- /dev/null +++ b/content/resources/driving-school-basics.mdx @@ -0,0 +1,104 @@ +--- +title: "Driving School Basics" +date: "2022-03-13" +categories: ["Activities", "All"] +tags: ["Colour Sensors", "Branching", "Iteration", "Algorithm Design", "Ultrasonic", "IR", "Motors", "Simulator", "Advanced"] +excerpt: "Learn the basics of rover motors and sensors while navigating Duck City." +featuredImage: "/images/resources/driving-school-basics.png" +--- + +** ** + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/d48b056d-c05e-4abd-aceb-0e397c551283/Simulator+Indicator.png) + + ](/robot-simulator) + +Driving School is a virtual robot playground, with ducks, obstacles and traffic lights in the Micromelon Robot Simulator. + +In Driving School Basics we program the rovers to stay in the centre of the lanes, while avoiding running over ducks and hitting other rovers. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/15a6a126-85b9-4443-86ab-f8432436284f/driving+school.gif) + +Activity Demonstration + +### Setup + +This exercise has no physical setup as it is completed in the Micromelon Robot Simulator. To learn more about the Robot Simulator check out the [**Getting Started With The Robot Simulator**](https://micromelon.com.au/resources/robot-simulator) post. + +### Here’s Our Approach + +#### Stage 1 + +Add a while true loop and an IF/ELSE IF/ELSE statement so that we can continuously ask our rover questions about its environment. + +#### **Stage 2** + +The simulator’s roads actually have a slight brightness gradient towards the edges, so using the colour sensors you can work out where the rover is on the road. This approach uses an IF/ELSE IF/ELSE statement together with the colour sensor blocks to work out whether it is too far to the left or right. You can use the set motor speeds blocks to slightly turn to the left or right and adjust the position on the road. + +#### **Stage 3** + +Now we need to make sure we do not run into the duck! We can use our front ultrasonic sensor distance block to get our robot to wait for the duck to cross. It will also avoid other rovers now! + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/c1c43912-907f-4caf-8778-e4c8bedb6953/driving+school+answer.png) + +Example Code + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/driving-shapes-2.mdx b/content/resources/driving-shapes-2.mdx new file mode 100644 index 0000000..4c5ed2e --- /dev/null +++ b/content/resources/driving-shapes-2.mdx @@ -0,0 +1,140 @@ +--- +title: "Activity: Driving Shapes 2" +date: "2021-06-03" +categories: ["Activities", "All"] +tags: ["Iteration", "Variables", "Motors", "Maths", "Intermediate"] +excerpt: "Learn branching, variables maths, and motors." +featuredImage: "/images/resources/driving-shapes-2.png" +--- + +** | ** + +Program the rover to request a number from the user and drive in a shape with that many sides. For more advanced maths make the rover draw the shape with uneven length sides. + +#### + Relevant Coding Skills + + Branching + + --> + + Iteration + + Functions + + Variables + + Algorithm Design + + --> + + Maths + +#### + Relevant Rover Concepts + + Ultrasonic + + --> + + IR + + --> + + Colour + + Gyroscope + + Accelerometer + + Motors + + LEDs + + --> + + Buzzer + + --> + +Activity Demonstration + +### Setup + +All you need is a flat, uniform surface to drive on. Different surfaces have different friction properties. This means the tracks will slip differently dependent on where the rover is driving. Some movement blocks such as turn by degrees are calibrated for an average friction. When driving on other surfaces you may need to turn more or less to get the desired angle. + +### Here’s Our Approach + +#### Stage 1 + +First we need to ask for a number of sides. We can use the request input block. This block returns this a text string. We need to convert it to an integer so that it can be used as a number. Once we have converted it we store the number in a variable called ‘sides’. + +**Stage 2** + +Once we have a number of sides we can create the code to draw our shape. We will need a repeat for number loop block to repeat the movement blocks for each side. This loop needs to run as many times as we have sides, so we put our sides variable block in the number of times it will repeat. + +#### **Stage 3** + +In each iteration of the loop we need to draw a side with movement blocks. We need to move forward and then turn by degrees. We can calculate how many degrees we need to turn each time a simple math operation. Divide 360 by our number of sides using a math operation block. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622690833637-R85XTDMVHVO189OD2XJ8/drivingshapes2-answer.png) + +Example Code + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/driving-shapes.mdx b/content/resources/driving-shapes.mdx new file mode 100644 index 0000000..abf1ea8 --- /dev/null +++ b/content/resources/driving-shapes.mdx @@ -0,0 +1,142 @@ +--- +title: "Activity: Driving Shapes" +date: "2021-06-03" +categories: ["Activities", "All", "Simulator Activities"] +tags: ["Iteration", "Motors", "Beginner"] +excerpt: "Learn iteration and how to control the Rover’s motors." +featuredImage: "/images/resources/driving-shapes.png" +--- + +** | ** + +Learn to make your rover move and draw shapes with it. Start by making the rover drive in a square, then a triangle. Simplify your code with a loop and create more complex shapes like hexagons and octagons. + +#### + Relevant Coding Skills + + Branching + + --> + + Iteration + + Functions + + Variables + + --> + + Algorithm Design + + --> + + Maths + +#### + Relevant Rover Concepts + + Ultrasonic + + --> + + IR + + --> + + Colour + + Gyroscope + + Accelerometer + + Motors + + LEDs + + --> + + Buzzer + + --> + +Activity Demonstration + +### Setup + +All you need is a flat, uniform surface to drive on. Different surfaces have different friction properties. This means the tracks will slip differently dependent on where the rover is driving. Some movement blocks such as turn by degrees are calibrated for an average friction. When driving on other surfaces you may need to turn more or less to get the desired angle. + +### Here’s Our Approach + +#### **Stage 1** + +Use the basic movement blocks to program the rover to go forward then turn. Using the turn by degree blocks makes it easier to alter the code for other shapes. + +#### **Stage 2** + +Use a repeat loop block and change the number to the number of sides in your shape. Place your movement blocks inside the repeat. + +#### **Stage 3** + +To draw different shapes, change the number of times the loop repeats and the number of degrees in a turn. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622683780748-J2UOEJYBV1BCQL6KEOTU/drivingshapes-answer.png) + +Example Code + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/everything-to-know-about-3d-printing.mdx b/content/resources/everything-to-know-about-3d-printing.mdx new file mode 100644 index 0000000..922202f --- /dev/null +++ b/content/resources/everything-to-know-about-3d-printing.mdx @@ -0,0 +1,298 @@ +--- +title: "A Crash Course on 3D Printing in the Classroom" +date: "2022-08-03" +categories: ["All"] +tags: ["3D Printing"] +excerpt: "Learn the fundamentals of 3D printing as a technology you can use in the classroom!" +featuredImage: "/images/resources/everything-to-know-about-3d-printing.jpeg" +--- + +This post is designed to be a taster at how 3D printers work, don’t work and how they can be used in the classroom. This is the written version of a Professional Development Webinar Micromelon Robotics ran for teachers in 2022. Check out the events page to find out if there are other events coming up you might want to tune in for. + + [ + Events Page + ](/events) + +### How Do 3D Printers Work? + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/88a449e3-306e-4438-8ca9-dbcc77ee8e02/3dprintinggif.gif) + +The term “3D printing” encompasses several different technologies with their own benefits and drawbacks. We will mainly be discussing the currently most accessible and affordable 3D printer technology known as FDM (Fused Deposition Modeling). However, due to technological improvements and pricing reductions, resin LCD printers are also becoming a mainstay among hobbyists and schools alike. + +FDM printers use spools of plastic, or “Filament”, which are melted down and laid out layer by layer on a usually heated platform or bed. You can think of this as a traditional printer, where each layer is a single page of paper, and the ink is the filament. Due to the physical size of the nozzle, the filament is pushed through, and the printer software configuration, these layers can vary in sizes smaller than a millimeter. This is where 3D printing’s biggest weakness is apparent. If you have a 0.2mm layer height and a 1 cm tall object, the printer will need 50 layers to be finished. + +### Where Is The Technology Currently? + +3D printing has come a long way, from relatively crudely assembled printers in people’s garages to almost fully assembled machines for sale at your local electronics store. These days printers have been trending down in pricing and have seen a relative plateau in features, with the main focus on being usable out of the box. These are usually competing ideals and have led to two distinct pricing points for FDM printers. + +The first of these price points is the less than $800 printers, which usually forgo some of the more “premium” features and support to meet this price point. These printers can be great for someone who has the time and knowledge to tinker and get them running optimally but are not great “workhorse” printers as they will require maintenance and repairs as they wear out and break more quickly. + +The other price point is the greater than $800 printers. These usually come with excellent quality of life features such as automatically leveling the printer bed between prints or for it to know when it is out of filament and pause on its own. This makes for a much easier time using the printer and normally means less maintenance and more printing. + +### 3D Printer Materials and When to use them + +Another key part of FDM printers that must be discussed is the ever-advancing filament technologies. Remember filament is the Ink to 3D printers. Filaments come in many different types, all with their own mechanical properties. Some new and prominent types include; PETG – which is more resilient to heat and is more durable than the typical PLA, and ASA – which is very similar to ABS but can better withstand UV rays. Combination filaments are also becoming more prominent, using materials such as carbon fibers embedded inside the filament to give it more strength. + +Here are a few details for the materials previously mentioned: + +**PLA** + +PLA is one of the most used materials amongst hobbyist 3D printers. It is easy to print, requiring low hot end temperatures. It has a very low tendency to warp while producing good details. PLA is also amongst the cheapest filaments to print with. The main downside to this material is that it is susceptible to temperatures near and above roughly 60 degrees centigrade and is brittle compared to other materials. These combined features leave us with a low-cost filament that is extremely good for printing prototypes and medium-strength objects for the classroom. We at Micromelon use this material whenever we need to prototype a design or print attachments for our Rovers as well as for most projects because its just easier to print with. + +**PETG** + +PETG is another highly used material with several benefits over PLA. It is only slightly more expensive than PLA while still being relatively easy to print with due to its low tendency to warp and similarly low hot end temperatures. It can be used to create tough and durable parts while maintaining a higher temperature threshold of 80 degrees centigrade when compared to PLA. The main downsides to this material are its properties while printing. It is prone to leaving thin wisps of filament when printing an object. It is also worse at performing unsupported bridging between parts of an object and suffers from some loss in detail on complex parts. + +Additionally, due to the string layer adhesion, support material can be much harder to remove than with PLA. All these features combined leave us with a relatively low-cost filament that is extremely good for printing components that require higher strengths for indoor and outdoor use. Use PETG when the forces on your part are going to be much higher, for example wall hooks or shelf brackets. Some robotics applications you might use PETG for are sumo shields (to protect against metal shields) and the attachment spider clip (available on Thingiverse and Printables). + +**ABS** + +ABS is a plastic used worldwide in injection molding and was one of the first materials used by 3D printers. It has several advantages over other materials but also has several disadvantages that must be considered. ABS has significant mechanical resistances while being able to withstand temperatures up to 100 degrees centigrade. It can also be easily post-processed via acetone smoothing, in which acetone and its vapors can be used to melt the top layer of ABS. However, these properties come at the cost of significantly more difficult printing. ABS requires much higher hot end temperatures than the previously discussed materials and requires a closed-in printing chamber to avoid the warping of prints. ABS also gives off dangerous styrene fumes while printing, so it should only be done in a well-ventilated area. These combined features leave us with a relatively low-cost filament that is extremely good for technical parts exposed to high stress and temperature environments. Generally its best to avoid using ABS because of the fumes created in the classroom, however in some cases it might be necessary if you are going to place something in the sun for long periods of time. + +**ASA** + +ASA is a relatively new material used for 3D printer filament. It is very similar to ABS but comes with several upsides. ASA is considerably more resistant to UV rays when compared to ABS while maintaining most of its mechanical properties. Compared to ABS, it also warps less and doesn’t produce as many dangerous fumes. However, ASA still tends to warp without a closed-in printing chamber, and while it produces fewer styrene fumes than ABS, these fumes are still potentially dangerous. ASA is also more expensive when compared to ABS and other more established filament materials. All these features combined leave us with a material some consider to be a successor to ABS. It is best used for technical parts exposed to high stress and temperature environments indoors and outdoors. Like ABS, use ASA when you need you prints to be able to withstand heat and sunlight for extended periods of time. + +**Flexible Materials** + +“Flexible Materials” covers multiple filament types, all characterised by their flexibility. Due to this flexibility, these materials have excellent layer adhesion, can withstand significant mechanical forces without permanently deforming, and are generally resistant to wear. These materials are also usually suitable for printing dimensionally accurate objects due to their low shrinkage. These materials, however, are tough to print. They require significantly slower printing speeds compared to other materials, are very bad at bridging between parts of objects and are prone to leaving thin wisps of filament when printing. These materials are also highly hygroscopic and absorb water in the air leading to an even worse experience while printing. All these features combined leave us with an invaluable material when printing objects that need to bend, compress or otherwise conform to their environment. We at Micromelon do not regularly use this material due to its downsides, but we have required it for prototyping parts for our Rovers. + +**Composite Materials** + +The term “Composite Materials” covers multiple different filament types (PLA, PETG, etc.), all characterised by combining a polymer and filler material such as Carbon fiber or glass powder. This combination of materials results in improved mechanical properties, such as toughness. Due to this mixture, the material takes on the printing properties of the base polymer but with added downsides. Due to the addition of highly abrasive materials such as carbon fibres, the typical brass nozzle will wear down quickly and cause more frequent clogging. To remedy this, a hardened steel nozzle can be used, but these are significantly more expensive and will require re-tuning of the printer. + +Additionally, this mixture of materials can result in produced parts having reduced layer adhesion. All these features combined leave us with materials with excellent mechanical properties, which are very useful in things like drone frames. We at Micromelon do not regularly use these materials, but we recognise their benefits. + +## How to Take Your Ideas To The 3D Printer + +The most significant advantage that 3D printers give us is quickly taking an idea from the concept phase into reality. This approach is called “Rapid Prototyping”. It replaces the need to make something using hand tools or other typically large, expensive, and difficult to use machines. Anyone can take a design, print it, evaluate it, and tweak it in real-time for future iterations. This process is cheap and effective and helps instil a vital part of the engineering process in the designer. + +The process of taking your idea to the 3D printer can be broken down into 3 distinct parts: Designing, Slicing and finally, Printing. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/2ab9563a-19a4-4f35-9692-7047a2a45ddd/image9.png) + +For students we often need to repeat this cycle a few times and in order to save class time, filament and failed designs, we normally start with ideation and sketching. Basically we follow the engineering design process, meaning we do lots of thinking and sketching at the start, before jumping into software to build our models, finally to print and evaluate where we went wrong. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/86a581e9-6c82-492f-bfce-b980896c7283/image8.png) + +**3D Modelling and Design** + +Once you have finalised and fleshed out your idea, you must first design it in some CAD software like Tinkercad or Fusion 360. One thing to keep in mind is the physical limitations of your 3D printer. Creating too large or complex parts will lead to difficulties later down the line. Here are some rules of thumb to remember when designing parts and some examples. + +#### *Rule: Keep a flat portion on the designed part to help with orientation on the printer*. + +The image on the left is an example of a spinning top that does not conform to this rule. We can see that this model will be impossible to print as there are no flat portions that can be placed on the printer bed. The image on the right shows a version of a spinning top that conforms to this rule. The handle has been made specifically so the spinning top can be placed upside down and printed with support. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/7c1d7f5c-5faa-4ad9-9280-ba2394d217d9/image10.png) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/6606c294-4a47-4990-b0af-6c5ff6fabf09/image4.png) + +#### *Rule: Try to minimise the number of features in your design that are not directly connected to something below it* + +The image on the left is of a bracket with an overhanging portion on each side. For this to be printed in its current orientation, it would require support material between the bottom and top surfaces, which could be challenging to remove and leave a bad surface finish. The image on the Right shows the same bracket with the overhanging portions filled in, making it significantly easier to print. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/d7dcb38a-8222-4961-b373-8ced32f4ada9/image11.png) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/35fc9903-74b0-4f3d-8aec-d9207533cfed/image5.png) + +#### *Rule: If you must have something sticking out from your design, try to keep it at an angle of more than 45 degrees to avoid the need for supports.* + +The image on the left is of a stopper meant to have an O-ring placed between the top and bottom ridges. For this to be printed in its current orientation, it would require support material between the bottom and top surfaces, leading to a reduced surface finish that could damage the O-ring. The image on the right is of the same stopper with a 45-degree angle added to the top surface. This now means that the stopper can be printed without the need for supports, ensuring a good surface finish. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/5d50a91b-9986-4885-a754-8e0c46691d9f/image6.png) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/ddab977c-447b-478f-b8b0-22951f347954/image1.png) + +#### *Rule: Due to the printing process, curves look best when orientated in the x and y-axis.* + +The image on the left is of a design with a curved portion pointing upwards. Due to the way that 3D printers slice models for printing, this curve will end up being made of layers with a height equal to the selected layer height. This will cause the curve to become less defined and to look more like steps. To avoid this, you should design your parts to be orientated with significant curves on either the x or y-axis. This is because the resolution of the x and y axises significantly better than the layer height. This can be seen in the image to the right, where the component is laid on its side. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1678f16c-1afc-4b52-a112-67d45eb954cf/image14.png) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/29c91597-de4b-4937-9589-91456dea6686/image16.png) + +**Slicing** + +Here you will use a program such as Cura, or Prusa Slicer to take your design and translate it into something the printer can understand. These pieces of software will take your design and “slice” it into multiple layers based on both the physical characteristics of your printer and any software settings. This is where you must consider things such as supports, orientation, print times, etc. Your printer brand will determine which slicer you can use and we’d recommend using the manufacturer's version for best results. You can find these on the manufacturers website, normally on a sticker on the 3D printer itself. If you can’t find the software to use for your printer, reach out to us and we can help. + +**Printing** + +This is where you take your design to the printer. This can be done in one of several ways, depending on the features that your printer has. Some printers can print directly from a USB, others may need to print from an SD card, and more advanced machines can have files loaded onto them wirelessly over Wi-Fi. The printer will start printing your design once the file has been uploaded and selected. Follow your printer's user instructions for this part, sometimes they even have these on the front of the printer to make finding them easier. + +### Where things go wrong + +Although 3D printers are fantastic pieces of technology that help us turn our designs into physical objects, they are still a complex piece of technology with many things that can go wrong. No matter how good the printer is, it is still susceptible to failure. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/ce64cbeb-8c58-4e25-8859-ea00e15e666c/image17.jpg) + +Image Credit: Prusa Research a.s. + +No matter how well tuned your printer is, if it is given an impossible to print model, it will fail. This is where the previously mentioned rules of thumb come into play; minimising potential issues early in the design process can help prevent a lot of heartaches when finally printing. 3D printers may be complex machines, but they will only do what we tell them. If we ask them to print in thin air, they will attempt this, leading to the dreaded “spaghetti monster” where filament is left covering the bed looking like strands of spaghetti. + +Printers also need regular maintenance; this can vary from something as simple as cleaning the print surface, so the filaments will stick to tightening loose belts. Additionally, all filaments are hygroscopic to some extent. This means that over time they will absorb surrounding moisture, which can heavily affect the resulting prints. + +--- + +#### A Note On Storing Filament + +We have a blog post coming soon on storing 3D Printer filament! Keep an eye out. + +### Support Material & Printing Complex Parts + +Support material is a staple of 3D printing. It can be enabled in the slicer to build a temporary structure to print on top of. This has the added benefit of allowing us to print much more complicated shapes, typically requiring printing in mid-air. In general, supports come at the cost of additional filament usage, longer print times and additional post-processing to remove. + +Depending on your type of printer, you may be restricted to using the same material for both your object and the supports. This comes with the added benefit of better adhesion between the supports and object, meaning your prints will be more likely to succeed. However, this will also mean that removing supports will require more effort and usually result in a reduced surface finish. This means that material choice will be an important consideration when printing parts that need large amounts of supports. Materials such as PLA will have supports that are easier to remove than PETG, which usually have better layer adhesion. + +Suppose your printer supports printing in multiple materials using multiple extruders or other means. In that case, you have the option to use different materials for the supports and objects you want to print. In this case, you can use materials that do not usually stick to each other, providing quick and clean support removal, but may also increase print times. This, however, is typically restricted to more expensive printers. + +So, supports are a double-edged sword. On the one hand, we can print whatever we want, regardless of its features. On the other hand, we now need to contend with potentially extensive post-processing, longer print times and diminished surface finish. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/0f4ca13e-400d-4b32-9b0e-a46ce6d31eea/image13.png) + +# 3D Printing in Industry + +3D printers have been highly influential in how engineers work worldwide. Gone are the days when complex prototypes must be set off to be manufactured over days or weeks. Industrial designers and engineers can design, analyse and refine quicker than ever before because the parts can be printed in house, evaluated, and decisions made without needing external partners. Even things as simple as TV remotes can be printed, felt in the designer’s hand and changes sometimes made within the same workday. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1bfa7e54-75a2-4034-b32d-0642b03d5c1c/image12.jpg) + +Here at Micromelon, we have been using 3D printers to prototype our robots since 2017 and before that to help with Uni projects and other companies products. We used 3D printing to sell our first products, refine our designs and upgrade different parts of our robots based on direct customer feedback and prototyping. 3D printing enabled us to evaluate and refine before we were ready to order thousands of robot shells at a time. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/3cb7b21b-78ab-4749-8c9f-98ce7de3e0dd/image2.jpg) + +A great example of this taken to the extremes is with NASA. In 2014, NASA sent the first 3D printer, the ReFabricator, to the International Space Station, which was an FDM printer using very similar technology to what we have in classrooms today. This printer enables designers on earth to design tools and parts required for the ISS to be printed in space and used. It was also the first 3D printer to break down old prints and reuse the material to create new parts. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/8379af7a-0392-4211-ae07-709a1ae50624/image15.png) + +Finally, 3D printers have allowed people to make entire businesses based on customisation and designing parts for their hobbies. Whether it’s someone adding a cup holder to their own car or creating custom cup holders for a whole range of vehicles, 3D printing has given people the ability to customise anything and everything. Where usually you’d need a large market to sell a product, with 3D printing, you can design the part, print, and sell only a few, and it can still be worthwhile. A whole industry on Etsy and other online marketplaces has been created based on this premise. If the thing you need doesn’t exist, thousands of people who 3D model and print for a living are willing to design a part just for you. + +So that is a crash course on 3D Printing. There is lots of content we purposely didn’t include in this blog post because it could honestly be a whole book. Things like which 3D Printers are best for classrooms, where I download models from, how I store my filament and how do I manage 30 or more students all wanting to print their new design at once are all great questions and ones that are best handled in a video call or meeting with some of our 3D printing experts at Micromelon. If this is you feel free to reach out via our contact form and we’ll be more than happy to support you on your 3D Printing journey. + + [ + Contact Us! + ](/contact) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/727606f4-ca0c-4d20-a6c1-a15a7793b53d/Black+Spacer.png) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/514f66e4-0c76-4ca8-8451-b38d0c4b39e6/2021-12-16_16-01-19_1639630906.jpg-2_9aae3875-8e0b-41ff-8d46-14a38ce51916.webp.jpeg) + +# Say Hi to Makerhero! + +From filament, to repairs and spare parts. Micromelon has spent the last 6 years working with schools, businesses and individuals to repair, maintain and print great things. We run 3D printing training and webinars to the public focused around using 3D printers safely around students at schools, robotics clubs and at home. + +We also own MakerHero, our very own 3D printing filament and parts brand. + + [ + Buy Makerhero Filament and Parts + ](https://makerhero.com.au) + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464675848-K9YEOYK65IWRFRX4QJ1R/blog+header+image+.png) + + ](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Robot Simulator](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +How to get started with the Micromelon Robot Simulator. + + [Read More →](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1626837419969-WBB4D85KQIXSOP750N5M/resized+banner+%281%29.png) + + ](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Micromelon Rover](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +Crash course on basic rover function, how and what to program and starter activities to attempt. + + [Read More →](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622691207784-0X6JV7RYRQXZAFRG712S/pisonescape.png) + + ](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + + [Activity: Prison Escape](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + +Learn branching and iteration using the colour sensors and motors. + + [Read More →](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) diff --git a/content/resources/flip-bot.mdx b/content/resources/flip-bot.mdx new file mode 100644 index 0000000..d131ac1 --- /dev/null +++ b/content/resources/flip-bot.mdx @@ -0,0 +1,142 @@ +--- +title: "Activity: Flip Bot" +date: "2021-06-03" +categories: ["Activities", "All"] +tags: ["Branching", "Iteration", "Accelerometer", "Motors", "Intermediate"] +excerpt: "Learn branching, iteration, and how to use the accelerometer." +featuredImage: "/images/resources/flip-bot.png" +--- + +** | ** + +Program the rover to flip itself upside down and then stop. There are many solutions to this problem. The rover must flip itself without being touched while running and once it has flipped it should stop. You could try combining this with the Turn Over Rover program to include lights. + +#### + Relevant Coding Skills + + Branching + + Iteration + + Functions + + Variables + + --> + + Algorithm Design + + --> + + Maths + +#### + Relevant Rover Concepts + + Ultrasonic + + --> + + IR + + --> + + Colour + + Gyroscope + + Accelerometer + + Motors + + LEDs + + --> + + Buzzer + + --> + +Activity Demonstration + +### Setup + +The most common way to flip the rover is having it drive up a flat vertical surface and fall backwards. Perhaps using the back of a laptop screen, a book, or a wall. These are not the only solutions. See what other driving conditions might make the robot flip. + +### Here’s Our Approach + +This solution can be extended to make the rover reset itself and include LEDs + +#### Stage 1 + +Start moving forward to eventually encounter a vertical obstacle. + +#### **Stage 2** + +Add a repeat block where the condition is a sensor block that checks if the rover is right way up. This will cause the rover to wait until it is not the right way up. + +#### **Stage 3** + +After the loop that waits for the robot to flip we add a motor block to stop the rover. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/8c796e2c-5452-45af-a3f9-fbb9eb1ac363/Screenshot+2023-10-31+083156.png) + +Example Code + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/frequently-asked-questions.mdx b/content/resources/frequently-asked-questions.mdx new file mode 100644 index 0000000..7fad932 --- /dev/null +++ b/content/resources/frequently-asked-questions.mdx @@ -0,0 +1,66 @@ +--- +title: "Frequently Asked Questions" +date: "2023-12-01" +categories: ["Getting Started"] +tags: [] +excerpt: "Have an enquiry about the Rover, Code Editor or Simulator? Here are some of our most commonly asked questions: Micromelon Rover:Can it flip?The Micromelon Rover can drive on both sides, just be careful to invert your controls! The orientation of the" +featuredImage: "/images/resources/frequently-asked-questions.jpeg" +--- + +Have an enquiry about the Rover, Code Editor or Simulator? Here are some of our most commonly asked questions: + +--- + +## **Micromelon Rover:** + +**Can it flip?** + +The Micromelon Rover can drive on both sides, just be careful to invert your controls! The orientation of the Rover can be checked in the code editor with the isFlipped() boolean or viewed in the sensor view. See more about the Gyroscope [here](https://micromelon.com.au/resources/gyroscope). + +**What sensors does it have?** + +The Rover has 5 main sensors: Colour, Infrared, Ultrasonic, Gyroscope and Accelerometer. More details can be found at [Rover Sensors](https://micromelon.com.au/rover-sensors). + +**Can I add extra sensors?** + +Absolutely! Sensors can be added using the UART expansion header. See the guide on [How to use UART](https://micromelon.com.au/resources/getting-started-the-micromelon-rover-uart) and [How to use 2iC](https://micromelon.com.au/resources/how-to-use-i2c). + +**What are the ports at the back?** + +Those are for connecting servo motors! See the guide [here](https://micromelon.com.au/resources/getting-started-with-servo-motors). + +**Where can I find 3D printed parts?** + +You can buy parts directly from our [Store](https://micromelon.com.au/spare-parts-attachments-store) or print your own from our [Printables](https://www.printables.com/social/326386-micromelon-robotics/models) link. + +**How do I design my own parts?** + +See the guide on [How to Design a Rover Attachment](/resources/guide-how-to-design-a-rover-attachment). + +## Code Editor: + +**How do I get started?** + +Follow our helpful [Getting Started](https://micromelon.com.au/resources/getting-started-with-the-micromelon-rover) guide on writing your first line of code and connecting to the Micromelon Rover. From there, you can find many activities and challenges to try on the [Activity Resources](https://micromelon.com.au/resources/category/Activities) page. + +**Can I import other python libraries?** + +To use and import python libraries, please use the [Micromelon Python Module](https://pypi.org/project/micromelon/). This can be used through [Pycharm](https://micromelon.com.au/resources/install-guide-pycharm) or [Visual Studio Code](https://micromelon.com.au/resources/install-guide-vs-code). Get started [here](https://micromelon.com.au/resources/getting-started-with-the-python-module). + +**How do I save?** + +The code editor auto saves all of your work locally and to your account, so no need to worry about losing code! + +## Simulator: + +**Can I make my own worlds?** + +No, however you can customize some activities like the maze. You can do this by generating a new seed with custom shapes and sizes. A valid Simulator License is required for this. + +**How do I connect to the Code editor?** + +Simply type 9000 into the Rover ID box and click go! Make sure you disconnect from any rover you are connected to. + +--- + +Have another question? Need more info? Check out our [Resources](https://micromelon.com.au/resources) page for a wide range of information, activities and guides. Otherwise, we’d love to [hear from you](https://micromelon.com.au/contact)! diff --git a/content/resources/getting-started-the-micromelon-rover-uart.mdx b/content/resources/getting-started-the-micromelon-rover-uart.mdx new file mode 100644 index 0000000..c1f4e52 --- /dev/null +++ b/content/resources/getting-started-the-micromelon-rover-uart.mdx @@ -0,0 +1,80 @@ +--- +title: "How to Use UART " +date: "2024-12-12" +categories: ["Guides"] +tags: ["Advanced", "Python"] +excerpt: "UART (universal asynchronous receiver transmitter) is a hardware communication protocol between two devices. The Micromelon Rover features an expansion header that can be used to connect external devices, such as an Arduino or an IR sensor. This guid" +featuredImage: "/images/resources/getting-started-the-micromelon-rover-uart.png" +--- + +UART (universal asynchronous receiver transmitter) is a hardware communication protocol between two devices. The Micromelon Rover features an expansion header that can be used to connect external devices, such as an Arduino or an IR sensor. + +This guide will outline how the UART protocol works, how it is implemented in the Rover and how to connect a device to the Rover using UART. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/64756649-f15b-40bb-87a6-cb112972f4df/expansion.jpg) + +## What is UART? + +The UART communication protocol is used to transmit data packets over two wires. It is useful as it allows serial data to be transmitted from one device to another. The fact that UART is asynchronous means that no clock is needed to send data. All that is required is for the transmit pin of one device to be connected to the receive pin of another. + +Since there is no clock, the transmitter and receiver must agree on a predetermined transmission rate called a Baud Rate. UART also has a standard packet structure, so the receiving device knows when to read the bits. This structure is as per the packet structure table below: + + Table: UART packet strcture + + Start Bit + Data Frame + Parity Bit + Stop Bits + + 1 bit + 5 to 9 data bits + 0 to 1 partiy bits + 1 to 2 stop bits + +The **start bit** is held high until data is ready to be sent and then set low. This then tells the receiving UART to begin reading the transmission line. The **data frame** contains the actual data and can be anywhere from 5 to 9 bits longer, depending on whether the parity bit is used. The **parity bit** is used to verify the data. It does so by counting the number of bits with a 1 and setting the parity bit to a 0 if the total is odd or 1 if it is even. This ensures that no bits have been changed in the data transfer. The **stop bit** signals the end of a package by pulling the data transmutation line to a high voltage. The receiver then stops reading the transmission line. + +## Hardware Setup + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/9ee48996-0046-4e82-8d3d-eadb88f57007/Image+from+iOS.jpg) + +Connecting two devices through the UART protocol requires two wires. This allows data to both be received and transmitted by both devices. Each device's RX (receive) pin must be connected to the other's TX (transmit) pin. Additionally, a shared ground is needed between both devices. + +The UART pins can be found in the expansion header that sits below the LCD screen on the Rover. The 3.3V and GND pins will also be required to power the device communicating with the Rover. Jumper wires can be used to achieve this. Example guides on how this can be done can be found in the software interfacing section. + +It is important to note that the rover power switch should be in the on position when the other device is powered on. Not doing so may cause the Rover to be back powered, even if the 3.3V and GND pins are not connected. + +## Rover UART Packets + +The Micromelon Rover follows a particular format for the UART data. This format allows commands to be sent to the Rover from an external device over UART. Most languages will have a function that will handle the sending of the start bits, partly bits and stop bits, so all that needs to be given is the data frame. This data structure is shown in the table below: + + Table: UART packet data structure for the Micromelon Rover + + Start Byte + Operation Byte (Read/Write) + Register Byte + Data Length Byte + Data Byte + + Always 0x05 + 0x00 to read, 0x01 to write + An enum that corresponds to a command + The number of bytes of data + Data related to the command + +The **start byte** is always 0x05, which tells the Rover's UART to begin reading the transmission line. The **operation byte** (either 0x00 or 0x01) is the set based on whether the external device is going to be reading data (0x00) from the Rover or sending commands (0x01) by writing data. The **register byte **is a value that corresponds to the command that is being sent to the Rover. The information associated with this command is stored in the **data byte**, with the number of bytes in the data stored in the **data length byte**. + +## Software Interfacing + +The final step in sending UART packets to the Rover is to write a program to initialise the connection, create packets and then send them. How to implement this will depend on what secondary device is being used. Still, generally, this implementation will be in either Python or C++. + +For a Python implementation, refer to the Open MV UART guide. + +For a C++ and Arduinio implementation, refer to the Arduinio UART guide. + + [ + Getting Started with Open MV and the Micromelon Rover + ](getting-started-with-open-mv-and-the-micromelon-rover) + + [ + Getting Started with Arduino and the Micromelon Rover + ](xb3xasp6iz9s5gwqqo5anvcd0lwd1l) diff --git a/content/resources/getting-started-with-open-mv-and-the-micromelon-rover.mdx b/content/resources/getting-started-with-open-mv-and-the-micromelon-rover.mdx new file mode 100644 index 0000000..311c236 --- /dev/null +++ b/content/resources/getting-started-with-open-mv-and-the-micromelon-rover.mdx @@ -0,0 +1,370 @@ +--- +title: "How to Connect and Control the Micromelon Rover with OpenMV" +date: "2024-12-11" +categories: ["Guides"] +tags: [] +excerpt: "The Micromelon Rover comes with an expansion header that allows for the connection of various additional devices. In this guide, we will show you how to connect an OpenMV and use it to control the Rover via the UART. Our goal is to have the Rover det" +featuredImage: "/images/resources/getting-started-with-open-mv-and-the-micromelon-rover.png" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/64f48cfe-3659-4df2-bc52-a6fd7955c5ec/Untitled_2023-Oct-27_12-29-29AM-000_CustomizedView6839643846_png.png) + +The Micromelon Rover comes with an expansion header that allows for the connection of various additional devices. In this guide, we will show you how to connect an OpenMV and use it to control the Rover via the UART. Our goal is to have the Rover detect objects using the OpenMV and drive towards them. + +If you're not familiar with UART, please refer to the “How to use UART” guide: + + [ + How to use UART + ](getting-started-the-micromelon-rover-uart) + +## Hardware Setup + +For the hardware setup, you will need to connect the Rover’s RX and TX pins to the OpenMV. You will also need to connect the 3.3V and GND pins to power the device. You can find the Rover’s header pinout and an example wiring diagram below: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/d8d56175-6268-4994-926b-ea7a29a7304e/Rover+pinout.png) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/623ac677-84bf-45f7-87c0-0d81ab832a00/OpenMV2_bb.png) + +To attach the OpenMV to the rover, head over to Printables or Thingiverse, and download the OpenMV clip for the rover. To assemble, simply use 2 M3 (8 - 10mm), and screw the OpenMV onto the clip. Then, click the clip onto the front of the rover. + + [ + Printables: OpenMV Clip + ](https://www.printables.com/model/639389-micromelon-openmv-attachment) + + [ + Thingiverse: OpenMV Clip + ](https://www.thingiverse.com/thing:6284234) + +## Rover UART Initialisation + +``` +`When programming the OpenMV, we recommend using the OpenMV IDE. It has built-in camera calibration functionality and makes it easy to flash the OpenMV. Since the OpenMV is programmed using MicroPython, you can store all the code for this project in a Python file inside the IDE. The MicroPython documentation provides a good overview of many of the libraries that will be used. + +Whenever you're working with OpenMV Python files, the code has three key elements. The first step is to import any necessary libraries, constants, and global variables. By default, the sensor, image, and time libraries will be imported. You will also need to import the pyb library, which gives you the ability to use specific device functionality, such as sending UART packets.` +``` + +``` +import sensor, image, time +from pyb import UART + +roverSerial = UART(3, 115200, timeout_char=1000) + +``` + +The next step is to set up the Rover to receive UART packets by setting it to "Expansion Mode." To do this, you will need to send a UART data packet in the following format: + + Start Byte + Operation Byte (Read/Write) + Register Byte + Data Length Byte + Data + + 0x55 + 0x01 (Writing) + 26 + 1 + 1 (Bluetooth Mode) + +To make it easier to send future Rover commands, you should create packet building and sending functions. This way, you can call the appropriate command in the main loop. + +``` +def build_and_send_packet(operation, command, data=None): + if data is None: + data = [] + + packet = [0x55, operation, command, len(data)] + packet.extend(data) + return packet + +``` + +This can then be used to arm the Rover: + +``` +def arm_rover(state): + arm_packet = build_and_send_packet(1, 26, [state]) + roverSerial.write(arm_packet) + time.sleep(0.25) + +``` + +Uploading this code to the Arduino should cause the Rover to enter the correct mode. You will know it worked if the Rover's LCD reads "Expansion Mode" where the bot ID used to be. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/8bf8f587-4ec9-4865-86d9-13a24c816c20/PXL_20230116_053413066.jpeg) + +## **OpenMV Setup** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/c44f6292-77b1-4a60-bb24-9f95839f8592/PXL_20230116_065526008.jpg) + +Now that the Rover is ready to receive commands over UART, let's set up the OpenMV. When mounting the OpenMV for object tracking, a slight downward angle is useful. You can use the Micromelon 3D printed mount for this purpose. + +If the OpenMV is positioned upside down, then the image should be flipped accordingly: + +``` +sensor.set_vflip(True) +sensor.set_hmirror(True) + +``` + +You will also need to define the clock to ensure that each snapshot taken can be cycled through. + +``` +clock = time.clock() # define the clock + +while(True): + click.tick() + img = sensor.snapshot() + +``` + +Running the current code should enable the Rover’s UART expansion header and show the camera’s output inside the OpenMV IDE. + +``` +import sensor, image, time +from pyb import UART + +roverSerial = UART(3, 115200, timeout_char=1000) + +def build_and_send_packet(operation, command, data=None): + if data is None: + data = [] + + packet = [0x55, operation, command, len(data)] + packet.extend(data) + return packet + +def arm_rover(state): + arm_packet = build_and_send_packet(1, 26, [state]) + roverSerial.write(bytearray(arm_packet)) + time.sleep(0.25) + +time.sleep(0.5) + +arm_rover(True) + +sensor.reset() +sensor.set_pixformat(sensor.RGB565) +sensor.set_framesize(sensor.QVGA) +sensor.skip_frames(time = 2000) +sensor.set_vflip(True) +sensor.set_hmirror(True) + +clock = time.clock() # define the clock + +while(True): + clock.tick() + img = sensor.snapshot() + print(clock.fps()) + +``` + +## Sending Rover Commands + +Once the Rover is in expansion header mode, you can send commands to it. + +One of the most useful commands to know how to send to the Rover is the move motors command. Similar to the expansion mode command, the motor movement packet is constructed as follows: + + Start Byte + Operation Byte (Read/Write) + Register Byte + Data Length Byte + Data + + 0x05 + 0x01 (Writing) + 0 + 2 + Left speed, right speed + +Using this, we can send a motor movement command to the rover using the packet build and send function we made earlier. For this example, we will assume that we want to give in a speed from -30 to 30. Note that the speed needs to be scaled and then encoded as a signed binary number before stored in a packet and sent over UART. + +``` +def write_motors(leftSpeed, rightSpeed): + lSpeed = int(leftSpeed*(127/30)) + rSpeed = int(rightSpeed*(127/30)) + + # 127 = full speed + # 0 = 0 + # 255 = full backwards + + if (lSpeed `< 0): + lSpeed -= 254 + + if (rSpeed < 0): + rSpeed -= 254 + + packet = buildAndSendPacket(1, 0, [lSpeed, rSpeed]) + uart.write(bytearray(packet)) + time.sleep(0.1) + +``` + +## Object Tracking + +Once we have set the threshold, we can proceed with tracking objects of this color using OpenMV's built-in blob detection. This process involves multiple steps and is executed in the main loop. Here's an overview of the steps: + +Next, adjust the thresholds until the tracked color is clearly defined in the binary image. Copy and store the LAB Threshold values in a variable for use when the Rover is armed. Here is an example of these values: + +``` +threshold = (26, 55, -73, 14, -40, 15) + +``` + +Using this threshold, we can then track objects of this colour using OpenMV’s built in blob detection. This is a multi step process which is executed in the main loop. + +- Take a camera snapshot. + +- Apply thresholding to identify all the blobs that match the defined color. + +- Since the largest blob is likely the object being tracked, save its position + +- These coordinates can then be used to adjust the Rover based on the object’s position in the snapshot. + +To initialise the camera, the following code can be used. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/baf41de2-6499-41e1-a6d4-11a5529973d6/Screenshot+2023-01-16+at+7.07.30+pm.png) + +``` +sensor.reset() # Reset and initialise the sensor +sensor.set_pixformat(sensor.RGB565) # Set the pixel format to RGB565 or GRAYSCALE +sensor.set_framesize(sensor.QVGA) # QVGA is 320x240 +sensor.set_windowing((framew, frameh)) # Window size set to 240x240 +sensor.skip_frames(time = 2000) # Letting the camer adjust +sensor.set_vflip(True) + +``` + +This can then be combined with the following object detection code in the main loop. + +``` +while(True): + + clock.tick() + img = sensor.snapshot() + + blobs = img.find_blobs([thresholdDucks], area_threshold = 1, merge = True) + blob_area = 0 + + for blob in blobs: + + if blob.area() >` blob_area: + + blob_area = blob.area() + img.draw_rectangle(blob.rect(), color = (0, 255, 0)) + img.draw_cross(blob.cx(), blob.cy(), color = (0, 255, 0)) + blob_rel_X_pos = framew/2 - blob.cx() + blob_rel_Y_pos = frameh/2 - blob.cy() + +``` + +## Overall Code + +Here's a cohesive code snippet that combines the initialisation and object detection in the main loop: + +``` +import sensor, image, time, pyb, math +from pyb import UART, LED + +# LED settings (1: red, 2: green, 3: blue, 4: IR) + +red_led = pyb.LED(1) +green_led = pyb.LED(2) +blue_led = pyb.LED(3) +ir_leds = pyb.LED(4) +output_pin = pyb.Pin("P0", pyb.Pin.OUT_PP) + +red_led.off() + +uart = UART(3, 115200, timeout_char = 1000) + +framew = 240 +frameh = 240 +motor_speed = 10 + +sensor.reset() # Reset and initialise the sensor +sensor.set_pixformat(sensor.RGB565) # Set the pixel format to RGB565 or GRAYSCALE +sensor.set_framesize(sensor.QVGA) # QVGA is 320x240 +sensor.set_windowing((framew, frameh)) # Window size set to 240x240 +sensor.skip_frames(time = 2000) # Letting the camer adjust +sensor.set_vflip(True) + +# Defining the mix/max LAB values for the blobs - trying to track an orange cube in this scenario +thredholdSam = (9, 40, -11, 26, -23, 43) + +# Rover interaction settings + +# Useful functions for communicating with the rover + +# Packet is in the format: +# - Start Byte (always 0x55) +# - Operation (0x00 = Read, 0x01 = Write) +# - Register (0 is the register of the Motors) +# - Data length (how many bytes of data) +# - Data (respective to the data length) + +def build_and_send_packet(opCode, opType, data=None): + if data is None: + data = [] + packet = [0x55, opCode, opType, len(data)] + packet.extend(data) # Extend because we do not know the data length + return packet + +# Takes motor speeds between -30 and 30 and writes them to the robot +def write_motors(leftSpeed, rightSpeed): + lSpeed = int(leftSpeed*(127/30)) + rSpeed = int(rightSpeed*(127/30)) + + # 127 = full speed + # 0 = 0 + # 255 = full backwards + + if (lSpeed `< 0): + lSpeed -= 254 + + if (rSpeed < 0): + rSpeed -= 254 + + packet = buildAndSendPacket(1, 0, [lSpeed, rSpeed]) + uart.write(bytearray(packet)) + time.sleep(0.1) + +def arm_robot(state): + packet = buildAndSendPacket(1, 26, [state]) + uart.write(bytearray(packet)) + time.sleep(0.25) + +def turn_degrees + +clock = time.clock() +print("Arming") +time.sleep(2) # Wait for the rover to start up + +arm_robot(True) # Arming package + +while(True): + + clock.tick() + img = sensor.snapshot() + + blobs = img.find_blobs([thresholdDucks], area_threshold = 1, merge = True) + blob_area = 0 + + for blob in blobs: + + if blob.area() >` blob_area: + + # Purpose of this is to find the largest blob. + # If the blob was larger than the last one then we overwrite the area and + # consequently also overwrite the location of the blob (i.e. how far the rover has to steer) + # If the blob is not bigger, then we ignore it as it must not be the object which we are + # looking to track + + blob_area = blob.area() + img.draw_rectangle(blob.rect(), color = (0, 255, 0)) + img.draw_cross(blob.cx(), blob.cy(), color = (0, 255, 0)) + blob_rel_X_pos = framew/2 - blob.cx() + blob_rel_Y_pos = frameh/2 - blob.cy() + +``` + +Once we have successfully tracked the object's position, the next step is to convert the object coordinates into motor movement commands. There are multiple algorithms to explore for this purpose. Experimenting with different approaches will help determine the most suitable one for your specific requirements. diff --git a/content/resources/getting-started-with-proportional-controls.mdx b/content/resources/getting-started-with-proportional-controls.mdx new file mode 100644 index 0000000..178b46a --- /dev/null +++ b/content/resources/getting-started-with-proportional-controls.mdx @@ -0,0 +1,155 @@ +--- +title: "Getting Started With Proportional Control On A Micromelon Rover" +date: "2022-11-16" +categories: ["All"] +tags: ["Guides"] +excerpt: "Learn about proportional control." +featuredImage: "/images/resources/getting-started-with-proportional-controls.png" +--- + +Have you ever wondered how automatic sprinklers work? How autopilot on a plane works? How cars can automatically keep their speed using cruise control? These robots or systems are controlled by something called a “control system”. + +Imagine you have a beautiful garden bed with different vegetables you’re trying to grow. You could use a proportional controller for a sprinkler system to ensure that the plants are getting exactly as much water as they need all year long. It’ll even handle rainy or dry seasons just fine. How would that work? + +Proportional control means that you are controlling *something *in relation to *something.* In this case, we would want to control moisture in the soil in relation to the water needs of our plant. We could even use the exact same controller for two different vegetable plants needing completely different amounts of water by scaling the exact same system up or down. + +Okay, so control systems sound pretty cool, how does something like that actually work? + +Let’s say we have our garden installed with a sprinkler system. The sprinkler system is our **output **and the thing we are controlling is the amount of water they put into our soil. + +We need something called an **input**. The most obvious here is likely a moisture sensor in the soil near the roots of our plant. Let’s suppose this device tells us exactly how much water is in the soil as an input into our control system. + +We also have something called a “**goal**” or a “**target**”. This is the outcome we are trying to achieve and the result we are constantly striving for. In this case that’s how much water our plant needs. + +All a proportional controller does is increase or decrease our output (water coming out of our sprinklers) proportional to how far off of our goal we are.(how thirsty or drowned our plants are at any given time based on the moisture sensor reading) + +You could in this example consider the difference in moisture from the ground to what the plant needs to be our “**error**”, and one more piece of our control system recipe is our **proportional gain**, commonly denoted as “Kp”. This is a simple multiplier that gets applied to our entire system, so that we can apply the same control system on a thirstier plant like cucumber with a Kp of something like 2 (meaning we double the water outputs) and reduce the water outputs with a kp of 0.5 if we are growing a cactus (meaning we halve the water outputs) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/0d6fe628-d6de-4fbe-830c-3765d268fdc8/image6.png) + +Control systems are so popular because this will deal with changes in circumstances and automates a lot of the work that would go into managing this garden. Did it rain last night? Moisture sensor will give the input that we have a lot of water in the soil, and will appropriately limit or turn off the sprinkler system because it has recognised it already has plenty of water. Has it been a particularly hot day? Moisture sensor will let the system know the ground is drier than usual and the sprinklers can be programmed to stay on for longer, all of which can be scaled for different plants using our Kp values for different water requirements. +Less people would be required to manage a larger garden if a control system can ensure people don’t have to spend time worrying about these things. + +It is this incredible versatility of the control system setup that allows us to use it in many applications from garden beds to micromelon robots. For our robot we could vary our speed based on sensor inputs. + +## **Recap of Control System Components:** + +**The goal** which is the target + +**The Inputs **which is all the information the control loop is given. (e.g. soil moisture, car speed, plane altitude, etc.) + +**The output **which is the result of the changes your control system made, and the thing you are trying to get close to your goal, or increase towards your goal. (e.g. time on for sprinklers, more gas for car, turning up the plane throttle, etc.) + +**An error**, which is a measure of how far away your system currently is from your goal or desired behaviour. + +**Gain**, usually simply a value denoted as “K” or in the context of proportional control “Kp” which scales how drastically your system reacts to your error. + +## **Control System Elements:** + +A classical example of a control system is the cruise control in a car. Let’s dive into what some of the previous terminology would look like in the context of cruise control as another example: + +**Goal: ** + +In cruise control, your goal is for the car to remain at the speed you have specified. Let’s make our goal a speed of 80km/h. + +However, there are many things that will disrupt this speed. Friction of the road, changing air resistance due to wind/car speed, etc. There is too much going on to easily model this car using only physics. + +**Error:** + +Let’s say the car drops to a speed of 75km/h due to aforementioned effects. The control system first calculates an error based on its inputs, which in this case would be the speedometer telling the control system the current speed of 75km/h. It could in this case simply compute 80-75km/h means that we have an error of 5km/h and our goal becomes to make this error as small as possible. The obvious answer here is to accelerate the car, but the question becomes: How much acceleration do we need? + +**Gain (Kp):** + +This is where we can use our Kp value to define exactly how drastically our system should respond to this error. A Kp value that is too high will result in the cruise controller to add an unreasonable amount of gas usage, meaning we will almost certainly greatly overshoot our goal of 80km/h, at which point we suddenly need to use the brakes to get back to our goal, but with a Kp too high we will likely slow down too much because our responses are too drastic and it will take a while before we finally get to our goal. A Kp too small may not be suitable either. If the Kp increases the gas by too little, we may only be able to reach a speed of 77km/h because the system will not make a change that is great enough for us to reach 80km/h. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/091cbd21-8642-4a55-82ec-ace94f86c06b/image10.png) + +Figure 1: System response of a high Kp vs a low Kp + +## **Proportional Control Applications With a Micromelon Rover** + +By now we’ve seen an application with cruise control, but you could control almost any action the robot does based on any of the available inputs. You could vary the speed of the rover’s wheels based on its colour sensors, ultrasonic sensors, gyro sensor, etc. You could even combine multiple inputs and have them control one or multiple outputs. +Let’s do a very simple example first of changing speed based on ultrasonic sensor distance. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/85b26497-8a13-440c-8963-e2ec8ccd5d74/image1.png) + +Figure 2: Simple proportional control example + +This very small snippet of code essentially behaves like a proportional controller, and is likely the most simple one you can make. + +**Input and Output: **Your input is the ultrasonic sensor distance value that the rover currently sees. Our output is the rover’s wheel speed. + +**Goal:** Match the rover’s speed to the live ultrasonic sensor distance + +**Error: **Our error is less obvious. If our rover is 10cm away from a wall, and we move straight towards it at 10cm/s, that means if we move forwards for 0.1 seconds our ultrasonic distance will read 9. Our error is that we used to be moving at 10cm/s, but our input tells us that now to achieve our goal of matching the speed and the distance, our error is 1cm/s (10cm/s - 9cm distance) and the system dynamically adjusts for this instantly by just setting the outputs (motor speed) to our ultrasonic distance achieving our goal very efficiently. + +**Kp: **This program does not have a Kp, so it can be thought of as 1 as we are not scaling our speed based on our distance in this example just yet. If we wanted to move at half the speed of our ultrasonic sensor, then instead of simply inserting the ultrasonic sensor distance, we could do 0.5 * ultrasonic distance, meaning our Kp is 0.5. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a31d099a-14df-48cb-b0ea-3780e8bb46bf/image15.png) + +Figure 3: Example showing implementation of Kp = 0.5 + +This is also largely because we have changed our goal along with our Kp value. The goal is to now move at half of our sensor distance. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a9851616-6064-4690-a08e-b53edff81f57/image7.png) + +Figure 4: Proportional control example + +This is a very simplistic and not very intelligent example.However, let’s now generalise our program so that we can easily change our goal and stop a certain distance away from our goal. The Micromelon IDE has a code example of a PID controller (in the advanced section) which is a much more complex version of a Proportional controller. + +The proportional version does not control the rover as smoothly as the more complex PID example, but it is a nice demonstration of the things we have discussed so far. +Proportional control is used in a PID controller to dictate in this case how much speed is required, whereas the integral (I) and derivative (D) terms are to prevent the system from overreacting to an error spike or overshooting the goal. + +This example also shows a lot more intelligent defensive programming. This means that it accounts for situations where our controller values may get far outside of what we need and it’s good practice to think critically about the ways your system may spin out of control. + +## **Let’s Break It Down:** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/e472ea8a-4ee5-440d-9ebf-9f96b638c7c2/image3.png) + +- For these first two blocks we can define how far away from objects we’d like to stop, and what our Kp gain value is. Experiment with different Kp values and observe what happens! (e.g. 0.1 and 10) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/0e751959-3f3b-447b-aa3a-ab01b708a50f/image5.png) + +- We set up an infinite while true loop so that the code goes on forever until stopped by the user. (Note: It is technically not great practice to have an infinite while loop, but for the sake of this example it will do) The first thing we need to do at the start of our loop is receive the data from our sensors and define that as our distance reading called “dist”. Based on this distance, we can find out how large our error is by subtracting it off our current distance. (e.g. if our goal is 10 cm and our sensor says we are 23 cm away from the wall, our dist is 23 and error is 23-10=13) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a0a9a571-6eb8-48d0-a431-45c2668c1c8d/image13.png) + +- This is some defensive programming. We want our difference values to fall between the numbers 0 and 30, whereas the Ultrasonic Sensor can produce values from 0 - 255. We just want to ensure that values don’t spiral out of control and the robot tries to move at 100cm/s. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/97e755f8-4d09-4eed-b882-7a721efaa718/image8.png) + +- This is where we adjust our speed similar to our previous example. We set our motor speed to be our error between our goal and current sensor reading (the 13 value from before) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/bcbecffd-f59c-414d-95d2-74b0876784aa/image11.png) + +- If a high Kp value shoots up our speed value far above 30 or -30 again, that’s the top speed of our robot! That means we need to restrict the values. The program can do this automatically, but it’s better to have it in your code as defensive programming. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/9b0d134b-efd6-4fb8-afac-e0900a8365e5/image14.png) + +- Finally, we print the speed so that we can see it in our console, and we make the rover move at the speed we have calculated using our controller. + +## **Limitations of Proportional Control** + +Proportional controllers are only the beginning! They are quite simple in comparison to the many other types of controllers out there. Some control problems can’t be solved by proportional control, and most are simply more effective and efficient with more intelligent controllers. A car's cruise control or a plane’s autopilot will have much more complex systems in place to make a more effective and efficient solution. + +Proportional controllers unfortunately do have a tendency to overshoot their goal. Unless you are okay with getting to your goal very slowly, proportional control can only do so much. It’s a system that will get you to your destination, but it is quite bad at slowing down before it gets to its goal. + +Proportional controllers are also not very good at dealing with imperfect data or inaccurate sensor readings. The point of a PID controller (Proportional, Integral and Derivative) is that the integral and derivative terms dampen and smooth out errors so that your system does not overreact. It also means that if your sensor is inaccurate, it can average out the inaccuracies and hopefully arrive closer to the desired goal. + +For more precise applications you can sometimes encounter something called a persistent error. This means that while the error usually decreases slightly over time it has a really difficult time getting the error down effectively once it’s close to the target. I foreshadowed this when in my cruise control example reaching only 77km/h instead of 80. In this case it’s possible for a controller designed with a low gain to have the extra gas applied at 77km/h to be too low for the car to speed up. A persistent error of 3km/h might be okay in some situations, but with a better controller you could stay at near perfect 80km/h. + +## **Exercises Using Proportional Control:** + +While a lot of our exercises can be done without the use of a proportional controller, quite a few of them could be actually solved by such a system as a very reliable and dynamic solution. Here are just a few examples. + +**Balance Bot:** + +You can use a Proportional controller to balance on a seesaw. Your input is the accelerometer, your goal is to have 1g going downwards, and your error to minimise would be the difference between your accelerometer reading and 1g. See if you can adapt these concepts and try solving it for a more dynamic solution! + +**Driving School:** + +Did you know that the black road in this simulator activity is actually a slight gradient? The middle of the road is the darkest, and the outside of the road is lighter. You could use proportional control on the colour sensors to stay perfectly in the middle of the road! Your inputs are the left and right colour sensors, your goal is to make those two sensor values equal, and your error would be the difference between left and right sensor brightness. Try and stay in the middle of the road without touching the edges! + +**Line Following:** + +When a rover moves over a line, often only part of the sensor will cover the black line and part of it will still be on white. This means that while doing line following, the sensor outputs are more of a gradient than they adhere to a clear-cut threshold like the activity describes. You could use Proportional control with this gradient to make your line following much smoother. Your inputs would be the colour sensors, your error would be the difference between the left and right sensor to determine where the line is, and your goal is to minimise the difference between these two sensors. (minimise the error!) See if you can create a better line follower! diff --git a/content/resources/getting-started-with-servo-motors.mdx b/content/resources/getting-started-with-servo-motors.mdx new file mode 100644 index 0000000..dd7f0c7 --- /dev/null +++ b/content/resources/getting-started-with-servo-motors.mdx @@ -0,0 +1,215 @@ +--- +title: "Getting Started with Servo Motors and the Micromelon Rover" +date: "2022-08-03" +categories: ["All", "Getting Started"] +tags: ["Servo Motors", "Extension"] +excerpt: "Learn the basics of how to extend your rover with servo motors." +featuredImage: "/images/resources/getting-started-with-servo-motors.png" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1659567094500-HT33NXMCL4VB1UGYZ37Y/image10.png) + +Servo motors are a type of direct current (DC) motor which is a very common type of motor you can find in lots of electronics around your home. Servo motors are very good at making precise movements since they contain a built in controller which ensures the output speed is more reliable. The driving motors on the sides of the rover are freely spinning DC motors. This post will be a brief introduction to how servo motors work, what are the most common servo motors, where to buy them, and how to use them with the Micromelon Rover. + +## **What is a servo motor?** + +A servo motor works by using a controller to set the exact position or speed it needs to stay at. There is a small device (the control circuit) that takes an analog input and determines the motor’s position. These motors are more focused on giving you precision over speed/power, and are generally quite weak in terms of torque. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/b2c5d0f2-f845-4d05-9312-520ef94fe7b1/image3.png) + +Servo motors are useful for robotic arms, DVD player trays, cameras, as well as many other devices that need an accurate and/or gentle motor movement. +This kind of servo is called a positional rotation servo motor, and is by far the most common type of servo motor. You can set the exact amount of rotation for the motor in terms of degrees from -90 to 90, giving you 180 degrees of rotation. + +The other type of servo motor is called a Continuous Rotation Servo motor which can spin freely much like a regular DC motor. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/31ea95e1-f32a-4fb3-befa-a54a9ae2c04f/image7.png) + +Setting the speed of a regular DC motor is fairly challenging because you need extra components and circuits to do so. You can read more about these circuits called H-Bridges. A continuous rotation servo motor has all of this functionality built into it already, which is why it is used over a DC motor as it makes it significantly easier to use. + +## **Buying servo motors** + +There are many different stores to buy servo motors from. With electronic components it is always highly recommended to look into the supplier you are buying from to make sure you do not buy something of bad quality. We at Micromelon recommend you do your own research into reputable suppliers before purchasing equipment as prices and quality can vary significantly. Some examples of where these parts can be found are Core Electronics, Jaycar, RobotGear, Sparkfun, etc. Some servo motors are stronger than others so it's a good idea to get metal geared ones where you need a stronger, longer life motor and to prevent wasted components. + +You also have to be careful that the motor you are buying meets the electrical specifications of the rover. The rover servo connectors are 5V which fits within the specifications for most hobby servo motors, and can provide around 1A of current per motor. The most common hobby servo we recommend is the MG90S 9g servo motor with 180 degrees of rotation and the larger MC996R 55g servo motor with 120 degrees of rotation for when more torque is required. + +We’ve provided some product links below of motors we have tested and used with our Rovers. + +[https://www.jaycar.com.au/arduino-compatible-9g-micro-servo-motor/p/YM2758?pos=3&queryId=c2ebbc26559d7559d5f5e7caf8f29784&sort=relevance](https://www.jaycar.com.au/arduino-compatible-9g-micro-servo-motor/p/YM2758?pos=3&queryId=c2ebbc26559d7559d5f5e7caf8f29784&sort=relevance) + +[https://core-electronics.com.au/9g-micro-servo-1-6kg.html](https://core-electronics.com.au/9g-micro-servo-1-6kg.html) + +#### **A note about servo ratings** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/443d3098-2e2a-421a-913c-59c799fcd566/image6.jpg) + +The servos that we have suggested for light duty applications are called 9g servos. A 9g servo simply means that the motor itself weighs 9 grams. These motors typically give you something around 1.6kg*cm of torque. Which is to say they can lift a 1.6kg weight, at a distance of 1cm. The longer this distance, the weaker the output force will become. This relationship is inversely proportional, so as the distance from the motor doubles, the output force is halved. (E.g. at 2cm this motor will only lift up to 0.8kg of weight) This is usually the most important specification to consider when shopping for a motor as you want it to be able to comfortably supply enough force for your application. + +This specification is usually denoted as “stall torque” which means that the motor cannot physically lift or move anymore when that weight is on it. Exceeding the rated torque is never a good idea and can drastically reduce the lifespan of your motors. + +### **Connecting Servo Motors to the Rover** + +On the back of the Micromelon rovers there are two servo ports that you can servo plug motors into. Note that servo motors need to be plugged in the correct way around. The back of the rover has an icon that shows which way they should plug in. On most motors the red wire means power or +, the brown wire means ground or - and the yellow wire means signal or S. On the right is an example of something we’ve made with servo motors! + +## **Using Servo Motors in the Micromelon IDE** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/14aca424-96db-4356-b7ad-6479ca039cd3/block.png) + +To use a servo motor with the Micromelon IDE, you have to access the “Extension” section on the left of the user interface. (UI)It is here you can find all of the useful blocks that will interact with servo motors. + +These blocks allow you to set the position of servo motors in terms of degrees. The position you see when you enter a certain value for degrees will depend on the servo motor you are using. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/17965975-2fa8-466a-ace0-5dfe1c944e0a/dictionary.png) + +For using Python the relevant functions can all be found in the functions library for Servos. These all work the same way the blocks do outlined in the more detailed description below. + +#### **Blocks** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/95e38562-ed2e-4010-ad80-35ecc8647471/image8.png) + +#### Python + +``` +`Servos.setBoth(45, 30)` +``` + +#### Description + +This block allows us to set the exact position or speed of both the servos at the same time. Usually this is measured from the right horizontal test this out for your specific servo motor!. This block will only take inputs from -90 to 90, representing a range of servo motors with 180 degrees of freedom. It can go slightly higher than that from my testing, where -80 was closer to -90 in my experience, but generally it works out. + +You can use the exact same block for Continuous Rotation Servos, but they scale up in speed with the same input. This means 90 is maximum speed one way, and -90 is maximum speed the other way. The real speed produced depends on your specific servo motor. + +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/f07c3cef-db28-473b-80ca-c21e5fdcfca1/image1.png) + +``` +`Servos.left(30)` +``` + +This servo motor block works functionally the exact same as the block above it. It allows you to move only one servo motor in the scenario where two are plugged. You can use the drop down menu by clicking on it. You can input a number, or one of the data blocks. + +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/43eb04d8-0c88-457e-aaf6-1ebf250d49fc/image11.png) + +``` +`Servos.read()` +``` + +This block allows us to utilize what it knows about the servos position. This block gives the value of the servo positions in degrees, and allows you to substitute that value into other blocks. + +## **Wrapping Up** + +Now that we’re familiar with some of the key concepts behind servo motors, the blocks, and the code to use them. We’ve got a bunch of activities you can try and extend with servo motors now that you know how to use them! + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464675848-K9YEOYK65IWRFRX4QJ1R/blog+header+image+.png) + + ](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Robot Simulator](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +How to get started with the Micromelon Robot Simulator. + + [Read More →](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1626837419969-WBB4D85KQIXSOP750N5M/resized+banner+%281%29.png) + + ](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Micromelon Rover](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +Crash course on basic rover function, how and what to program and starter activities to attempt. + + [Read More →](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622691207784-0X6JV7RYRQXZAFRG712S/pisonescape.png) + + ](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + + [Activity: Prison Escape](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + +Learn branching and iteration using the colour sensors and motors. + + [Read More →](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) diff --git a/content/resources/getting-started-with-the-micromelon-rover.mdx b/content/resources/getting-started-with-the-micromelon-rover.mdx new file mode 100644 index 0000000..f48ef14 --- /dev/null +++ b/content/resources/getting-started-with-the-micromelon-rover.mdx @@ -0,0 +1,492 @@ +--- +title: "Getting Started With The Micromelon Rover" +date: "2021-06-09" +categories: ["All", "Getting Started"] +tags: [] +excerpt: "Crash course on basic rover function, how and what to program and starter activities to attempt." +featuredImage: "/images/resources/getting-started-with-the-micromelon-rover.png" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623216895394-6NCNWRI69K4YAGCJ52QF/rover+1.png) + +### The Micromelon Rover + +The Rover is a versatile tool for learning robotics and programming designed by the Micromelon team in Australia. It is tough, packed with sensors, and will run for hours. This post will cover the Rover’s basic functions, its included sensors and actuators, and how to program them. There is also a variety of detailed activities and robotics challenges you can do right out of the box. + +### Rover Basics + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623277733848-Z8MOV19PAOO4MWXH2R3A/charging-port-%26-power-switch.png) + +**Turning The Rover On & Off** + +The **ON/OFF Switch** is located at the back of the Rover. Use this switch to turn the Rover on. Once turned on, the Rover will beep, the LEDs will light up, and the **Rover Screen** will show a 4-digit number (the Bot ID) and the battery indicator. + +On a full charge each Rover should last around 5 hours of use. It is a good idea to charge your Rover before first use. + +**Charging The Rover** + +The Rover’s **Charging Port** is located next to the **ON/OFF Switch**. The Rover charging port is USB-C. + +**Charging Class Sets** + +School sets come with a 10 Rover charging dock. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623278172729-M396M80X2E9IDOJ29ZBB/charging+dock.png) + +Connect the Rovers to the charging dock with the USB-C cables. Plug the charging dock into any wall outlet. Any Rovers attached to the dock will begin charging. + +**Charging Individual Rovers** + +Inside Rover box there will be an included USB-C charging cable. Plug the cable into the charging port and connect it to the included power adapter. Other USB power adapters and computers will also work if they can provide sufficient power. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623394113835-9U3XW44E3IUBWF6PGFSS/individual+rover+charging.png) + +**Charging Tips** + +- While charging you can still connect to the Rover, however its motors will be disabled. + +- If Rovers are intermittently starting and stopping charging, you may be using an underpowered adapter. This issue should not occur with any power adapter shipped with Micromelon Rovers. + +### How To Program The Rover + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623280042416-ZTWSPKDEJ69T9WU7RDUN/laptop-looking-left.png) + +Each Rover has 5 different types of sensors, 2 motorised tracks, 8 RGB LEDs, a buzzer, 2 servo motor connectors and a UART/I2C expansion header. All of these are programmable with either the Micromelon Code Editor or the Micromelon Python Module. + +The Python module facilitates programming the Rover with any Python capable IDE. If this is your first time using Micromelon, we recommend you use the Code Editor. The Code Editor is the most accessible method of programming the Rover. To learn more about the Code Editor, continue reading below.[ ](/blog) + +**The Code Editor** + +The Code Editor is the programming environment developed by Micromelon for use with the Rover. Code that you’ve written in the Code Editor can be run on any Rover that you connect to. + +**Step 1: Download The Code Editor** + +**Step 2: Open The Code Editor & Create An Account** + +Once downloaded, install the Code Editor and open it. If you are using Micromelon in your school as a teacher or student, your accounts will be created by your school administrator. If you are using Micromelon outside of a school package, you can create a home account. You can also choose to use the Code Editor in offline mode, although some features require an account (particularly in the Micromelon Robot Simulator). + +**For School Users** + +If you are the school admin, you should have instructions on how to create accounts from Micromelon. If you aren’t the school admin, you can have the school admin create your account. + +**For Personal Users** + +Press the ‘Create Account’ button and fill in the details for your account. + +**Step 3: Turn on Bluetooth & Connect To The Rover** + +Now that your Code Editor is set up, you can connect to a Rover and begin coding. Make sure your device’s Bluetooth is turned on as Bluetooth is required to connect to a Rover. Once your Bluetooth is on, turn the Rover on. The 4 digit number on the Rover screen is the Bot ID. Enter the Bot ID into the Bot ID box in the code editor and press GO! + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623281070127-DFPNIIC3I5R8QJ61Z5RO/connect-diagram.png) + +Only one Code Editor can be connected to a Rover at a time. To disconnect a Rover from the Code Editor press the Unlink button or turn the Rover off. + +**Step 4: Code Editor 101** + +You’ve now connected the Rover and it’s time to start programming the Rover with the Code Editor. + +Block programming is done in the **Block Editor**. Drag in blocks from the **Block Catalogue**. Alternatively, you can write Python code in the **Text Editor**. You can find information on the Micromelon specific Python functions that are available to you in the **Function Dictionary**. Once you’ve written some code you can run it by pressing the **Run Code **button. The code will be executed by the Rover connected to your Code Editor. Any errors or print messages will appear in **The Console**. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623283923724-JUXV4WPAJC1CAPVAA5E6/annotated-software.png) + +### Writing Your First Line Of Code + +Now that we have the basic layout of the Code Editor and a connected Rover, we can begin coding. Let’s write a program to move the Rover forwards to become familiar writing and running code. + +**Editing Blocks** + +In the Code Editor, look over to the **Block Catalogue** and find the **Movement** category. Click this to expand the category. Find the **Move Forward 10 cm **block. Click and drag this code block over and place it into the Block Editor area. We want to attach this block to the orange Start Block. + +Note: Any blocks we want to run need to be attached to the orange Start block. Blocks not attached will not be run by the Rover. + +We’ve written our first line of code using blocks, now let’s edit some Python. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623885352558-F6LO95XOQHWD2PSYTYHS/dragging+in+blocks.gif) + +**Editing The Python** + +The Python in the Text Editor should have updated. Look to the Text Editor on the right, and you should see the code **Motors.moveDistance(10)** on the first line. This is the same piece of code we just created with our blocks, but now it is represented in Python. All of the changes we make to the blocks will translate to Python and vice versa. Let’s edit the Python now. + +The number 10 in the brackets is the number of centimetres the Rover will move. In Python we call this an argument. Let’s change this 10 to a 20. Our code will now make the Rover move 20cm instead of 10cm. Once we change this the Blocks will update to reflect the change. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623885719135-81X0S6G27MQAHJ2Z9KOV/seeing+change+to+code.gif) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623885881096-4EQ5TH2J8Y040GMZ0B25/running+the+code.gif) + +**Running Our Code** + +The only thing left to do now is run the code. Press the Run Code button in the top right. This will send our code to the Rover and it will move forward 20cm. Make sure you place the Rover somewhere with enough space, so that moving forward 20cm won’t cause it to crash when you run the code. + +If you need to stop a running Rover, you can click the ‘Stop’ button that replaces the ‘Run Code’ button in the Code Editor. You can also press one of the buttons on the Rover to stop it. + +### What Parts Of The Rover Are Programmable? + +As mentioned before, the Rover has 5 different types of sensors, 2 motorised tracks, 4 RGB LEDs, a buzzer, 2 servo motor connectors and a UART/I2C expansion header. All of these are programmable from the Code Editor. Let’s look at what each of these do. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623287645417-X58TP6L4C474GAFISS2Z/actuators.png) + +**Actuators** + +**Motorised Tracks** + +The motorised tracks allow you to move the Rover around. You have control over both tracks and can control direction and speed of motors. + +Blocks to program the motorised tracks are found in the **Movement **and** Advanced Movement** categories of the **Block Catalogue** in the Code Editor. + +**Buzzer & LEDs** + +Program the buzzer to play sounds and the LEDs to illuminate colours. These can be used to signal changes in robot behaviour or coordinated with motor movements to create music or dance. + +Blocks to control the LEDs and Buzzer are found in the **Lights/Sounds** category of the **Block Catalogue** in the Code Editor. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623287709549-1YC9P4567C7WO90V4FK7/sensors.png) + +**Sensors** + +The sensors will help you program your Rover to respond to its environment, including objects, surfaces, and the orientation of the Rover. + +Blocks to control all of the sensors discussed here can be found in the **Sensors **category of the **Block Catalogue** in the Code Editor. + +**Ultrasonic & IR Distance Sensors** + +The ultrasonic and IR distance sensors are located on the front and sides of the Rover. These allow you to check distance (in centimetres) of objects from the sensors. These sensors allow you to check if there are obstacles at the front and sides of the Rover and how far away the obstacles are. + +**Colour Sensors** + +There are three colour sensors located on the underside of the Rover. The colour sensors can help you determine the colour of the surface the sensors are driving over. + +**Accelerometer & Gyroscope** + +The accelerometer and gyroscope allow you to determine the Rover’s current orientation in space and changes in velocity as well as rotation. + +**Rover Sensor View** + +When planning the code you are going to write for the Rover, it is useful to be able to see what the Rover sees. When you are connected to the Rover in the Code Editor, you can click the Rover icon to the left of the Bot ID to open a live view of what every sensor is currently reading. This can be useful for calibrating your sensors and debugging your code. The sensor values can also be cycled through on the Rover screen using the buttons on the Rover. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1626819079805-T7NTHZD1ATLWSLYDYRH5/opening+sensor+view.gif) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623288207685-J21A7K3WS7FTP29WOMFM/expansion.png) + +**Expansion** + +The Rover has built in capabilities for attaching your own external attachments and electronics. + +Blocks to interface with the Servo and UART/I2C connectors are found in the **Expansion **category of the **Block Catalogue** in the Code Editor. + +### Ready To Begin Programming? Here Are Some Activities + +**Beginners** + +If this is your first time using Micromelon or you are still becoming familiar with how to control the Rover, here are some good starter activities. + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1677810765340-7T3INBWSMN3FZ3Z9I3OH/IMG_1856.jpg) + + ](/resources/activity-making-music-beginner) + + [Activity: Making Music (Beginner)](/resources/activity-making-music-beginner) + + [Read More →](/resources/activity-making-music-beginner) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1647211405463-81LPWC1CNA20PVUFOJFA/cargo+bot.png) + + ](/resources/cargo-bot) + + [Cargo Bot](/resources/cargo-bot) + +Don’t drop the cargo! + + [Read More →](/resources/cargo-bot) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1645597438165-KTLM6ETLCY694N7E59ZV/spike-drop.png) + + ](/resources/spike-drop) + + [Activity: Spike Drop](/resources/spike-drop) + +Simulator activity for learning ultrasonic, colour sensor and iteration. + + [Read More →](/resources/spike-drop) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1707816086925-3340QDPKLWEWZY20T5HC/maze.png) + + ](/resources/maze) + + [Activity: Maze](/resources/maze) + +Learn branching, iteration, algorithm design, and how to use the Rover’s motors, ultrasonic, colour, and IR sensors. + + [Read More →](/resources/maze) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622691702954-6USV39RNRH8PUVH36BCN/conversationbot.png) + + ](/resources/conversation-bot) + + [Activity: Conversation Bot](/resources/conversation-bot) + +Learn iteration, branching, and how to use the buzzer and LEDs. + + [Read More →](/resources/conversation-bot) + +**Intermediate** + +If you are starting to get the hang of things, try these intermediate activities. + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1679013197398-E8V6MYZ0B28OMGLH5SXT/program.jpg) + + ](/resources/activity-servo-gauge) + + [Activity: Servo Gauge](/resources/activity-servo-gauge) + + [Read More →](/resources/activity-servo-gauge) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1677810765340-7T3INBWSMN3FZ3Z9I3OH/IMG_1856.jpg) + + ](/resources/activity-making-music-intermediate) + + [Activity: Making Music (Intermediate)](/resources/activity-making-music-intermediate) + + [Read More →](/resources/activity-making-music-intermediate) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1648414114909-HF7ZKD58M1BW87U5OO03/binary+bot.png) + + ](/resources/binary-bot) + + [Activity: Binary Bot](/resources/binary-bot) + +Complete a simple exercise using only binary numbers! + + [Read More →](/resources/binary-bot) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/beb4daf2-a6ea-480b-a461-a8b8f77f4095/pen+attachment.png) + + ](/resources/rover-van-gogh) + + [Activity: Rover Van Gogh](/resources/rover-van-gogh) + +Get your art on with the pen attachment! + + [Read More →](/resources/rover-van-gogh) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1707815711988-951WQKFTKK1EOH49216G/line+follow.png) + + ](/resources/line-following) + + [Activity: Line Following](/resources/line-following) + +Learn the colour sensor and simple algorithm design while following the line. + + [Read More →](/resources/line-following) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/40a5024f-93a3-4d8d-8ade-505d96aa6977/Screenshot+2023-10-31+083156.png) + + ](/resources/windup-rover) + + [Activity: Wind-up Rover](/resources/windup-rover) + +Learn iteration, variables, maths, and how to use the Rover’s motors and accelerometer. + + [Read More →](/resources/windup-rover) + +**Advanced** + +Once you are comfortable with programming the Rover actuators and sensors, test yourself with these advanced activities. + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1677810765340-7T3INBWSMN3FZ3Z9I3OH/IMG_1856.jpg) + + ](/resources/activity-making-music-advanced) + + [Activity: Making Music (Advanced)](/resources/activity-making-music-advanced) + + [Read More →](/resources/activity-making-music-advanced) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1678160894853-587IRX3HY6N4T701GHY8/cover.jpg) + + ](/resources/activity-rover-theremin) + + [Activity: Rover Theremin](/resources/activity-rover-theremin) + + [Read More →](/resources/activity-rover-theremin) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1698372760236-1MFDW066112HEG5L6GBN/Attachment_Holding_Piece_2023-Oct-27_02-03-30AM-000_CustomizedView9264586628_png.png) + + ](/resources/getting-started-the-micromelon-rover-uart) + + [How to Use UART ](/resources/getting-started-the-micromelon-rover-uart) + + [Read More →](/resources/getting-started-the-micromelon-rover-uart) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1719456652868-A60EBBK9BOY7S6D987RW/IMG_3785.jpg) + + ](/resources/line-following-h433h-89p7d-capak-lpsxl) + + [Activity: Seed Planter](/resources/line-following-h433h-89p7d-capak-lpsxl) + + [Read More →](/resources/line-following-h433h-89p7d-capak-lpsxl) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1673240078055-UBVC2EKJV99G0ZCTBIHD/IMG_1578.jpg) + + ](/resources/activity-pingpong-attachment) + + [Activity: Ping-Pong Shooter](/resources/activity-pingpong-attachment) + + [Read More →](/resources/activity-pingpong-attachment) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1716518225046-XC8YN4EIX7ZRQOAOFVDB/IMG_3866.jpg) + + ](/resources/activity-forklift-attachment) + + [Activity: Forklift Attachment](/resources/activity-forklift-attachment) + + [Read More →](/resources/activity-forklift-attachment) + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464675848-K9YEOYK65IWRFRX4QJ1R/blog+header+image+.png) + + ](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Robot Simulator](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +How to get started with the Micromelon Robot Simulator. + + [Read More →](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1626837419969-WBB4D85KQIXSOP750N5M/resized+banner+%281%29.png) + + ](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Micromelon Rover](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +Crash course on basic rover function, how and what to program and starter activities to attempt. + + [Read More →](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622691207784-0X6JV7RYRQXZAFRG712S/pisonescape.png) + + ](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + + [Activity: Prison Escape](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + +Learn branching and iteration using the colour sensors and motors. + + [Read More →](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) diff --git a/content/resources/getting-started-with-the-python-module.mdx b/content/resources/getting-started-with-the-python-module.mdx new file mode 100644 index 0000000..a81c5b5 --- /dev/null +++ b/content/resources/getting-started-with-the-python-module.mdx @@ -0,0 +1,479 @@ +--- +title: "Getting Setup with the Micromelon Python Module " +date: "2022-11-16" +categories: ["All", "Guides"] +tags: ["Python", "Guide"] +excerpt: "Learn how to start programming the Rover with Python!" +featuredImage: "/images/resources/getting-started-with-the-python-module.png" +--- + +The Micromelon python module has been designed to allow you to interface with the Micromelon Rover using any computer running the Python programming language. You don’t need to use the Micromelon IDE to program the Rover or the Robot Simulator. Python is a highly versatile programming language with thousands of open-source modules. These in conjunction with the Micromelon Rover open a new world of possibilities to you. + +## Requirements + +**Choosing an IDE** + +An integrated development environment (IDE) is a program that allows us to easily write and edit code. Different IDEs allow us to program in different programming languages. Python files can be made and edited in basically all IDEs, then run separately inside the terminal. There are several IDE choices which have tools for creating and running python code. For the purposes of this guide, we will discuss the two most popular Python IDEs: VS Code and Pycharm. + +You can find guides to setup VS Code [here](/resources/install-guide-vs-code)** **or PyCharm [here](/resources/install-guide-pycharm). These guides will take you through the process of installing the IDE and the Micromelon Python Module. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1660089656916-MBZ793I9KTHOH0Z5VK0V/vscode-cover-photo.png) + +#### **Guide: How To Install VS Code** + +[**READ MORE**](/resources/install-guide-vs-code) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1660089890313-3VFELOQ46QDSP569CAG0/pycharm-cover-photo.png) + +#### **Guide: How To Install PyCharm** + +[**READ MORE**](/resources/install-guide-pycharm) + +## Your First Program using the Micromelon Python Module + +The following section of the guide will outline how to use the Micromelon Module and some examples to get you started. If you want to read up on the module’s classes and functions, the documentation can be found at at: + +[https://micromelon-robotics.github.io/mm-pymodule/micromelon/index.html ](https://micromelon-robotics.github.io/mm-pymodule/micromelon/index.html) + +**Communicating With The Rover** + +The following code snippet shows how to import the Micromelon Module and how to get connected to your Rover. + +``` +from micromelon import * + +rc = RoverController() + +rc.connectBLE(1) #replace the number 1 with the number shown on your rover +rc.startRover() + +# Insert your rover command below this line +rc.stopRover() +rc.end() + +``` + +``` +`We will now breakdown the code line-by-line to help you understand what the functions and classes do.` +``` + +This line imports the Micromelon Module alongside all its functions and classes making them available for use in your code. + +``` +from micromelon import * + +``` + +This line initialises the RoverController object for later use. + +``` +rc = RoverController() + +``` + +Uses the RoverController object to connect to the Micromelon Rover over Bluetooth. Simply give it the four digit robot ID displayed on the LCD screen on your rover as a number. E.g. if your rover is displaying 0006, enter the number 6. + +``` +rc.connectBLE(1) #replace the number 1 with the number shown on your rover + +``` + +Puts the Rover into a running state in which it can receive and execute commands + +``` +rc.startRover() + +``` + +Stops the rover and puts the Rover into an idle state + +``` +rc.stopRover() + +``` + +Ends communication with the Rover. This is required to properly disconnect from the Rover. If this line is not included at the end of your program, you may need to turn the rover off and on again. If you still can’t connect to the Rover after restarting, you can use the “Micromelon Rescue Tool” built into the Micromelon IDE to recover it. + +``` +rc.end() + +``` + +**Using the Ultrasonic Sensor and Motors** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622690387509-PIOQ27MB1CAZPHTMJNKM/puppybot.png) + +#### Activity: Puppy Bot + +[**READ MORE**](/resources/puppy-bot) + +The following code snippet is an implementation of our “Puppy Bot” activity, which can be found [here](/resources/puppy-bot). This should help you to understand how to use conditional statements, the Ultrasonic sensor, and the motors. + +``` +from micromelon import * + +rc = RoverController() + +rc.connectBLE(1) +rc.startRover() + +while True: + if Ultrasonic.read() `< 20: + # Turn off motors + Motors.write(0) + elif Ultrasonic.read() < 50: + # Move forwards + Motors.write(30) + else: + # Slowly turn left + Motors.turn(-5) + +rc.stopRover() +rc.end() + +``` + +We will now break down the code to help you understand the functions and classes used. I will not cover the functions previously discussed in the “Communicating with the Rover” section, as this should always be standard: + +This line sets up a loop for the following code to run in such that it keeps going forever or until you manually stop it. + +``` +while True: + +``` + +This section reads the distance value from the Ultrasonic sensor and checks if an object is less than 20cm away. If this is true, the Rover will stop its motors by setting their speeds to zero. + +``` +if Ultrasonic.read() < 20: + # Turn off motors + Motors.write(0) + +``` + +If there was no object less than 20cm away from the Rover, it will re-read the distance from the Ultrasonic sensor and check if an object is less than 50cm away. If True, the Rover will move toward the object by setting it’s motor speeds to 30. + +``` +elif Ultrasonic.read() < 50: + # Move forwards + Motors.write(30) + +``` + +If no objects are within 20cm or 50cm of the Rover, it will rotate left at a rate of 5 degrees/s + +``` +else: + # Slowly turn left + Motors.turn(-5) + +``` + +**Using The Colour Sensor, Sounds and Display** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1647212932359-COOX3PZZOM19KIONJXYY/random+bug+bot+2.png) + +#### Activity: Random Bug Bot 2 + +[**READ MORE**](/resources/random-bug-bot-2) + +The following code snippet is an implementation of our “Random Bug Bot 2” activity, which can be found [here](/resources/random-bug-bot-2). This should help you understand how to use variables, the Colour sensor, maths, the display and the motors. + +``` +from micromelon import * + +rc = RoverController() + +rc.connectBLE(1) +rc.startRover() + +health = 20 +while True: + # Lifecycle Stage 1: Check for food + if Colour.readSensor(option=Colour.CS.BRIGHT, sensor=1) >` 80: + Sounds.play(Sounds.TUNES.UP) + Motors.write(0) + health += 3 + + # Lifecycle Stage 2: Move + right = Math.randint(-5, 5) + left = Math.randint(-5, 5) + Motors.write(left, right, 1) + + # Lifecycle Stage 3: Check Life + health -= 1 + if health `<= 0: + break + else: + Robot.display("Health: "+ str(health)) + +print("Goodbye Cruel World!!") + +rc.stopRover() +rc.end() + +``` + +We will now break down the code to help you understand the functions and classes. I will not cover the functions previously discussed in the “Communicating with the Rover” section, as this should always be standard: + +This sets up a variable in Python called “health” with a value of 20 + +``` +health = 20 + +``` + +This line sets up a loop for the following code to run in. + +``` +while True: + +``` + +This section reads the middle colour sensor’s brightness and checks if it is above 80. If this is true, the Rover will then play a tune, stop the motors, and add 3 to its current health. + +``` + # Lifecycle Stage 1: Check for food + if Colour.readSensor(option=Colour.CS.BRIGHT, sensor=1) >` 80: + Sounds.play(Sounds.TUNES.UP) + Motors.write(0) + health += 3 + +``` + +This section makes two variables, “right” and “left”, and assigns them two random integers between -5 and 5. These two variables are then used as the left and right motor speeds for the Rover over the next second. + +``` + # Lifecycle Stage 2: Move + right = Math.randint(-5, 5) + left = Math.randint(-5, 5) + Motors.write(left, right, 1) + +``` + +This section reduces the “health” by one and checks if the variable is less than or equal to zero. The program will break out of the loop if the health has fallen below one. Otherwise, the Rover will display the current health on the screen. + +``` + # Lifecycle Stage 3: Check Life + health -= 1 + if health <= 0: + break + else: + Robot.display("Health: "+ str(health)) + +``` + +Finally, if the Rover exits the loop, it will print “Goodbye cruel world!” to the terminal on your computer. + +``` +print("Goodbye Cruel World!!") + +``` + +**Interactive text controls using the Micromelon module** + +The following code snippet uses a Python function called “input”, which will prompt the user for an input using their keyboard. These prompts allow us to provide the rover with data as it is executing its program. These prompts will then be interpreted and run by the rover inside our code. In our next code snippet we will use the prompt command to answer questions about how far we want our rover to move. + +You can expand your code to add other functionality to the Rover based on a user’s commands from the input function. + +**Note: **If you are using VS Code, you can use the short cut “Ctrl + F5” to open the console window, then click **TERMINAL** to select the terminal pane. The terminal pane is where our prompts will be printed. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/ea639735-d4a0-4881-b0c1-77279cbc901a/vs+console+command.png) + +VS Code Terminal Window + +``` +from micromelon import * + +rc = RoverController() + +rc.connectBLE(1) +rc.startRover() + +while True: + cmd = input("Enter a command or 'quit' to exit: ") + if cmd == "forwards": + distance = input("How far forwards? ") + Motors.moveDistance(int(distance)) + elif cmd == "backwards": + distance = input("How far backwards? ") + Motors.moveDistance(-int(distance)) + elif cmd == "left": + angle = input("How far degrees? ") + Motors.turnDegrees(-int(angle)) + elif cmd == "right": + angle = input("How far degrees? ") + Motors.turnDegrees(int(angle)) + elif cmd == "quit": + break + else: + print("Unknown command: " + cmd) + +rc.stopRover() +rc.end() + +``` + +We will now break down the code to help you understand the functions and classes. I will not cover the functions previously discussed in the “Communicating with the Rover” section, as this should always be standard: + +This line sets up a loop for the following code to run in. + +``` +while True: + +``` + +This section of the code waits for a user to input a command into the terminal + +``` +cmd = input("Enter a command or 'quit' to exit: ") + +``` + +This section of the code compares the user entered command against several predefined commands. + +- On a ‘forwards’ command, the user is prompted again for a distance value to move. This will then be converted to an integer and passed to the moveDistance function. + +- On a ‘backwards command, the user is prompted again for a distance value to move. This will then be converted to an integer and passed to the moveDistance function. + +- On a ‘left command, the user is prompted again for an angle value to turn. This will then be converted to an integer and passed to the turnDegrees function + +- On a ‘right’ command, the user is prompted again for an angle value to turn. This will then be converted to an integer and passed to the turnDegrees function + +- On a ‘quit’ command, the program will exit, and the rover will be disconnected. + +- If the command cannot be matched, the command will be rejected and printed back to the user + +``` + if cmd == "forwards": + distance = input("How far forwards? ") + Motors.moveDistance(int(distance)) + elif cmd == "backwards": + distance = input("How far backwards? ") + Motors.moveDistance(-int(distance)) + elif cmd == "left": + angle = input("How far degrees? ") + Motors.turnDegrees(-int(angle)) + elif cmd == "right": + angle = input("How far degrees? ") + Motors.turnDegrees(int(angle)) + elif cmd == "quit": + break + else: + print("Unknown command: " + cmd) + +``` + +Now it’s time to try it out yourself! See what amazing things you can do with the combined power of Python and the Micromelon Rover. Why not try doing some of the other activities on our website yourself. + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464675848-K9YEOYK65IWRFRX4QJ1R/blog+header+image+.png) + + ](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Robot Simulator](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +How to get started with the Micromelon Robot Simulator. + + [Read More →](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1626837419969-WBB4D85KQIXSOP750N5M/resized+banner+%281%29.png) + + ](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Micromelon Rover](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +Crash course on basic rover function, how and what to program and starter activities to attempt. + + [Read More →](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622691207784-0X6JV7RYRQXZAFRG712S/pisonescape.png) + + ](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + + [Activity: Prison Escape](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + +Learn branching and iteration using the colour sensors and motors. + + [Read More →](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) diff --git a/content/resources/guide-how-to-design-a-rover-attachment.mdx b/content/resources/guide-how-to-design-a-rover-attachment.mdx new file mode 100644 index 0000000..12c726b --- /dev/null +++ b/content/resources/guide-how-to-design-a-rover-attachment.mdx @@ -0,0 +1,144 @@ +--- +title: "How to Design a Rover Attachment" +date: "2024-12-31" +categories: ["Guides"] +tags: [] +excerpt: "Rover attachments are a great way to extend the Rover’s capabilities with 3D printing. It’s a wonderful way to upgrade or customise your Rover to suit any project imaginable.Existing Attachments:Here at Micromelon, we’ve already gone ahead and made a" +featuredImage: "/images/resources/guide-how-to-design-a-rover-attachment.PNG" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/4fe598d0-675c-4388-9917-efa607b19b2b/Real.PNG) + +Rover attachments are a great way to extend the Rover’s capabilities with 3D printing. It’s a wonderful way to upgrade or customise your Rover to suit any project imaginable. + +## Existing Attachments: + +Here at Micromelon, we’ve already gone ahead and made a few attachments for you to use and take inspiration from. These attachments fit onto the mounting tabs on the rover body and utilise the sensors and servos to transform them into things such as diggers, tippers, or even add claws. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1670459457691-3B3IYWVM843KUSBT80KC/IMG_0822.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1670459457691-3B3IYWVM843KUSBT80KC/IMG_0822.jpg) + + Domino Layer + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1670459489012-5V916FT7IRKP2UJ8N1F4/Final.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1670459489012-5V916FT7IRKP2UJ8N1F4/Final.jpg) + + Claw + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1670459536849-QNX4UU3CPUD79X01BHE0/IMG_1131.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1670459536849-QNX4UU3CPUD79X01BHE0/IMG_1131.jpg) + + Roborave Line Follow + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1670459557140-1UCCIGLLSZ29MKLVD0FC/IMG_1117.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1670459557140-1UCCIGLLSZ29MKLVD0FC/IMG_1117.jpg) + + Ping-Pong Shooter + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1670459760596-XXWXEW3EU9NUZKZMPWIE/IMG_0655.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1670459760596-XXWXEW3EU9NUZKZMPWIE/IMG_0655.jpg) + + Tipper + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1670459787022-M1Q087W39227E6CLNRNX/IMG_0469.JPG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1670459787022-M1Q087W39227E6CLNRNX/IMG_0469.JPG) + + Whiteboard Marker Holder + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1670459862205-Z69RDNML6GL2RI89PQGX/IMG_0458.JPG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1670459862205-Z69RDNML6GL2RI89PQGX/IMG_0458.JPG) + + Seed Planter + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1670459457691-3B3IYWVM843KUSBT80KC/IMG_0822.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1670459489012-5V916FT7IRKP2UJ8N1F4/Final.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1670459536849-QNX4UU3CPUD79X01BHE0/IMG_1131.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1670459557140-1UCCIGLLSZ29MKLVD0FC/IMG_1117.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1670459760596-XXWXEW3EU9NUZKZMPWIE/IMG_0655.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1670459787022-M1Q087W39227E6CLNRNX/IMG_0469.JPG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1670459862205-Z69RDNML6GL2RI89PQGX/IMG_0458.JPG) + +For further information about our existing attachments, visit our page on rover expansions. + + [ + Rover Expansions & 3D Printing + ](/rover-expansion-3d-printing) + +## Constraints: + +It’s good to be aware of the constraints around what the rover can do before attempting to design the attachment. + +**Sensors:** + +For all your attachments, it’s helpful to use the existing sensors on the rover, like the ultrasonic sensor, for example. When using these sensors, the attachment must be made to not hinder their ability to operate (for example, ensuring the ultrasonic is not covered up). An attachment could be designed to hold an Arduino to serve as an expansion board for additional sensors. + +**Actuators and Power:** + +The rover has two servo ports at the back. This means you are limited to only using a maximum of two servos without further modifications. Additionally, there is a limit to the power the rover can output. When using a servo expander with I2C, the rover may find it difficult to power many actuators simultaneously. Also, the attachment must not be too heavy as the rover motors cannot handle a significant weight increase without a decrease in speed. + +## How to get started: + +Before starting, it is a good idea to have some practice in 3D designing software such as Fusion 360, as some of these designs can get complex. + +**Step 1: **The first step after considering a design is to allocate the servos. As discussed in the constraints, the limitation of servos means moving components on the attachment must be considered carefully. + +**Step 2: **Next, download the basic rover shell from this link: [Basic Shell](/s/Basic-Shell.stp) + +**Step 3:** Starting from the rover shell upwards, take the attachment step by step. Let's start with where the servos are going to sit. Then finish all your static components before going on the moving pieces. Think about how many parts you want your attachment to be made of. One part? Or an assembly of many parts? + +## Tips and tricks: + +#### Component Sketches: + +Below are some valuable sketches and components that can be used to design your attachment. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1670466103819-WJQ8QWKIOAWHCJ62IY1K/horn+sketch.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1670466103819-WJQ8QWKIOAWHCJ62IY1K/horn+sketch.PNG) + + Servo Horn Sketch + +Sketch for attaching servo horns to prints. Good to extrude it about 5mm in. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1670466443043-OI0IWFH7MJYAMSR93ULI/Servo+mount.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1670466443043-OI0IWFH7MJYAMSR93ULI/Servo+mount.PNG) + + Servo Mount + +Perfect size for mounting a micro servo. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1670466103819-WJQ8QWKIOAWHCJ62IY1K/horn+sketch.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1670466443043-OI0IWFH7MJYAMSR93ULI/Servo+mount.PNG) + +#### Connections: + +When printing your design, breaking up the attachment into smaller, easy-to-print parts is recommended. This will ensure a robust, high-quality design that can be quickly prototyped. The connections between these parts must be considered when making a multi-part design. Refer to the 3D printing connections guide to determine which techniques suit your design. + +#### Gears: + +While the designs are limited to two servos, the output of these actuators can be modified to suit your needs. For example, the half-rotation range of a standard servo can be increased through gears. Furthermore, the rotational movement of a servo can be changed to linear by using a rack and pinion system. For more information on gears and motion, refer to our Guide to Gears. + +For a more detailed guide to 3D printing connections and gears, visit the pages shown below. + + [ + Guide To Gears + ](guide-to-using-gears) + + [ + Guide to 3D Printing Connections + ](connections-in-3d-printing) diff --git a/content/resources/guide-starting-an-after-school-robotics-club.mdx b/content/resources/guide-starting-an-after-school-robotics-club.mdx new file mode 100644 index 0000000..0c58acc --- /dev/null +++ b/content/resources/guide-starting-an-after-school-robotics-club.mdx @@ -0,0 +1,110 @@ +--- +title: "Guide: Starting an After School Robotics Club" +date: "2024-05-07" +categories: ["Guides"] +tags: ["after school", "robotics club"] +excerpt: "Interested in starting your own after school robotics club? Here’s our quick start guide to how we approach it! Step 1: Gauging Interest and Goal SettingThe first step to any successful project is finding something to work towards. Find out what your" +featuredImage: "/images/resources/guide-starting-an-after-school-robotics-club.jpg" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a29625dc-ca6b-4715-a956-c94329ea8a53/teaching-on-floor.png) + +Interested in starting your own after school robotics club? Here’s our quick start guide to how we approach it! + +--- + +### Step 1: Gauging Interest and Goal Setting + +The first step to any successful project is finding something to work towards. Find out what your students are interested in! This could be anything from battle bots, micro mouse, 3D printing and so much more! + +Generally, we like to use the annual RoboRave competition as a generic starting goal as there are a variety of challenges for students to work towards. Find more info [here](https://roboraveaustralia.com). Otherwise, researching robotics competitions or challenges in your area can be a great starting point! + +### Step 2: Planning the First “Sprint” + +After school robotics clubs usually run weekly one day a week, which leaves limited time for actual crafting and troubleshooting. It’s usually good practice to work with students to plan what they want to achieve for the first term and what a reasonable amount of time and effort that will require. + +For example, for students wanting to enter the RoboRave Sumo competition, I usually push students to have a finalized chassis and offensive/defensive design and be working towards a prototype 3D design by the end of the first term. + +A rough week by week goal guide for term 1 could look like this: + +**Week 1: No club** + +**Week 2: Brainstorming and Goal setting** + +- Meet and talk to students about their interests and goals. + +- Introduce them to local competitions and challenges that suit their interests. + +- Brainstorm how challenges could be solved, both idealistically and realistically. + +**Week 3: Rough designs and Research** + +- Go through the “[Engineering Design Process](https://www.sciencebuddies.org/science-fair-projects/engineering-design-process/engineering-design-process-steps)” and draft designs/ideas on paper. + +- Start to encourage students to design solutions - what will their robot look like? Will it use something like a Micromelon Rover as a “base” for their design? What will they need to learn to achieve this? etc. + +- Talk to them about realistic design goals. Encourage students to play to their strengths and figure out where support can be added. + +- Research! + +**Week 4: Prototyping** + +- Allow students to prototype designs with Lego, cardboard, Arduino or whatever resources are available. + +- Start to think about translating these prototypes to digital designs, such as CAD. + +- Figure out what students will need, eg electronic parts, special equipment, etc. Order parts early! + +**Week 5: Rudimentary Digital Designs** + +- Teach students a 3D design suite of choice. Some free options are [TinkerCAD](https://www.tinkercad.com) and [Onshape](https://www.onshape.com/en/). + +- If the school has access to 3D printers, encourage students to use them as a way to build their custom robots. + +- Go through the requirements and tips for 3D printing. + +- If manufacturing or otherwise creating robots, go through the process and ensure all students have a general idea of where they are headed. It’s okay to not have anything completely finalized! + +**Week 6: Goal check in** + +- Check in with the students mid way through the term about where they are up to - this can be as formal or informal as you like. + +- See if any students wish to learn specific things for later in the year, eg breadboarding electronics. + +- Generally allow for more testing / creating. + +**Week 7: Testing and Making** + +- By this point in the term, students are usually eager to get on with whatever they are creating. + +- Support them where it is needed. + +**Week 8: Testing of Designed Parts** + +- If any parts have been printed / manufactured, do lots of testing to make sure they’re working as intended. If not, support students with design changes and ideas. Mistakes are part of the learning! + +**Week 9: Continue Creating** + +- Coming to the end of the term, check in with students to see if they plan to continue with their robot over the holidays and how you can support that. + +- Order any parts needed for next term. + +**Week 10: No club** + +This is an incredibly idealistic week by week goal, usually students take an entire term to prototype and semi finalize their ideas, and that’s totally okay! It’s about fun and learning first and foremost so don’t be disheartened if you haven’t got a bunch of perfect robots by the end of a single term. + +### Step 3: Use Resources! + +A common concern we hear from teachers is the lack of use special digital tech machines and resources get. This could be anything from 3D printers, laser cutters, electronic kits or fancy materials. Seeing what your school has available and learning how to use them is a great way to integrate them into the robotics club. Design fun projects to get students involved with tech they might otherwise never get to use! It’s a great way to build both you and your student’s skill sets. + +Learning about different tech and running different design challenges is a great way to fill the weeks if you aren’t working towards a specific challenge or competition. There’s a million new things to learn in 3D printing alone! + +### Step 4: Get Involved and Have Fun + +There’s nothing better than a passionate teacher who is just as excited about the learning as the students are. I personally love to update my classes on the projects I’ve been working on as a way to inspire them and generally get involved. Build your own robot alongside them and participate in the challenges! It will make a world of difference to both your and your student’s learning. + +### Wrap Up + +At the end of the day, there’s no one way to run an after school club, it’s important to make it your own. Figure out what you and your students wish to work towards, do some rough goal planning and use all the available resources. It may not run 100% smoothly and according to plan, but that is just the way robotics usually goes. + +I look forward to seeing your robots in the field! diff --git a/content/resources/guide-to-making-attachments-in-tinkercad.mdx b/content/resources/guide-to-making-attachments-in-tinkercad.mdx new file mode 100644 index 0000000..a4a12a3 --- /dev/null +++ b/content/resources/guide-to-making-attachments-in-tinkercad.mdx @@ -0,0 +1,76 @@ +--- +title: "Guide to Making Attachments in Tinkercad" +date: "2024-08-03" +categories: ["Guides"] +tags: [] +excerpt: "Designing 3D printed attachments for the Micromelon rover is a fantastic way to upskill in CAD design while making your own custom additions. Tinkercad is a free-to-use software that allows you to bend and stretch existing shapes to create your own o" +featuredImage: "/images/resources/guide-to-making-attachments-in-tinkercad.jpg" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/0b3e5e6b-bf45-42fc-ba1d-ba9f120a4c9c/Thumbnail.jpg) + +Designing 3D printed attachments for the Micromelon rover is a fantastic way to upskill in CAD design while making your own custom additions. Tinkercad is a free-to-use software that allows you to bend and stretch existing shapes to create your own ones. In this guide, we’ll be going through some of the basic Tinkercad tools and how we would go about designing a sumo ramp for the rover. + +## The Workspace: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/21d46639-cbec-4097-83a9-d6971176d7db/Workspace.jpg) + +When a new project is opened in Tinkercad, the following screen is what we see. Highlighted by coloured squares are some important tools to get started. + +- Red - This is the part name, simply click the word and type in your part name. + +- Orange - There is where some of your keyboard tools are, such as ‘delete’, ‘copy’, ‘paste’, merge, etc. + +- Yellow - This is the navigation tube, it can be clicked an dragged around to look at the part in 3D. Faces on this cube can be clicked to look at the front, top, and other faces. The cube can also be used to rotate your view of the part. + +- Green - This is where all of the starting shapes are, click and drag any of these onto the workplane to start modelling. + +## The Measure Tool: + +The measure tool is like a special ruler that lets us see how long an object is on all sides. It also tells us the distance of the object to the ruler using green arrows. As seen in the video, we can click these numbers and change them to modify the shape. The video uses a cube but any of the shapes on the right can be used. It’s recommended to always have a ruler in the workplane for any project. + +## Holes and Solids: + +The two types of objects in Tinkercad are ‘Solids’ and ‘Holes’. As seen in the video, when two solids are grouped together, they become one solid object. But when a solid and a hole are grouped, where the hole overlaps the solid, the solid is cut off. This process can be reversed by ungrouping the objects again. + +## Align Tool: + +The align tool is useful for quickly making a number of objects sit on the same line. This tool can’t be used to evenly distribute objects, however, for example, it’s very useful in making sure all your objects are sitting on the centre line of another object. + +## Designing a Rover Ramp: + +#### Step 1: + +To get started, first download our rover shell clip [here](/s/MM-Attachment-Clip.stl). Next, open up the downloaded file in a new Tinkercad project by using **Import > Choose a File > (open the file) > Import**. Drop a ruler into the workplane and rotate the clip so that it looks like the image below: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/3da58469-fca6-4315-b7b1-9f6afaf0e65e/Step+1.jpg) + +#### Step 2: + +Next, use a rectangle to cut off the bolt tabs at the front. The hole should look like the following image before grouping. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/8e8066c1-acef-42fc-9e6b-0f2c94f9aa17/Step+2.jpg) + +#### Step 3: + +Next, we need to make the weapon for our attachment. For this, we used a wedge and modified the shape so it serves as a sumo ramp. It’s not attached to the clip just yet. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/b2712be8-70ef-4aa3-8346-4012f6ff734c/Step+3.jpg) + +#### Step 4: + +Next, we need to attach the ramp to the attachment clip. Move the ramp in so that it’s overlapping with the clip. Make sure it doesn’t come too far in as the rover needs to sit inside the clip. Use the align tool to make sure the ramp is centred on the clip. Don’t worry about the ultrasonic sensor opening, we’ll take care of this in the next step. Group the objects together once everything is in place. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/db78df6a-c5fe-4529-abe6-b9524eeb52c7/Step+4.jpg) + +#### Step 5: + +Finally, we need to cut a hole so that the rover ultrasonic sensor can see through the ramp. Download the [Ultrasonic Bore](/s/Ultrasonic-Bore.stl), and import it into the workplane. Next, position the bore as a hole so that it can cut through the hole on the clip and into the wedge. It’s easier to look from the back of the clip. The align tool and looking from many directions can help a lot with this step. Once everything is in position, merge the objects so the hole cuts through. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/e2e99d08-6567-473f-8eae-0550bb287854/Step+5.jpg) + +#### Complete: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/557bd60b-430f-4798-8624-859c15be3688/Complete.jpg) + +Now that is the complete design on how to make a very basic attachment for the rover. Try experimenting with more complex shapes using a combination of solids. Maybe try to increase the amount of contact your shapes have with the rover clip to make a stronger bond. diff --git a/content/resources/guide-to-roborave-line-follow.mdx b/content/resources/guide-to-roborave-line-follow.mdx new file mode 100644 index 0000000..4c824c1 --- /dev/null +++ b/content/resources/guide-to-roborave-line-follow.mdx @@ -0,0 +1,122 @@ +--- +title: "Guide to RoboRave Line-Follow" +date: "2024-12-31" +categories: ["Guides"] +tags: ["Guide", "Guides", "Line Follow"] +excerpt: "Welcome to the guide to starting RoboRave Line-Follow from scratchThe Challenge The goal of RoboRave Line-Follow (SPRINT) is to create a robot that can follow a black line and deliver a single ping-pong ball to a tower at the end of the track. The ga" +featuredImage: "/images/resources/guide-to-roborave-line-follow.jpg" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/e3e418f1-fb34-4cf8-b743-0fa80b7fb8e0/line-follow2.jpg) + +Welcome to the guide to starting RoboRave Line-Follow from scratch + +## The Challenge + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/ffc3169f-bc3c-48e8-a706-afa2bd642c5e/tracks.gif) + +The goal of RoboRave Line-Follow (SPRINT) is to create a robot that can follow a black line and deliver a single ping-pong ball to a tower at the end of the track. The game lasts 3 minutes, and after scoring the first ball, robots may continue scoring balls for the duration of the match. There are three fields for elementary, middle, and high school with increasing difficulty, respectively. + +## The Rules + +**Scoring:** + +Scores are an accumulation of the following tasks: + +- Following the track to the tower + +- Delivering at least one ball + +- Returning back home + +- Delivering the highest number of bonus balls in the time remaining + +**General Robot Rules:** + +- The robot must be fully autonomous and cost $1500 USD or less + +- The robot must fit within the size constraints of 25cm x 18cm with no height restrictions + +- The weight limit for the robot is a maximum of 1kg + +For the rest of the tournament rules and specific scoring matrices for each age division, visit the link below to the RoboRave website rules page. + + [ + Line-Follow Rules + ](https://roboraveaustralia.com/wp-content/uploads/2022/10/All-2023-Challenge-Rules-V1-PDF.pdf) + +## Getting Started + +**Physical Build:** + +For the line-follow aspect of the challenge, the in-built colour sensors on the Micromelon rover can be used. Thus, the main focus of the physical build is to design and construct a system to carry and deposit the balls in the tower. The tower is an A4 mailing box, 20cm tall and 10cm wide, with a 10cm x 10cm wide hole at the top for the ping-pong balls. + +Because of this, the recommended technique is to build a tower of sorts on top of the Rover with a container to store the balls. This container should also have a system (like a servo) to release the balls when it reaches the tower. Our 3D-printed RoboRAVE Line-follow attachment encompasses these considerations. For more details, click on button below to head to the build guide. + + [ + Build Guide: Roborave Line Follow + ](https://micromelon.com.au/resources/build-guide-roborave-line-follow) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/92af0b4d-561a-4a61-83e7-e819f5fa01aa/IMG_1131.jpg) + +**Coding:** + +For the coding aspect of the challenge, the recommended strategy is to use a basic line following technique with some modifications to suit the challenge. The link to the Micromelon Line Following activity has been added below. + + [ + Activity: Line Following + ](https://micromelon.com.au/resources/line-following?rq=follow) + +After making the basic line following code, we need to add some conditions, so the robot is aware when it’s reached an intersection, reached the tower, or has returned home. Each situation is represented by a black line perpendicular to the current track. This can be seen in the line following mat examples in the RoboRave rules. + +A simple way to detect these is to have an ‘if’ statement checking to see if all three colour sensors on the Rover see black. The ultrasonic sensor may also be used to detect the tower. + +When these black areas are detected, the Rover must deduce the area type. This can be done by coding manually for the field. For example, for the MS field, the following coding structure can be used: + +- Line follow until black area is detected (intersection reached) + +- Turn at intersection + +- Follow the line until black area is detected (tower has been reached) + +- Deposit a ball and turn around + +- Follow the line until black area is detected (intersection reached) + +- Turn at intersection + +- Follow the line until black area is detected (home reached) + +## Tips and Tricks + +#### Rover Expansion Headers: + +One way to make the Rover follow the line faster is to use an external colour and light sensor instead of the three on the Rover. There are several sensors with differing capabilities. One such sensor is the QTR-8RC line sensor array which senses reflected light intensity from 8 infrared sensors. The expansion headers on the Rover can be connected to an external microcontroller which can be used to interface with these external sensors. For further detail about using the expansion header, head over to the guide to I2C and UART pages and the Rover and Arduino Line Follow showcase. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/098c096d-ac74-4bec-89fd-e9573940512b/line+sensors.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/50405b1a-94dd-4b29-a867-01290e567741/IMG_1366.JPG) + + [ + How to use I2C + ](how-to-use-i2c) + + [ + How to Use UART + ](getting-started-the-micromelon-rover-uart) + + [ + Showcase; Rover and Arduino Line Follow + ](showcase-rover-and-arduino-line-follow) + +#### PID Line Follow: + +When making your own line-follow code, most simple implementations will have the Rover following the line in a jerky motion. Implementing a PID (Proportional Integral Derivative) controller can smooth this motion and improve the Rover’s ability to follow the line quickly and more accurately. The basic idea is to use reflected light intensity from the line sensors. This value is usually very high on white and low on black, so the goal is to follow the middle point between the two, which we’ll call the grey area. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/41019e5a-fb41-4d61-ba5a-4bb7b7478ce3/Line+Follow.PNG) + +Our target will be 50% intensity. If the reading is less than that, the Rover will veer away from the line; if it’s greater than 50%, it will turn towards the line. The entire PID equation is excessive for the task, so a simple Proportional controller should suffice in most cases. Check out our guide for more information about making proportional controllers (link below). + + [ + Getting Started With Proportional Control On A Micromelon Rover + ](https://micromelon.com.au/resources/getting-started-with-proportional-controls) diff --git a/content/resources/guide-to-using-gears.mdx b/content/resources/guide-to-using-gears.mdx new file mode 100644 index 0000000..ef99724 --- /dev/null +++ b/content/resources/guide-to-using-gears.mdx @@ -0,0 +1,92 @@ +--- +title: "Guide to Using Gears" +date: "2024-12-31" +categories: ["Guides"] +tags: [] +excerpt: "Gears can be found in many of the machines around you in everyday life. This guide will show you when and where to use gears in your designs.Advantages and examples of gears: Many different types of gears exist, and each type can be used for a differ" +featuredImage: "/images/resources/guide-to-using-gears.PNG" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/82bc5576-5d7d-430d-a967-f4c0526b09d9/transmission.PNG) + +Gears can be found in many of the machines around you in everyday life. This guide will show you when and where to use gears in your designs. + +## Advantages and examples of gears: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/40d0c768-a05b-4400-833d-54515d5cd949/types+of+gears.jpg) + +Many different types of gears exist, and each type can be used for a different purpose: + +- Increasing speed or torque of rotations + +- Changing the direction of rotations + +- Changing the axis of rotation + +- Change rotational movement to linear movement + +One of the common and simple uses of gears is to change mechanical advantage. Mechanical advantage is a value that represents the amplification of force or strength. For example, a mechanical advantage of 4 means quadrupling the input force. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/4c3948ef-93ed-45a6-960e-9f55cc1c47d0/mechanical+advantage.png) + +*Credit: Salish 274* + +As seen in the diagram above, when a driver gear has more teeth than the driven gear, the speed increases, and the torque decreases. The torque increases and speed decreases when the drive gear has fewer teeth than the driven gear. The calculation for mechanical advantage is simple: MA = # teeth driven ÷ # teeth driver. + +## Designing gears in Fusion 360: + +While designing gears traditionally is possible, in this guide, we’ll be going through how to use the Spur Gear Add-in from Fusion 360. As seen below, on a new Fusion part, navigate to Utilities > Add-ins > Add-ins > Spur Gear (there will be two, either will work). + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/0cc96873-1b20-4895-9c8f-c788cca172f0/spur+gear.PNG) + +Now, back in the Solid section, under the create tab, you will find the new spur gear tool. Note that the process above must be repeated for each new part. Click on the spur gear option, and the menu below will appear. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/32fb9f8f-65b7-4471-963e-d07685a6957a/spur+gear+menu.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/3522886e-994a-47e2-a403-8b41a7b5bf6e/spur+menu.PNG) + +To make your gear, go through the following options that are suited for your project: + +- **Pressure angle: **This angle represents the angle at which the teeth of two gears push against each other. 20 degrees is typically used. However, a smaller angle reduces power and noise, while a large angle increases noise and power. + +- **Module: **The product of the module and the number of teeth gives the diameter of the gear. For example, for a 48-tooth gear of 60mm diameter, the module would be 1.25. + +- **Number of Teeth: **This is for deciding what mechanical advantage your gears possess. For example, a drive gear with 12 teeth and a driven gear with 24 teeth will have a mechanical advantage of 2 (power is doubled, speed is halved). + +- **Backlash: **This can be considered a small space for tolerance when meshing gears. A value of 0.15 is suitable for 3D printing gears. + +- **Root Fillet Radius: **As the diagram shows, this is the fillet size between a tooth and a wheel. The bigger the value, the stronger the teeth. This value should be modified last and made as big as the Add-in will allow. A text box will notify you if the value is too large. + +- **Gear Thickness and Hole Diameter: **These are how thick your gear is, and the diameter of the hole drilled through the centre. Leave this 0 if you do not want a hole. + +A good tutorial to follow for additional practice is ‘Spur Gears in Fusion 360’ by Jonathan Odom. [Link to Video](https://www.youtube.com/watch?t=30s&v=ZakT54JIhB8) + +## Designing racks in Fusion 360: + +A rack can be meshed with a spur gear to make a rack and pinion system. This is a great way to convert rotational movement into linear movement. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/b7b96b26-1e16-4698-a0ad-255600250f3d/rack+and+pinion.jpg) + +To start designing racks in Fusion, we need to install the ‘Rack Gear Generator’ created by Niklas Pöllönen ([Link Here](https://apps.autodesk.com/FUSION/en/Detail/Index?appLang=en&id=5830349459343127086&os=Mac)). Click the link and follow the appropriate installation instructions for your device. Once installed, the rack gear option should appear under the create tab in the solids section. Click on it, and you should find the following pop-up. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/113eb134-6019-488a-a1ab-68b54ffa9aee/pop+up.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/e4960566-0f3d-47de-9976-6b55889e35e2/rack+gear.PNG) + +Once you have made a spur gear of your choice, go through the following options to make your desired rack: + +**Define with: **This is similar to the ‘Module’ discussed in the spur gear section; it is a multiplier for the size of the teeth. This should be set to ’Module’ to match the rack with the previously generated spur gear. After doing this, a ’Module’ entry will appear, and the same module value as your spur gear should be entered. + +**Pressure Angle: **The pressure angle also must be the same as your spur gear. + +**Number of Teeth: **As this is a rack, the spur gear will have a part in determining how long your rack is. You can modify this length by choosing how many teeth the rack has. + +**Gear Thickness: **This is the thickness of the material below the teeth. + +**Root fillet radius: **As with the spur gear, this value should be as large as the add-in allows. + +**Backlash: **This is best left at 0.15mm. + +**Base Width: **This corresponds to the spur gear’s ‘Gear Thickness’ option. The rack and pinion will be perfectly flush if your spur gear is 5mm and this value is set to 5mm. + +**Gear Style: **The gear style can change the type of rack from straight to helical to herringbone, but these other types are more complex, therefore, will not be covered in this guide. diff --git a/content/resources/gyroscope.mdx b/content/resources/gyroscope.mdx new file mode 100644 index 0000000..40a56e6 --- /dev/null +++ b/content/resources/gyroscope.mdx @@ -0,0 +1,393 @@ +--- +title: "The Gyroscope" +date: "2021-06-24" +categories: ["All", "Guides"] +tags: [] +excerpt: "Learn what the gyroscope is and how to code it." +featuredImage: "/images/resources/gyroscope.gif" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624862810968-H1VBOPJ657O17QVZJK48/point+out+on+pcb.png) + +The gyroscope is one of the five sensor types on the Micromelon Rover. The gyroscope is a component built into the Rover’s PCB (printed circuit board). It’s only about 2.5mm x 3.0mm wide and 0.83mm tall. This component also includes another sensor, the accelerometer. + +**What Does It Do?** + +The gyroscope is a device designed to detect how fast the rover is rotating and in what direction it is rotating. The gyroscope is a great tool understanding the Rover’s rotational movement in space. Think of it as a key tool for the Rover’s sense of direction. + +### History of the Gyroscope + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624572106015-LXE9FV8MBVBLIUU0QF72/3D_Gyroscope.png) + +A Traditional Gyroscope + +Gyroscopes have existed long before digital devices like the Rover used them. Gyroscopes have been used as tools since the 1800’s. The gyroscopes used back then were devices built out of metal loops called gimbal rings that can spin freely, attached to a central piece called the rotor. You can see a diagram of a traditional mechanical gyroscope to the right. + +The spin axis & rotor are designed to spin at a height speed. As the spin axis & rotor are in motion, the attached gimbal rings rotate inside the gyroscope frame. How gyroscope movement works and why it’s so important is a bit hard to explain through text. Instead, let’s just see what happens when a gyroscope is & isn’t in motion. + +**In Motion** + +**No Motion** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624572547778-GDB89RBDKIAVI8N3WYJT/falling+gyro.gif) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624572637007-WWWIN6NB4P7K6IESIUXV/standing+gyro.gif) + +*Gyroscope footage above sourced from the YouTube channel ScienceOnline.* + +As we can see, when the gyroscope components are not in motion, gravity causes the gyroscope to fall over as expected. When the gyroscope’s components are spinning the gyroscope is able to remain stable seemingly against the force of gravity. This is due to a phenomenon* *called angular momentum. While the gyroscope spin axis & rotor are spinning fast enough the angular momentum will be maintained and the gyroscope will maintain its vertical position against the force of gravity. + +### How Does The Rover Gyroscope Work? + +The gyroscope on the Rover is something called a microelectromechanical system (MEMS). A MEMS gyroscope mechanically works a lot different to a traditional mechanical gyroscope like the one’s we’ve seen already. It doesn’t have a spinning rotor and gimbal rings. Although a traditional gyroscope and a MEMS gyroscope mechanically work different, the fundamental physics is the same. There is a lot of marvellous engineering that go into MEMS gyroscopes. We won’t explain that here as it’s a bit too complicated for one blog post. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624942451867-3SY3BRXSACJT3Z9RH4BZ/new+animation+diagram.png) + +To simplify things, let’s imagine inside the rover there is a traditional mechanical gyroscope that is constantly in motion (so it will always stay straight even against gravity). Around the gyroscope is a protractor. When the rover is flat on the ground, the the protractor aligns the gyroscope with 0 degrees. Let’s breakdown how this helps our rover determine rotation. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624942040591-23MQA9AYX7AAY9QZ54JO/spinning+animation.gif) + +- The rover starts flat. The 0th degree of the protractor is aligned with the gyroscope. This means there is no rotation. + +- As the Rover rotates, the protractor rotates with it. The gyroscope remains stable and straight. + +- When the Rover stops rotation, the gyroscope now points at a different degree of the protractor. + +**The Rover determines degrees of rotation based on how the protractor rotates around the gyroscope.** + +In our example we can see the rover rotating on its side. The rover could also roll backwards & forwards or spin on the spot. It starts to get a bit complicated when we add all of these together. We need a simple way to understand rotation. That’s what the 3 axis of movement are for. + +**The 3 Axis of Movement** + +Using the gyroscope, our Rover can detect it is rotating but it can also tell us specifically in which direction it is rotating. It doesn’t make sense if the rover starts telling us “*Hey I am spinning left*”. Unfortunately, this isn’t clear enough. We need a simple way for us to understand and communicate the Rovers direction of rotation. This is what the 3 axis of movement are for. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624868868357-RAVQGR7OP0ZVUWK2ML58/axis+diagram.png) + +**The 3 Axis, X Y and Z** + +The 3 axis are specific directions the rover uses. The **X axis **runs from back to front of the rover. The **Y axis** runs across the rover middle from left to right. The **Z axis** down and up through the Rover’s middle. + +The rover can rotate around all 3 axis. Below is a demonstration of rotation along each axis. + +**X Axis Rotation** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624920605714-ILQONA2C9IYWFKTCUX19/simulator+x+rotation.gif) + +**Y Axis Rotation** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624920631376-PV9GFSV3YG31Z3WEGJ3R/simulator+y+axis.gif) + +**Z Axis Rotation** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624920705436-T8NMNOKUIGH34Z27SA64/simulator+z+axis.gif) + +### Gyroscope Calibration + +Although the Rover’s gyroscope is reliable at detecting rotation changes consistently it won’t always be perfect to the exact degree. Even when the rover is in a completely stationary position, the gyroscope may say that it is detecting the slightest amount of rotation happening even though there is no rotation. This difference between the gyroscope values and the real rotation is so small that in 99% of circumstances it will be inconsequential when programming. + +This irregularity is unfortunately unavoidable for the Rover’s built in gyroscope. You can always re-calibrate the Rover’s sensors if you want to make sure they are as accurate as possible. + +**How To Recalibrate the Gyroscope** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624939570567-L79GANUHH3HQO7G5G1H0/calibrating+the+gyro.gif) + +- Open the Code Editor and connect to the Rover you want to calibrate. If you need a refresher on using the Code Editor, check out the [Getting Started With The Micromelon Rover](/resources/getting-started-with-the-micromelon-rover) post + +- In the Code Editor’s program menu, click the **Rover **button to open the dropdown. + +- Select the **Sensor Calibration** option. + +- As the sensor calibration dialog instructs, place the rover on the most level surface possible. + +- Press **Calibrate** + +Your rover should now be calibrated. + +### Programming The Gyroscope + +Open up the Code Editor, connect to a Micromelon Rover and open up the sensor view. To open sensor view, click the ROVER button next to your rover’s name. + +In the sensor view dialog, the gyroscope values are located in the bottom right table. The second column of the table is the gyroscope values & the third column is the accumulated gyroscope values. We’ll get into the difference between gyro vs accumulated gyro later. Move the rover around and take note of how the X, Y and Z values change. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623908456123-SFLGD6EJY3YZD9ICDIIR/opening+sensor+view.gif) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624603245886-5DTVZB8HC00BT7FPQBEV/in+sensor+mode+.gif) + +**Gyroscope or Accumulated Gyroscope Value?** + +**The Gyroscope Value** + +The values you see in the gyroscope column (second column) are degrees per second (dps). While the rover is not rotating, the dps value will be roughly 0 (like we mentioned the gyroscope isn’t perfect). If you rotate the Rover on the Z axis at 90 dps, it will take 4 seconds for the Rover to spin complete a full 360 degree spin. + +**The Accumulated Gyroscope Value** + +The values you see in the accumulated gyroscope column (third column) are accumulated degrees. When you first open sensor view or run code, the accumulated values are set to 0. As the rover rotates anticlockwise, the accumulated degrees increase. If you rotate the rover on the Z axis 360 degrees, the Z Axis value will be 360. If you rotate the Rover another 180 degrees, the Z axis value will now be 540. The accumulated degrees continue to increase as you rotate. Alternatively, if you rotate the opposite direction the degrees will decrease. If you spun the rover 720 degrees clockwise the accumulated gyroscope value will wind down back to 0 as its now aligned again with it’s starting rotation. + +**Which One Is Better? +**Both gyroscope & accumulated gyroscope values are useful in different circumstances. Depending on the challenge you are doing you may need to use one or both. We will cover two coding examples now, one for gyroscope and one for accumulated gyroscope. + +**Negative Values?** + +We know that there are 3 axis the rover can rotate around but should we rotate the Rover clockwise or anticlockwise around the axis? The answer is both. Negative numbers are for clockwise rotation and positive numbers are for anticlockwise rotation. + +**Using the Gyroscope Value in Code** + +Let’s write a simple program to make our Rover make sounds when it rotates. As it rotates faster the sound will be higher pitched. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624930189461-WNH48VPCTYWNSJJ9PWQB/using+gyro+in+code.gif) + +- Start with our **While True** loop as our program will have to be repeated to keep getting live data. + +- Let’s create a variable. You can do this from the **Variables** category. I’ll call my variable *gyro*. + +- Let’s set the *gyro* variable to the **Read From Gyroscope** block. Change the dropdown to the **Z Axis**. You can find this block in the **Sensors** category. + +The python command for reading the Z axis is **IMU.readGyro(2)** + +- The Rover’s buzzer cannot read negative numbers so we must check if the Rover’s Z axis gyroscope value is negative. Let’s use an **IF** block. In the condition check if the *gyro* variable is less than 0. + +- Inside the **IF **block, when the condition is successful and the gyroscope value is a negative number we will update the *gyro* variable to ***gyro x -1*** using a multiplication block. This will ensure the *gyro *variable is always positive. + +- Next, we drag out a **Play Sound at Hz** block from the **Lights/Sounds **category. Inside this we will place our *gyro* variable multiplied by 10 with another multiplication block. We multiply this gyro value, so the sound is more pronounced. + +- Press Play! + +While this code is running our rover will be making sounds depending on how much it is rotating around the Z Axis. The faster you rotate the rover, the higher pitch the sound. Give your Rover a spin but be careful not to cause damage to your rover. + +**Using the Accumulated Gyroscope Value in Code** + +Let’s write a similar program as we did above but now using our accumulated gyroscope. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624932865306-I62Y2II99CCLTT27S4B4/using+accum+gyro+in+code.gif) + +- Start with our **While True** loop as our program will have to be repeated to keep getting live data. + +- Let’s create a variable. You can do this from the **Variables** category. I’ll call my variable *gyro*. + +- Lets set the *gyro* variable to the **Read From Accumulated Gyroscope** block. Change the dropdown to the **Z Axis**. You can find this block in the **Sensors** category. + +The python command for reading the Z axis is **IMU.readGyroAccum(2)** + +- The Rover’s buzzer cannot read negative numbers so we must check if the Rover’s Z-axis gyroscope value is negative. Let’s use an **IF** block. In the condition check if the *gyro* variable is less than 0. + +- Inside the **IF **block, when the condition is successful, and the gyroscope value is a negative number we will update the *gyro* variable to ***gyro* x -1** using a multiplication block. This will ensure the *gyro *variable is always positive. + +- Next we drag out a **Play Sound at Hz** block from the **Lights/Sounds **category. Inside this we will place our *gyro* variable. We don’t need to multiply this value like we did with the previous example because the numbers we will get out of this data are much larger. + +- Press Play! + +While this code is running our rover will be making sounds. As you rotate the rover on the Z-axis in the one direction you will hear the rover wind up and increase sound. If you rotate in the opposite direction it will wind down as you reach the original rotation point. This effect happens in the opposite direction as well. + +### Wrapping Up + +Now that we’re familiar with what the gyroscope is, how it works and how to program it, it’s time to start doing some activities. Try these activities that require using the gyroscope. + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1633410377508-BJ58FG8O997255NZ0OUI/software-on-devices-desktop.png) + + ](/resources/micromelon-code-editor-283) + + Jun 4, 2025 + + [Micromelon Code Editor 2.8](/resources/micromelon-code-editor-283) + + Jun 4, 2025 + + [Read More →](/resources/micromelon-code-editor-283) + + Jun 4, 2025 + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1740004044466-93AJ0UQG28XXPGAHAAZ7/Complete.png) + + ](/resources/build-guide-bulldozer) + + Feb 20, 2025 + + [Build Guide: Bulldozer](/resources/build-guide-bulldozer) + + Feb 20, 2025 + + [Read More →](/resources/build-guide-bulldozer) + + Feb 20, 2025 + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1667374793791-04N8F2LW0TY82F7PF2OD/Complete.PNG) + + ](/resources/build-guide-ping-pong-shooter) + + Dec 31, 2024 + + [Build Guide: Ping Pong Shooter](/resources/build-guide-ping-pong-shooter) + + Dec 31, 2024 + + [Read More →](/resources/build-guide-ping-pong-shooter) + + Dec 31, 2024 + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1670372259160-3CS9E9E30Z3I3HHDGJG8/cover.PNG) + + ](/resources/how-to-use-i2c) + + Dec 31, 2024 + + [How to use I2C](/resources/how-to-use-i2c) + + Dec 31, 2024 + + [Read More →](/resources/how-to-use-i2c) + + Dec 31, 2024 + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1667368223471-FGKBFIFYG2WY9NW8AAAG/Complete.jpg) + + ](/resources/build-guide-roborave-line-follow) + + Dec 31, 2024 + + [Build Guide: RoboRAVE Line Follow](/resources/build-guide-roborave-line-follow) + + Dec 31, 2024 + + [Read More →](/resources/build-guide-roborave-line-follow) + + Dec 31, 2024 + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1673392447982-52VJ3E4MMZXOXQ1JMLK2/line-follow2.jpg) + + ](/resources/guide-to-roborave-line-follow) + + Dec 31, 2024 + + [Guide to RoboRave Line-Follow](/resources/guide-to-roborave-line-follow) + + Dec 31, 2024 + + [Read More →](/resources/guide-to-roborave-line-follow) + + Dec 31, 2024 + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464675848-K9YEOYK65IWRFRX4QJ1R/blog+header+image+.png) + + ](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Robot Simulator](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +How to get started with the Micromelon Robot Simulator. + + [Read More →](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1626837419969-WBB4D85KQIXSOP750N5M/resized+banner+%281%29.png) + + ](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Micromelon Rover](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +Crash course on basic rover function, how and what to program and starter activities to attempt. + + [Read More →](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622691207784-0X6JV7RYRQXZAFRG712S/pisonescape.png) + + ](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + + [Activity: Prison Escape](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + +Learn branching and iteration using the colour sensors and motors. + + [Read More →](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) diff --git a/content/resources/how-to-design-a-sumo-attachment.mdx b/content/resources/how-to-design-a-sumo-attachment.mdx new file mode 100644 index 0000000..dbac2c0 --- /dev/null +++ b/content/resources/how-to-design-a-sumo-attachment.mdx @@ -0,0 +1,46 @@ +--- +title: "How to Design a Sumo Attachment" +date: "2024-12-18" +categories: ["Guides"] +tags: ["3D Printing"] +excerpt: "3D printed extensions such as scoops and ploughs make an excellent addition to Rovers in a sumo battle. It is also a good introduction to Computer-Aided Design (CAD) and 3D printing.This activity will explore how to design extensions th" +featuredImage: "/images/resources/how-to-design-a-sumo-attachment.png" +--- + +3D printed extensions such as scoops and ploughs make an excellent addition to Rovers in a sumo battle. It is also a good introduction to Computer-Aided Design (CAD) and 3D printing. + +This activity will explore how to design extensions that attach to the [rover bolt clip adapter.](https://micromelon.com.au/store/p/bolt-clip) The clip adapter can be purchased from the Micromelon store, or the files can be downloaded from either [Printables ](https://www.printables.com/model/252748-micromelon-rover-spider-attachment)or [Thingiverse](https://www.thingiverse.com/thing:4795771). + +For an introduction to sumo, check out our [sumo activity guide](https://micromelon.com.au/resources/sumo). + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/35f7c562-d9bb-4fd1-93d1-bd7aef442049/Screenshot+2023-03-01+at+9.55.04+am.png) + +### Exercise Setup + +You will need 2x M3 bolts to attach extensions to the rover. You will also need a Rover Bolt Clip Adapter. It would be best to have a piece of paper and a pen on hand, which will be used to sketch out initial designs before transferring them into CAD. A computer with CAD software installed is also required. TinkerCad, Onshape and Autodesk Fusion 360 are excellent options with free versions available. Being familiar with CAD before this activity would be beneficial but is optional. + +### Here’s Our Approach + +#### Stage 1 + +Designing your extensions on paper is important before transferring them into CAD. Start off by drawing some rough sketches of your ideas. Once you have done that, choose a few of your favourite drawings and draw the side profiles for each. + +The side view will be the most important as this will form the basis of the CAD model. Remember to add holes where bolts can pass through and connect to the bolt clip adapter. You will also need to consider a cut-out for the ultrasonic sensor on the front face of your attachment. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/77354ddb-19dd-4d07-983a-9966827d013e/Screenshot+2023-03-01+at+11.27.02+am.png) + +*Example of side profiles of a sumo attachment* + +#### Stage 2 + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/36c6d3cc-843c-43a8-a04c-0825829dcc5f/Screenshot+2023-03-01+at+1.20.01+pm.png) + +*Dimensions for the example attachment* + +Once you are happy with your sketch, you should transfer your design into CAD. Ensure that you dimension your part accordingly. Note that the dimensions of your 3D printed piece will differ slightly from the CAD due to 3D printing inaccuracies. + +The dimensions for the example sumo ramp scoop used in this exercise may be helpful when designing the portion of the attachment, which will connect to the robot bolt clip adapter. + +#### Stage 3 + +Once you have 3D printed your extension, try and see if it fits on the rover bolt clip adapter. It may not fit perfectly first go, so correcting any issues may take a few redesigns. You can also try experimenting with different print infills to see what this does to the strength and rigidity of the part. diff --git a/content/resources/how-to-export-sensor-data-from-the-rover.mdx b/content/resources/how-to-export-sensor-data-from-the-rover.mdx new file mode 100644 index 0000000..c7ee6aa --- /dev/null +++ b/content/resources/how-to-export-sensor-data-from-the-rover.mdx @@ -0,0 +1,304 @@ +--- +title: "How to Export Sensor Data From the Rover" +date: "2023-04-11" +categories: ["Guides"] +tags: [] +excerpt: "In this tutorial, we will show you how to use the rover as a data collection device to assist with analysis and experiments.Why Collect Data?:While the ‘print’ function can display values on the terminal, sometimes we need to see many lines of inform" +featuredImage: "/images/resources/how-to-export-sensor-data-from-the-rover.PNG" +--- + +In this tutorial, we will show you how to use the rover as a data collection device to assist with analysis and experiments. + +## Why Collect Data?: + +While the ‘print’ function can display values on the terminal, sometimes we need to see many lines of information from different stages of the code. With this technique, we can record the data from each sensor at any point in the code and record and edit it in a Microsoft Excel file. This would let us analyse tables and graphs of data for an array of purposes. Maybe the rover could be used in science experiments? Or we might need to read the data to see how the colour sensors perform on different materials? Continue reading to find out how to record data for your project. + +## How to Use the Code: + +Shown below is the code used to collect data from the rover. Note that this code must be used in an external code editor. Not sure how to do this? Click the button below for our tutorial on getting stared with external code editors: + + [ + Getting Setup with the Micromelon Python Module + ](getting-started-with-the-python-module) + +Shown below is the whole code used to record sensor data from the rover. Once the code has completed running, there will be a ‘data.csv’ file in the same folder as the code which contains the recorded data. Make sure to copy the data to an excel file as this file is overwritten each time the code is run. + +Copy the code below into your code editor, and scroll down on this page to find out how to use it. + +``` +from micromelon import * +import csv +import time + +rc = RoverController() +rc.connectBLE(1) # Enter the number for your rover +rc.startRover() + +START_TIME = time.time() + +def current_time(): + """ + Returns the time elapsed since the start of the code + + Returns: + int: Seconds since the start of the code + """ + return time.time() - START_TIME + +# Below, uncomment the sensor data you wish to record +sensors = { + 'Time': current_time, + 'Ultrasonic': lambda: Ultrasonic.read(), + 'Brightness_Left': lambda: Colour.readSensor(CS.BRIGHT, sensor = 0), + 'Brightness_Middle': lambda: Colour.readSensor(CS.BRIGHT, sensor = 1), + 'Brightness_Right': lambda: Colour.readSensor(CS.BRIGHT, sensor = 2), + 'IR_Left': lambda: IR.readLeft(), + 'IR_Right': lambda: IR.readRight(), + 'Accelerometer_x': lambda: IMU.readAccel(0), + 'Accelerometer_y': lambda: IMU.readAccel(1), + 'Accelerometer_z': lambda: IMU.readAccel(2), + 'Gyro_x': lambda: IMU.readGyro(0), + 'Gyro_y': lambda: IMU.readGyro(1), + 'Gyro_z': lambda: IMU.readGyro(2), + 'Gyro_Accumulated_x': lambda: IMU.readGyroAccum(0), + 'Gyro_Accumulated_y': lambda: IMU.readGyroAccum(1), + 'Gyro_Accumulated_z': lambda: IMU.readGyroAccum(2), +} + +def record_data(output_file): + """ + Read all of the given sensors and record each of the values to memory once + + Parameters: + output_file (list[list[int,...]]): A list containing lists of integers. + Each list of integers is a single row of data + + Returns: + list[list[int,...]]: The output file with the new row of data in it + """ + row = [] + for key in sensors.keys(): + row.append((sensors[key])()) + output_file.append(row) + return output_file + +def write_data(output_file): + """ + write the output file into a CSV file with each of the sensor names as + headers + + Parameters: + output_file (list[list[int,...]]): A list containing lists of integers. + Each list of integers is a single row of data + """ + fieldnames = sensors.keys() + with open('data.csv', mode = 'w', newline="") as file: + writer = csv.writer(file) + writer.writerow(fieldnames) + for row in output_file: + writer.writerow(row) + +delay(2) +output_file = [] + +# ENTER YOUR CODE BELOW THIS LINE + +# DON'T ENTER CODE PAST THIS LINE +write_data(output_file) +rc.stopRover() +rc.end() + +``` + +#### 1) Enter the rover number + +In the section shown below, enter the number of your rover to connect. Make sure bluetooth is turned on on the computer. + +``` +rc = RoverController() +rc.connectBLE(1) # Enter the number for your rover +rc.startRover() + +``` + +#### 2) Choose your sensors + +The ‘sensors’ dictionary is used to select which sensors we gather data from. An additional sensor ‘Time’ gives the real time since the code has started running. The function ‘current_time’ may be used to get the timestamp for use in your code. When a sensor is commented out (grey), the rover will not record data from it. + +``` +# Below, uncomment the sensor data you wish to record +sensors = { + 'Time': current_time, + 'Ultrasonic': lambda: Ultrasonic.read(), + 'Brightness_Left': lambda: Colour.readSensor(CS.BRIGHT, sensor = 0), + 'Brightness_Middle': lambda: Colour.readSensor(CS.BRIGHT, sensor = 1), + 'Brightness_Right': lambda: Colour.readSensor(CS.BRIGHT, sensor = 2), + 'IR_Left': lambda: IR.readLeft(), + 'IR_Right': lambda: IR.readRight(), + # 'Accelerometer_x': lambda: IMU.readAccel(0), + # 'Accelerometer_y': lambda: IMU.readAccel(1), + # 'Accelerometer_z': lambda: IMU.readAccel(2), + 'Gyro_x': lambda: IMU.readGyro(0), + 'Gyro_y': lambda: IMU.readGyro(1), + 'Gyro_z': lambda: IMU.readGyro(2), + # 'Gyro_Accumulated_x': lambda: IMU.readGyroAccum(0), + # 'Gyro_Accumulated_y': lambda: IMU.readGyroAccum(1), + # 'Gyro_Accumulated_z': lambda: IMU.readGyroAccum(2), +} + +``` + +#### 3) Record your data + +Now we move to the section where we record data. It’s very important to remember that the section below must not loop forever! If it does, the data will not be written to the CSV file. To record a line of data from all of your selected sensors, use the line below: + +``` +output_file = record_data(output_file) + +``` + +Next, we’ll show you some tips and tricks to record data: + +**Collect data on prompt: **This code below will take a reading of data when the middle colour sensor sees black + +``` +# ENTER YOUR CODE BELOW THIS LINE +while True: + if Colour.readSensor(CS.BRIGHT, sensor = 1) `< 100: + output_file = record_data(output_file) + break + +# DON'T ENTER CODE PAST THIS LINE + +``` + +**Record data for 3 seconds: **This is to record all sensor data for a set amount of time + +``` +# ENTER YOUR CODE BELOW THIS LINE +start_recording = current_time() +while (current_time() - start_recording) < 3: + output_file = record_data(output_file) + +# DON'T ENTER CODE PAST THIS LINE + +``` + +**Control the amount of data points: **If the code is recording too many data points, you can limit how often it records. In the example below, the rover only records data once every 500 iterations of the loop. Increase this number to record fewer data points. + +``` +# ENTER YOUR CODE BELOW THIS LINE +start_recording = current_time() +counter = 0 +while (current_time() - start_recording) < 3: + if not counter % 500: + output_file = record_data(output_file) + counter += 1 + +# DON'T ENTER CODE PAST THIS LINE + +``` + +## Demonstration: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/31ef4beb-7780-4108-800b-d5ca52a0cce2/IMG_2066.jpg) + +In our demonstration, we will setup the rover on the platform as shown. The idea is for the rover to drive forward, and record the brightness from each colour sensor. Data point collection has been limited to once every 500 loops and recording will stop when the ultrasonic sensor sees the block at the end of the platform. Shown below is the configuration of the code that was used: + +``` +from micromelon import * +import csv +import time + +rc = RoverController() +rc.connectBLE(371) # Enter the number for your rover +rc.startRover() + +START_TIME = time.time() + +def current_time(): + """ + Returns the time elapsed since the start of the code + + Returns: + int: Seconds since the start of the code + """ + return time.time() - START_TIME + +# Below, uncomment the sensor data you wish to record +sensors = { + 'Time': current_time, + # 'Ultrasonic': lambda: Ultrasonic.read(), + 'Brightness_Left': lambda: Colour.readSensor(CS.BRIGHT, sensor = 0), + 'Brightness_Middle': lambda: Colour.readSensor(CS.BRIGHT, sensor = 1), + 'Brightness_Right': lambda: Colour.readSensor(CS.BRIGHT, sensor = 2), + # 'IR_Left': lambda: IR.readLeft(), + # 'IR_Right': lambda: IR.readRight(), + # 'Accelerometer_x': lambda: IMU.readAccel(0), + # 'Accelerometer_y': lambda: IMU.readAccel(1), + # 'Accelerometer_z': lambda: IMU.readAccel(2), + # 'Gyro_x': lambda: IMU.readGyro(0), + # 'Gyro_y': lambda: IMU.readGyro(1), + # 'Gyro_z': lambda: IMU.readGyro(2), + # 'Gyro_Accumulated_x': lambda: IMU.readGyroAccum(0), + # 'Gyro_Accumulated_y': lambda: IMU.readGyroAccum(1), + # 'Gyro_Accumulated_z': lambda: IMU.readGyroAccum(2), +} + +def record_data(output_file): + """ + Read all of the given sensors and record each of the values to memory once + + Parameters: + output_file (list[list[int,...]]): A list containing lists of integers. + Each list of integers is a single row of data + + Returns: + list[list[int,...]]: The output file with the new row of data in it + """ + row = [] + for key in sensors.keys(): + row.append((sensors[key])()) + output_file.append(row) + return output_file + +def write_data(output_file): + """ + write the output file into a CSV file with each of the sensor names as + headers + + Parameters: + output_file (list[list[int,...]]): A list containing lists of integers. + Each list of integers is a single row of data + """ + fieldnames = sensors.keys() + with open('data.csv', mode = 'w', newline="") as file: + writer = csv.writer(file) + writer.writerow(fieldnames) + for row in output_file: + writer.writerow(row) + +delay(2) +output_file = [] + +# ENTER YOUR CODE BELOW THIS LINE +counter = 0 +Motors.write(8) +while Ultrasonic.read() >` 10: + if not counter % 500: + output_file = record_data(output_file) + counter += 1 +Motors.write(0) + +# DON'T ENTER CODE PAST THIS LINE +write_data(output_file) +rc.stopRover() +rc.end() + +``` + +Once the code was run, the ‘data.csv’ file was opened up in Microsoft Excel, and graphed. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1309b63d-7ac3-44e2-8831-3f49c180e60b/Capture.PNG) + +Looking at the graph, we are now able to analyse how the sensors interpret the platform and the shade of the tape. There are three distinct drops in the data where the rover passed over the tape. This information can be used to easily analyse the brightness readings of each colour sensor on different surfaces. diff --git a/content/resources/how-to-maintain-a-3d-printer.mdx b/content/resources/how-to-maintain-a-3d-printer.mdx new file mode 100644 index 0000000..99b92c1 --- /dev/null +++ b/content/resources/how-to-maintain-a-3d-printer.mdx @@ -0,0 +1,110 @@ +--- +title: "How to Maintain a 3D Printer" +date: "2022-11-25" +categories: ["Guides"] +tags: ["Guides", "3D Printing"] +excerpt: "Like any machine, 3D printers wear out after long periods of use and require maintenance. Printers should be consistently maintained to prevent degradation in print quality and to reduce damage to the printer itself. This guide will take you through" +featuredImage: "/images/resources/how-to-maintain-a-3d-printer.JPG" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/88add5eb-032d-4ad4-9666-995e0ec0f2ea/IMG_1301.JPG) + +Like any machine, 3D printers wear out after long periods of use and require maintenance. Printers should be consistently maintained to prevent degradation in print quality and to reduce damage to the printer itself. This guide will take you through some main focus points regarding caring for a 3D printer. + +Note that this guide is focused on Creality FDM printers, however, the concepts are applicable to all FDM 3D printers. + +## Belts: + +Belts are usually used on 3D printers to move two or more of the axes. Belts must always be kept well-tensioned, and neglecting to maintain belt tension may lead to several issues in print quality. These issues include deformed dimensions, print surface defects, and layer shifting. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/209351d7-b59c-42d8-84a5-2e0e09482ca4/Layer+Shifting.PNG) + +*Credit: pattertj (Reddit)* + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/f352072e-fe5b-462b-a5f5-7fa110ee977a/surface+distortion.PNG) + +*Credit: Fordari (Reddit)* + +Generally, on FDM printers, each belt will have an end looped around a stepper motor and another looped around a free-running pulley. These systems will have their own way of tensioning a belt, usually a clamp on the belt or an adjustable pulley mount. To tension a belt on a printer, all that needs to be done is to increase the distance between the motor and the pulley, as seen by the red arrows in the image below. For example, on Ender 3D printers, the screws on the pulley mount can be loosened and pulled to the correct tension before tightening. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/8f076994-08c3-4c90-9c28-f57fac091649/X-axis.PNG) + +The belt needs to be tight enough so it doesn’t wobble when the axis moves but not so tight that it’s hard to move the axis. + +## Eccentric Nuts: + +Any printer that uses V-slot extrusion slides (like the example above) will have eccentric nuts attached to the gantry. Again, this is a different type of tightening that can cause similar issues to loose belts. If the head of the printer or the build plate is wobbling, this may indicate the eccentric nuts need tightening. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/e91aae1d-31b3-482f-8a4d-f21f97df80bb/Nut+adjustment.PNG) + +The image above shows that an eccentric nut is just a hexagonal nut with an offset centre. Twisting this nut with a spanner (the gantry does not have to be disassembled for this) will reduce the distance between the wheels and give the gantry a tighter hold on the extrusion. Again make sure the nut is not so tight that it’s hard to move the gantry. + +## Levelling: + +Many printers will, at some point, come across the issue of a print unsticking from the build plate. The frequency of this occurrence can be significantly reduced by correctly levelling the build plate. The idea is to get the nozzle to the perfect height from the build plate across the entire surface. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a81cc870-5260-4ebb-962d-95816db09798/levelling.png) + +*Credit: Raise3D* + +First, home the 3D printer, then disable the steppers (or turn the printer off). A great way to start levelling is to use a business card between the nozzle and the bed and tighten the nuts under the bed until you feel slight resistance when the card is moved. This process should be repeated twice. Then, an excellent way to properly fine-tune the levelling is to run a calibration print (some examples below). + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/28514653-1b00-4bcd-9e8d-8b1d80cdb98d/Bed+level+1.PNG) + +Ender 3 Bed Level by Elproducts: [Link to Files](https://www.thingiverse.com/thing:3235018) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a54df5b7-0062-40e9-b08b-eb94a4073305/bed+level+2.PNG) + +Ender 3 Bed Level by sahansudeepa: [Link to Files](https://www.thingiverse.com/thing:4642274) + +Print these files (scale them for your printer) and compare the results with the image above from Raise3D. It’s helpful to make slight adjustments to the nuts on the bed during the print. + +## Nozzles: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/28e5fa61-c378-49bd-ae87-dec61dd7c4f9/nozzle.JPG) + +Nozzles on 3D printers eventually wear out due to the constant flow of filament through them. The time this process takes may vary depending on which filaments are used. When a nozzle begins to wear out, you may experience the following issues: + +- Rough surfaces on prints. + +- Not enough filament extruding. + +- The nozzle becomes clogged. + +- The nozzle opening is too wide. + +Once you have found the correct nozzle for your printer, the steps to change it out are pretty simple: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/4a72b354-6586-4499-9bff-bed52880704d/change+nozzle.PNG) + +*Credit: Prusa Research* + +- Heat up the printer nozzle and remove the filament + +- Carefully unscrew the existing nozzle (it will be hot, so be careful). Hold the heat block with pliers or a spanner while you do this. + +- Screw in the new nozzle (while the printer is still hot). The nozzle must not be overtightened; it sometimes helps to tighten fully, then unscrew about a quarter-turn. + +- Finally, relevel the build plate. + +## Storing Filament: + +While it may not seem that filament requires maintenance, proper measures must be taken to care for the rolls when not in use. This is because filament absorbs moisture and collects dust. This may significantly reduce the quality and strength of prints and cause the nozzle to clog more frequently. + +A simple and effective way to store filament is to keep the rolls in an airtight container filled with reusable desiccant. For a more advanced system, it’s possible to construct a filament Dry-Box. There are many simple designs and guides out there, such as the article written by All3D: [DIY Filament Dry Box: How to Build One on a Budget](https://all3dp.com/2/diy-filament-dry-box-tutorial/) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/10059e80-2252-4989-85b8-081d6e2a5d1b/dry+box.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/727606f4-ca0c-4d20-a6c1-a15a7793b53d/Black+Spacer.png) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/514f66e4-0c76-4ca8-8451-b38d0c4b39e6/2021-12-16_16-01-19_1639630906.jpg-2_9aae3875-8e0b-41ff-8d46-14a38ce51916.webp.jpeg) + +# Say Hi to Makerhero! + +From filament, to repairs and spare parts. Micromelon has spent the last 6 years working with schools, businesses and individuals to repair, maintain and print great things. We run 3D printing training and webinars to the public focused around using 3D printers safely around students at schools, robotics clubs and at home. + +We also own MakerHero, our very own 3D printing filament and parts brand. + + [ + Buy Makerhero filament and parts + ](https://makerhero.com.au) diff --git a/content/resources/how-to-remote-control-the-rover.mdx b/content/resources/how-to-remote-control-the-rover.mdx new file mode 100644 index 0000000..228b8a3 --- /dev/null +++ b/content/resources/how-to-remote-control-the-rover.mdx @@ -0,0 +1,40 @@ +--- +title: "How to Remote Control the Rover" +date: "2024-12-12" +categories: ["Guides"] +tags: [] +excerpt: "Sometimes it can be useful to be able to remote control your Micromelon Rover through difficult terrain or obstacles in order to see what the sensors see. This can help students design algorithms and programs that better use the different sensors the" +featuredImage: "/images/resources/how-to-remote-control-the-rover.jpg" +--- + +Sometimes it can be useful to be able to remote control your Micromelon Rover through difficult terrain or obstacles in order to see what the sensors see. This can help students design algorithms and programs that better use the different sensors the rover has. + +In this guide, we’ll be going through how to use the ‘Rover View’ on the Micromelon Code Editor to allow you to remote control your rover, and get back useful sensor information from it. + +To access the Rover View, first connect the rover to the computer via the Code Editor, then click the button ‘ROVER’ with the rover icon next to the robot name: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/7334cf53-6b1c-4ab2-b402-a4a145418f8d/Complete+Rover+view+access.jpg) + +When clicked, this view should appear, showing you all the incoming information from the rover: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1734051433069-ZV3M91FO11VNR0H7JNEC/Sensor+View+Main.jpg) + +## Keyboard Controls + +Shown below is the keyboard layout of how the rover can be controlled. + +When the servos are being controlled, ‘Decrease’ reduces the respective servo by 5 degrees. Repeatedly pressing ‘Decrease’ for a while will be the equivalent of setting the servo to -90 degrees in the code editor. When the rover view is initially opened, both servos are set to 90 degrees, but will only move to it once one of the servo buttons have been pressed. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/024d4345-b528-456e-8c2c-13d2e06a1df1/Keyboard+Layout.jpg) + +## Sensors + +The Rover View shows a display called Sensor View when opened. This gives live information from all of the rover sensors which can be very useful for debugging and testing out how each sensor works. Shown below is a guide to the groups of sensor data: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/dec80707-9850-467a-9579-75f9687eac96/Sensor+View+Labelled.jpg) + +To learn how each of the sensors work and what the values mean, head to the rover sensor information page through the link below! + + [ + Rover Sensors + ](/rover-sensors) diff --git a/content/resources/how-to-use-i2c.mdx b/content/resources/how-to-use-i2c.mdx new file mode 100644 index 0000000..da4b91f --- /dev/null +++ b/content/resources/how-to-use-i2c.mdx @@ -0,0 +1,96 @@ +--- +title: "How to use I2C" +date: "2024-12-31" +categories: ["Guides"] +tags: ["Guide", "Guides"] +excerpt: "I2C (I-squared-C) is a communication technique used between multiple integrated circuits. The Micromelon Rover can use the I2C protocol to communicate with other I2C-compatible devices. This can expand the rover's capabilities, like using external se" +featuredImage: "/images/resources/how-to-use-i2c.PNG" +--- + +I2C (I-squared-C) is a communication technique used between multiple integrated circuits. The Micromelon Rover can use the I2C protocol to communicate with other I2C-compatible devices. This can expand the rover's capabilities, like using external sensors or controlling additional servos. + +## How I2C works: + +Before using I2C on the rover, it is recommended to understand how it works at a basic level. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/7105257a-8f69-4c42-8498-75b065115db2/Master+Slave.png) + +*Credit: Scott Campbell - Basics of the I2C Communication Protocol* + +I2C communication is used between a master and a slave IC (integrated circuit). The clock line (SCL) synchronises the timing of the data sent over the data line (SDA). The data can be sent back and forth between master and slave, but this cannot happen simultaneously. We refer to this as half-duplex. Multiple slaves and masters can be used with I2C, but all require a unique address. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/bd5ffc0f-d3df-430e-a20a-a506ba1c2d11/master+slave+address.png) + +*Credit: Scott Campbell - Basics of the I2C Communication Protocol* + +When a master wishes to send a packet of information to a slave, it starts by sending a 7-bit address through SDA. This is used to establish which slave is being communicated with. A master can write data to a slave or read data from a slave. The processes for these are slightly different, so we'll go through an explanation for both of them. + +I2C devices have an address, which is used as an identifier. They also have registers, which can be described as different locations inside the device containing information that can be read from or written to. + +#### Writing to an I2C slave: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/2a49148c-a641-46db-a765-7588404e5d58/write.PNG) + +*Credit: Texas Instruments - Understanding the I2C Bus* + +When writing to an I2C device, the master first sends the start signal, followed by the 7-bit address of the slave. Next comes the read/write bit, 0 if the master will write and 1 if it will read. The master waits until the slave sends an acknowledge (ACK) bit on the SDA line. Then the master sends through the register address it wishes to write to. Again, the slave must acknowledge the request. The master then transmits through the data, with the slave sending an ACK on each byte. The stop condition is sent to end the transmission. + +**Start and End condition - **To signal a start, SDA is changed from high to low while SCL stays high. SDA changes from low to high while SCL remains high to signal a stop. + +**Read and Write bit - **This specifies whether the master wants to read or write data. Read is a 1, and write a 0. + +**ACK/NACK bit - **These signal the device has received or has not received a byte of data. ACK is 0 and NACK is 1. + +#### Reading from an I2C slave: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/d6fe46c3-e792-419e-b9d5-ca54564328fb/Read.PNG) + +*Credit: Texas Instruments - Understanding the I2C Bus* + +Reading from an I2C device is similar to writing. The master first sends the start signal, followed by the 7-bit address of the slave. Next comes the read/write bit, and then the master waits until the slave sends an acknowledge (ACK) bit on the SDA line. The master next sends through the register address it wishes to read from and waits until the slave acknowledges on the SDA line. This is where reading and writing start to differ. + +The master sends the start condition again, followed by the slave's address and a read bit. Once the slave acknowledges, it will start sending a byte of data. The master acknowledges each byte of data and finally sends a negative acknowledgment (NACK) to signal the slave to stop sending. The stop condition is sent to end the transmission. + +## I2C on the rover: + +Fortunately, the protocols are taken care of when using I2C on the rover. To wire an I2C device correctly to the rover, use the pinout below and connect SDA and SCL to the respective SDA and SCL on the device you are connecting to. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/d8d56175-6268-4994-926b-ea7a29a7304e/Rover+pinout.png) + +Once connected, the coding is pretty simple regarding reading, writing and scanning. + +#### I2C Scan: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/d59b5379-adae-44a7-9ae1-4cb4dd1399fb/rover+scan.PNG) + +This code returns a list containing the addresses of all I2C devices currently connected to the rover. + +#### I2C Read: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/abcd637b-0760-4eb6-b89f-b27acc4538f5/rover+read.PNG) + +This block reads from a slave device. You must specify the slave address, the register to read from, and the number of bytes to read. This code returns a list containing each byte of data read from the slave device. The data you wish to read can be greater than 1 byte. + +#### I2C Write: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/382021b8-521a-4018-bd3c-4baa6b8015d5/rover+write.PNG) + +This block writes to a slave device. You must specify the slave address, the register to write to, the data you wish to write, and the data length in bytes. The data you wish to write can be greater than 1 byte. + +## Example uses: + +#### Rover with PCA9685 Servo Driver: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/92d26c4d-a024-482f-8a9a-058b24e983b3/IMG_1365.JPG) + +The PCA9686 servo driver is a device that allows 16 servos to be controlled using I2C communication. With this device attached, the rover can control up to 18 servos. + +#### Rover with Arduino Nano: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/554bb5b9-e49a-4423-bf4d-2e1f0640c737/IMG_1366.JPG) + +The Arduino Nano is a highly adaptable microcontroller with many I/O ports. The default I2C ports on the Nano are A4 (SDA) and A5 (SCL). The rover can use I2C to easily communicate with an Arduino. This enables the rover to access all of the I/O ports on the Nano and use these as external sensor ports. In the example above, the rover uses an Arduino Nano to receive data from a line sensor array. For more info on this project, click the button below: + + [ + Showcase: Rover and Arduino Line Follow + ](showcase-rover-and-arduino-line-follow) diff --git a/content/resources/install-guide-pycharm.mdx b/content/resources/install-guide-pycharm.mdx new file mode 100644 index 0000000..37a0b98 --- /dev/null +++ b/content/resources/install-guide-pycharm.mdx @@ -0,0 +1,154 @@ +--- +title: "How To Install PyCharm" +date: "2022-08-03" +categories: ["All", "Guides"] +tags: ["Python", "Install Guide"] +excerpt: "Learn how to install PyCharm" +featuredImage: "/images/resources/install-guide-pycharm.png" +--- + +PyCharm is a Python-specific IDE. This means it is specifically made to edit and run only python scripts. + +To download this IDE, go to the following link: [https://www.jetbrains.com/pycharm/download/](https://www.jetbrains.com/pycharm/download/) and download the Community version corresponding to your computer. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/f5e998d8-649c-47b4-9fcb-180556cad6ae/image2.png) + +Double-click on the installer once the file has finished downloading, and you should be greeted with the setup window. + +Keep clicking “Next” until you get to the “Installation Options” screen, and ensure that you tick the following boxes: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/9f2a1545-6810-4eba-b892-9a4bc3c69881/image4.png) + +Finally, click “Next”, then “Install”. + +Once PyCharm has been installed, open the application, and you should be greeted with the below screen. Next, click on the “New Project” button highlighted in red in the below screenshot. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/c7b14536-1009-444b-86f0-cdc83f1d5def/image3.png) + +PyCharm will greet you with the “New Project Window”, where you can set the save location of this project. It is best that you make a folder for your project somewhere you can find it later. Once you have selected your location, click the “Create” button highlighted in red in the following image to start coding. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/ce27afee-acb1-426b-bb46-c66d300fcc00/image6.png) + +PyCharm will then install Python if it hasn’t already been installed and open the code editor: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/c2e8c4e2-8f7f-4eda-afea-a86fc559bcc4/image5.png) + +We now need to install the Micromelon Python library so that we can communicate with the Rover. To do this, click on “View” in the top left corner of the screen, then click on “Tool Windows” in the drop-down, then finally click “Python Packages”. This will open a new panel at the bottom of the window where you can search for and install any python package. Click in the search bar highlighted in red, and type “micromelon”. Click on the result and click the “Install” button highlighted in red. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/f99c95df-4de8-43d0-a9ee-30e8a7f0d530/image1.png) + +Once the Micromelon python module has been installed, click the “-“ above the install button to close the packages panel. + +You have completed all the steps required to setup PyCharm to use Python and the Micromelon Python Module. Follow our guide [**here**](/resources/getting-started-with-the-python-module)** **to make your first Rover program. + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464675848-K9YEOYK65IWRFRX4QJ1R/blog+header+image+.png) + + ](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Robot Simulator](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +How to get started with the Micromelon Robot Simulator. + + [Read More →](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1626837419969-WBB4D85KQIXSOP750N5M/resized+banner+%281%29.png) + + ](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Micromelon Rover](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +Crash course on basic rover function, how and what to program and starter activities to attempt. + + [Read More →](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622691207784-0X6JV7RYRQXZAFRG712S/pisonescape.png) + + ](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + + [Activity: Prison Escape](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + +Learn branching and iteration using the colour sensors and motors. + + [Read More →](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) diff --git a/content/resources/install-guide-vs-code.mdx b/content/resources/install-guide-vs-code.mdx new file mode 100644 index 0000000..fc241e1 --- /dev/null +++ b/content/resources/install-guide-vs-code.mdx @@ -0,0 +1,178 @@ +--- +title: "How To Install Visual Studio Code" +date: "2022-08-03" +categories: ["All", "Guides"] +tags: ["Python", "Install Guide", "VS Code"] +excerpt: "Learn how to install Visual Studio Code." +featuredImage: "/images/resources/install-guide-vs-code.png" +--- + +VS Code (Visual Studio Code) is one of the most popular code editors on the planet. Thanks to many incredibly useful software add-ons it calls “extensions”, it can be used with almost any software language. Developed by Microsoft and available on Windows, Linux and macOS it is one of the most versatile source-code editors with nearly infinite customisability. + +Due to VS Code being a general-purpose code editor, you will need to follow a few extra steps before you can start coding the Micromelon Rovers using Python. + +### **Installing Python** + +You first need to install a version of the Python programming language equal to or above version 3.8. For the purposes of this guide, we will be using the newest release of python 3.10, version 3.10.5. You can find all available versions of Python by visiting the following link: [https://www.python.org/downloads/](https://www.python.org/downloads/) + +Look for the part of the webpage that looks like the below image, then click the download link next to the version you wish to use. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/cc4f4356-444e-4eb0-8700-8a8b7d91307a/image7.png) + +Scroll to the bottom of the next page until you find the “Files” section, as seen in the image below. Then click on the version corresponding to your computer. For this guide, we will be using a 64-bit Windows 10 machine, so we will click the last link. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1f50fe10-6b77-4e97-a93d-cce90b01b6dd/image9.png) + +Double-click on the installer once the file has finished downloading, and you should be greeted with the python Setup window. Ensure that the “Add Python 3.XX to PATH” check box is ticked down the bottom and click “Install Now”. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/b03dbcf6-d982-4805-b28f-7ba20d3c5498/image8.png) + +Once python has finished installing, you will be shown the following screen. Click on “Disable Path Length Limit” to ensure that Python will be accessible from the command prompt. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/677ac846-ddb7-4cc2-9cbb-c12c221cdb66/image11.png) + +### **Installing VS code** + +To download this IDE, go to the following link: [https://code.visualstudio.com/download](https://code.visualstudio.com/download) and download the version corresponding to your computer. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/0a21d588-36e2-4f1e-8aa4-ae3922ac34c0/image10.png) + +Double-click on the installer once the file has finished downloading, and you should be greeted with the setup window. Keep clicking “Next” until the window shown in the next image appears, ensure that the following checkboxes are ticked, and complete the installation. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/db2e5e0b-7986-460b-b42c-781e9f3c0f80/image2.png) + +Once setup has been completed, open VS Code and click on the extension’s logo on the left-hand side of the editor window. This is highlighted in red in the following image. Type “python” into the search bar, click the result highlighted in red in the following image and install it. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/dbf2135f-0ab7-4109-8261-f44ab1b58366/image1.png) + +Now navigate back to the project tab by clicking on the logo highlighted in red on the left-hand side of the editor window in the following image. You will need to make a folder on your computer where we will save our first project. Once you have made a folder, click on the “Open Folder” button highlighted in red in the below image to open it in VS code. It is best that you make a folder for your project somewhere you can find it later. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/67f128ab-9392-48c1-b5d9-730eb56cdb23/image4.png) + +We can now make a new Python file by clicking on the “New File” button and then clicking on “Python File” seen highlighted in red in the following image: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/38a4886f-1cce-4e34-b3cb-b286ee382a63/image3.png) + +We now need to install the Micromelon Python module, allowing you to connect to and program the Rover. To do this, click on the “Terminal” button highlighted in red, then click “New Terminal” in the drop-down. This will open a new panel at the bottom of the window where you can interact with the Windows Terminal, highlighted in red in the following image. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/93906949-f56c-4c5c-b7f7-e4842381ff02/image6.png) + +``` +`Click on the Terminal panel and type “pip install micromelon” to download and install the Micromelon Python package, as seen in the following image, and press enter.` +``` + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/6cf10325-2aa1-4f86-a9a6-b20f40b4aa39/image5.png) + +You have completed all the steps required to set up VS code to use Python and the Micromelon Python Module. Follow our guide here to make your first Rover program. + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464675848-K9YEOYK65IWRFRX4QJ1R/blog+header+image+.png) + + ](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Robot Simulator](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +How to get started with the Micromelon Robot Simulator. + + [Read More →](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1626837419969-WBB4D85KQIXSOP750N5M/resized+banner+%281%29.png) + + ](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Micromelon Rover](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +Crash course on basic rover function, how and what to program and starter activities to attempt. + + [Read More →](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622691207784-0X6JV7RYRQXZAFRG712S/pisonescape.png) + + ](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + + [Activity: Prison Escape](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + +Learn branching and iteration using the colour sensors and motors. + + [Read More →](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) diff --git a/content/resources/ir-sensor.mdx b/content/resources/ir-sensor.mdx new file mode 100644 index 0000000..6557923 --- /dev/null +++ b/content/resources/ir-sensor.mdx @@ -0,0 +1,312 @@ +--- +title: "The IR Distance Sensors" +date: "2021-06-18" +categories: ["All", "Guides"] +tags: [] +excerpt: "Learn what the IR distance sensors are and how to code them." +featuredImage: "/images/resources/ir-sensor.gif" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624056955058-9NJ754KNZ5MCZ87ZHLL3/spinning+annotated+version.gif) + +There are two infrared (IR) distance sensors located on the Rover. One on either side. + +**What Do They Do?** + +The IR sensors gives data on the distance between the robot the object the sensor is facing. There is a sensor on each side of the Rover so we can detect if there are any obstacles (like walls) near the sides of the Rover. + +The IR sensors work differently to the front Ultrasonic distance sensor. If you’re curious about how the Ultrasonic sensor works read our [ultrasonic sensor blog post](/resources/ultrasonic-sensor) + +**What is IR?** + +Before we jump into how the IR sensors work, let’s look at what IR actually is. IR stands for infrared. Infrared is a type of light. Human eyes cannot see **infrared light**. The light we see from the sun & light bulbs is called **visible light**. **Visible light** and **infrared light **are different types of light. + +All types of light are made up of something called electromagnetic waves. The science behind electromagnetic waves and how we see them is complicated, for now all we need to know is that they exist and they’re all around us. Electromagnetic waves vary in length, similar to how there are big waves and small waves at the beach. The diagram below shows the entire range of electromagnetic wave lengths. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624242877647-DBR3PP2LNB8TKWQJ8MZQ/my+spectrum+diagram.png) + +**Visible light** is electromagnetic waves with a length of 400–700 nanometres (nm). **Infrared light** is electromagnetic waves with a length of 700nm to 1mm. + +You can see in the diagram, there are a bunch of different types of electromagnetic wave ranges like radio, ultraviolet and gamma ray. The human eye can only perceive electromagnetic waves in the **Visible light** range but that doesn’t mean the other electromagnetic waves don’t exist. Lots of cool technology uses electromagnetic waves from all over the spectrum. + +**Who Can See Infrared Light?** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624259558972-9DK7XAQOW0SPZFW8DIFC/snake+joke.png) + +Howard the snake loves code + +There are some snake species that can detect infrared light but they don’t use their eyes. They have small pits on their faces that are sensitive to infrared light. They use this ability to hunt for prey. The infrared waves produced by the body heat of the snake’s prey is what the snake is able to detect. + +Although we cannot see it with our eyes, just like snakes we can use build devices to emit and detect infrared light. This is exactly what the IR sensor on our robot does. + +Ok, now that we know a bit about IR, let’s look at how the IR sensors on the rover work. + +### How do the IR Sensors Work? + +The IR sensor uses a laser to detect how far away objects are. Yes the Rover uses two IR lasers. How do these lasers help the Rover detect distance? It uses the following process: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624234434184-QRO7PVDGHKDS2LFKIFU2/ir+diagram+animation.gif) + +- The IR sensor emits an IR laser outwards. + +- The light travels out and bounces off of an object or surface. + +- The reflected light is now traveling back to the sensor. + +- The sensor detects the returning light. + +**Based on how long it takes the light to reflect back, the sensor calculates how far away the object is using on the speed of light.** + +**If the Rover’s IR Sensor Emits Infrared Lasers, Does that Make the Rover a Laser Gun?** + +Well yes, but actually no. + +### IR Problems & Limitations + +**The IR Sensors are Limited to a distance of Roughly 1.25m** + +The larger the distance the emitted IR laser has to travel, the more likely it is IR detector is unable detect it. Increasing the range of an IR sensor requires a more powerful laser. + +The Rover’s built in IR sensor are designed to be efficient in small scale activities, you can always add your own electronics to the Rover and equip more powerful sensors. To read more on how to add your own electronics [see this blog post.](/resources/showcase-rover-and-arduino-line-follow) + +### Programming the IR Sensors + +Open up the Code Editor, connect to a Micromelon Rover and open up the sensor view. To open sensor view, click the ROVER button next to your rover’s name. If you need a refresher on how to use the rover & code editor, check out [this post.](/resources/getting-started-with-the-micromelon-rover) + +In the sensor view dialog, the IR sensor values are located on the sides of the rover diagram. The left IR sensor value is on the left side, the right value is on the right. The CM next to the values indicates these are centimetre values. To make sure your sensor works, point the IR sensors at different objects and measure how far away they are. + +**What does 255cm mean?** + +255 is the returned value when an IR sensor is unable to determine an accurate value. If you are seeing 255 it means you may be attempting to detect objects further away than 1m. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623908456123-SFLGD6EJY3YZD9ICDIIR/opening+sensor+view.gif) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624249315328-XCV5AINWZLKUUJ15D6QW/using+sensor+mode++small.gif) + +**Using The IR Sensors In Code** + +Let’s write a simple program to print our left IR sensor values every second for 10 seconds. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624258875807-9MY12LCYZU1EWZGX5PXS/writing+a+piece+of+code+left+only.gif) + +- Start by adding a **Repeat 10 Times **block. + +- Inside the loop, place a **Print **statement. You can find this in the **Utilities **category. + +- Place the **Read IR Distance** block inside our **Print** statement. + +You can find the **Read IR Distance** block in the **Sensors **category. The python command is **IR.ReadLeft()**. + +- Add a **Delay For 1 Second** block so this loop waits 1 second before running again. + +- Press Play! + +When we run this; we will see the left IR distance value every second for 10 seconds. + +### Wrapping Up + +Now that we’re familiar with what the IR distance sensors are, how they work and how to program them it’s time to start doing some activities. Try these activities that are done best using the IR sensors. + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1647214830941-XGY83MWLD0GDNDSCOF33/driving+school.png) + + ](/resources/driving-school-basics) + + Mar 14, 2022 + + [Driving School Basics](/resources/driving-school-basics) + + Mar 14, 2022 + +Learn the basics of rover motors and sensors while navigating Duck City. + + [Read More →](/resources/driving-school-basics) + + Mar 14, 2022 + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1707816086925-3340QDPKLWEWZY20T5HC/maze.png) + + ](/resources/maze) + + Jun 4, 2021 + + [Activity: Maze](/resources/maze) + + Jun 4, 2021 + +Learn branching, iteration, algorithm design, and how to use the Rover’s motors, ultrasonic, colour, and IR sensors. + + [Read More →](/resources/maze) + + Jun 4, 2021 + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1707816124090-JAEYY3E5NGRDOMCLXOXE/Lane+guidance.png) + + ](/resources/lane-guidance) + + Jun 3, 2021 + + [Activity: Lane Guidance](/resources/lane-guidance) + + Jun 3, 2021 + +Learn iteration, branching, algorithm design, maths, and how to use the motors, ultrasonic, and IR sensors. + + [Read More →](/resources/lane-guidance) + + Jun 3, 2021 + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622686877131-P5FU2IDAB8U05PX8M98Z/sumo.png) + + ](/resources/sumo) + + Jun 3, 2021 + + [Activity: Sumo](/resources/sumo) + + Jun 3, 2021 + +Learn branching, iteration, algorithm design, and how to use the Rover’s motors, colour, ultrasonic, and IR sensors. + + [Read More →](/resources/sumo) + + Jun 3, 2021 + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622686289562-SMFP45KWR3TR66AGB1JW/surveybot.png) + + ](/resources/survey-bot) + + Jun 3, 2021 + + [Activity: Survey Bot](/resources/survey-bot) + + Jun 3, 2021 + +Learn iteration while using the IR sensors. + + [Read More →](/resources/survey-bot) + + Jun 3, 2021 + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464675848-K9YEOYK65IWRFRX4QJ1R/blog+header+image+.png) + + ](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Robot Simulator](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +How to get started with the Micromelon Robot Simulator. + + [Read More →](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1626837419969-WBB4D85KQIXSOP750N5M/resized+banner+%281%29.png) + + ](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Micromelon Rover](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +Crash course on basic rover function, how and what to program and starter activities to attempt. + + [Read More →](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622691207784-0X6JV7RYRQXZAFRG712S/pisonescape.png) + + ](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + + [Activity: Prison Escape](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + +Learn branching and iteration using the colour sensors and motors. + + [Read More →](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) diff --git a/content/resources/lane-guidance.mdx b/content/resources/lane-guidance.mdx new file mode 100644 index 0000000..f3eac5a --- /dev/null +++ b/content/resources/lane-guidance.mdx @@ -0,0 +1,134 @@ +--- +title: "Activity: Lane Guidance" +date: "2021-06-03" +categories: ["Activities", "All"] +tags: ["Branching", "Iteration", "Algorithm Design", "Ultrasonic", "IR", "Motors", "Maths", "Advanced"] +excerpt: "Learn iteration, branching, algorithm design, maths, and how to use the motors, ultrasonic, and IR sensors." +featuredImage: "/images/resources/lane-guidance.png" +--- + +** | ** + +Program rovers to stay in the middle of a lane marked out by walls. This is a simplification of the lane assist technology in cars. Use the front ultrasonic sensor and both IR sensors on either side of the rover to determine where walls are and drive as smoothly through the middle of the path as you can. Don’t run into the walls! + +#### + Relevant Coding Skills + + Branching + + Iteration + + Functions + + Variables + + --> + + Algorithm Design + + Maths + +#### + Relevant Rover Concepts + + Ultrasonic + + IR + + Colour + + Gyroscope + + Accelerometer + + Motors + + LEDs + + --> + + Buzzer + + --> + +Activity Demonstration + +### Setup + +Create a curving walled passage on the floor. The walls can be anything from books to wooden blocks, as long as they are solid and high enough to be detected by the IR and ultrasonic sensors. Tight passages and sharp corners greatly increase the difficulty. You can also add coloured tape as traffic markers through the passage that the robot must stop or turn around at. + +### Here’s Our Approach + +The core of this problem is that if the wall on the left is closer than the one on the right you need to turn right. This can be done with IF statements. Make sure you can do it with IF statements first before looking at this solution. Once you’re confident with this check out the PID example to make it even smoother. + +#### Stage 1 - Read Sensors + +Using clear variable names can make code easier to read and follow. We use variables to calculate the difference between the distances read by the two IR distance sensors. + +**Stage 2 - Calculate Motor Speeds** + +The math scale block lets you convert a number from one range to another. We used -35 and 35 because that suited the width of the passage we were using. That was about the maximum difference that would be possible between the left and right distance sensor readings. We converted that to -7 and 7 so that there would be a maximum difference of 14cm/s between the motors speeds. + +The left and right motor speeds are then calculated by adding/subtracting this value to a base forward speed so the rover always moves forward. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622691993293-2IRUGB473LA8DV46KI77/laneguidance-answer.png) + +Example Code + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/learning-binary.mdx b/content/resources/learning-binary.mdx new file mode 100644 index 0000000..147e4b0 --- /dev/null +++ b/content/resources/learning-binary.mdx @@ -0,0 +1,154 @@ +--- +title: "Learning Binary" +date: "2022-05-10" +categories: ["All", "Guides"] +tags: [] +excerpt: "Learn the basics of binary" +featuredImage: "/images/resources/learning-binary.jpg" +--- + +### What is Binary? + +Binary is a system of counting. You are most likely familiar with counting using 0-9. This is called the decimal number system. Binary is an alternative to the decimal number system. It existed before computers were invented. When computer scientists started building computers, they selected binary as the counting system that would run the computer’s brain. Binary is simple, it’s just 0 or 1. All computer’s decision-making skills comes down to just YES or NO, TRUE or FALSE, 1 or 0. + +But if computers only think in 1 and 0, do they understand numbers like 3, or 20 or 500? Yes! Binary numbers only use the 0 and 1 character are able to represent any number we can think of. We just have to learn how to translate a decimal number to a binary number. + +### Value of Binary Digits + +Each binary number is made up of digits each with their own value. Each digit can either be 1 or 0. If a digit is 1, that digit is ON. If it is 0, it is OFF. To get the final number you add together the values of the ON digits. Below we can see the value of the first 5 binary digits. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/281985df-ddf6-4fce-a71d-6581eaaa9e5c/key.png) + +To translate **18** to binary we write **10010**. We turn **ON **the **5th **digit and the **2st **digit. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/23680c32-28e5-4609-b52b-6f189f8848df/18.png) + +### Binary Examples + +The number 3 in binary is written 11. We turn ON the first and second digit. The value of the first digit is 1 and the value of the second digit is 2. Together they equal 3. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/95513405-117c-49e5-948f-c94597992f4f/3.png) + +--- + +The number 5 in binary is written 101. We turn ON the first and third digit. The value of the first digit is 1 and the value of the third digit is 4. Together they equal 3. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/8b2d09af-8b05-493f-8ce8-c2283f01a0c9/5.png) + +--- + +The number 20 in binary is written 10100. We turn ON the fifth and third digit. The value of the fifth digit is 16 and the value of the third digit is 4. Together they equal 20. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/05452208-8777-4c3f-a234-54161319c0ea/20.png) + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464675848-K9YEOYK65IWRFRX4QJ1R/blog+header+image+.png) + + ](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Robot Simulator](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +How to get started with the Micromelon Robot Simulator. + + [Read More →](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1626837419969-WBB4D85KQIXSOP750N5M/resized+banner+%281%29.png) + + ](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Micromelon Rover](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +Crash course on basic rover function, how and what to program and starter activities to attempt. + + [Read More →](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622691207784-0X6JV7RYRQXZAFRG712S/pisonescape.png) + + ](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + + [Activity: Prison Escape](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + +Learn branching and iteration using the colour sensors and motors. + + [Read More →](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) diff --git a/content/resources/line-following-h433h-89p7d-capak-lpsxl.mdx b/content/resources/line-following-h433h-89p7d-capak-lpsxl.mdx new file mode 100644 index 0000000..1816b06 --- /dev/null +++ b/content/resources/line-following-h433h-89p7d-capak-lpsxl.mdx @@ -0,0 +1,116 @@ +--- +title: "Activity: Seed Planter" +date: "2023-10-31" +categories: ["Activities", "All", "Simulator Activities"] +tags: ["Colour Sensors", "Branching", "Iteration", "Algorithm Design", "Advanced"] +excerpt: "Use the seed planter attachment to start your own little garden. Organise your garden layout and have the rover precisely deposit seeds in soft soil. Cover it up as you go, and finish with some water! SetupFor this task, you must purcha" +featuredImage: "/images/resources/line-following-h433h-89p7d-capak-lpsxl.jpg" +--- + +Use the seed planter attachment to start your own little garden. Organise your garden layout and have the rover precisely deposit seeds in soft soil. Cover it up as you go, and finish with some water! + +### Setup + +For this task, you must purchase some garden seeds of your choice, research planting conditions, and find how far apart seeds must be planted. Prepare a garden bed or ground area to ensure the soil is tilled and soft. Get two long beams of solid material and lay them parallel to the rover tracks (the rover will use these like a train). + +The seed planter attachment works by rotating the seed barrel so that seeds are loaded in it. Next, the barrel rotates out so the loaded seeds deposit into the planting cone. The attachment then drives the cone into the ground, pushing the seeds into the dirt. + +Once all the prep is done, load the seeds into the seed tank on the attachment and program the rover to move and plant them at the correct intervals. Once a row is complete, move the beams to the next row and go again. Repeat until your garden bed is complete! + +Note that the height of the planting cone may need to be adjusted depending on how high the robot is from the soil. + +### Here’s Our Approach + +**Constant - **A constant is a variable that never changes when the code is run. In python, we write this in all capitals with underscores between words. + +#### 1) Setting the Constants: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/d67b125e-0835-4a8b-beba-5267244b138d/Constants.jpg) + +Start by making constant variables to store the up and down positions for the cone servo + +The constants we have provided might need to be tweaked for your specific rover. This can be done through trial and error to find the best values for you. + +#### 2) The Plant Function: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/5dcbc7ec-3f25-4d8e-9362-9ca48d53fb3b/Plant+Function.jpg) + +A ‘*plant’* function should also be made to perform the whole act of planting a single cell. First, the cone is moved to the down position. Next, if the count is even, the barrel spins clockwise, otherwise it spins counterclockwise. This is to prevent the seeds from jamming. Then, the barrel is stopped, the cone comes back up, and the rover drives forward to the next cell. + +#### 3) Prepare the Servos: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/0d812361-27cc-494a-84d7-ef3aa35dab15/Servo+prep.jpg) + +Back in the main code, the servos should be initialised to the ‘cone_up’, and off positions. This is to ensure the servos are in the correct positions before starting. Add a 1 second delay to allow the servos to settle. + +#### 4) The Planting Loop: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/2a63fc72-543f-4fd3-af07-9795caf64188/Loop.jpg) + +Finally, create a loop that will execute several times (20 in this example), corresponding to how many seeds you want to be planted. We will store the amount of times looped in a variable called ‘count’. Inside this loop, run the ‘*plant’* function with and input of ‘count’ This means that the barrel will spin back and forth every time the robot plants a seed. + +#### Complete Code: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/55d08ced-477b-4d92-8478-df51c4fa3dd0/Complete+code.jpg) + +**Tip: ** + +Try making your own seed barrel and cone with different-sized holes for your different seeds. That will help you add a bit of variety to your garden! + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/line-following.mdx b/content/resources/line-following.mdx new file mode 100644 index 0000000..cf7dc92 --- /dev/null +++ b/content/resources/line-following.mdx @@ -0,0 +1,110 @@ +--- +title: "Activity: Line Following" +date: "2022-02-23" +categories: ["Activities", "All", "Simulator Activities"] +tags: ["Colour Sensors", "Branching", "Iteration", "Algorithm Design", "Intermediate"] +excerpt: "Learn the colour sensor and simple algorithm design while following the line." +featuredImage: "/images/resources/line-following.png" +--- + +[ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/d48b056d-c05e-4abd-aceb-0e397c551283/Simulator+Indicator.png) + + ](/robot-simulator) + +Program the rover to follow a line. Use the colour sensors on the rover to help detect where the line is and determine where the rover should move and turn to stay on the line. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1645647891907-6F5L61OFOMNV437NNH3T/line-following.png) + +Activity Demonstration + +### Setup + +When setting up ensure that the line to be followed has a clear contrast from the surface it is on and is thick enough for the colour sensors to detect. We recommend a thickness of 1-2cm, anything less will become difficult for the rovers. When designing a track, try and use rounded corners for turns. The sharper the turn the more difficult it will be to stay on the line. You can also incorporate additional challenges into your course. For example, have rovers detect and go around objects on the track or detect different coloured lines that indicate speed changes or turning directions at intersections. + +### Here’s Our Approach + +#### Stage 1 + +Add a while true loop and an ELSE/IF statement so that we can continuously ask our rover questions about its environment. + +#### **Stage 2** + +Now we need to add our brightness value that we are comparing to (in this case 210). + +If you need to check the brightness value of your line, you can see the colour sensor values in the Sensor View of the Code Editor. Press the ROVER button in the top bar of the Code Editor. You can see the colour sensor values in the top right table of Sensor View. + +#### **Stage 3** + +Pick a brightness value between your line and the colour next to your line (e.g. if your sensor reads 130 for black, and 230 for white, something like 180 would be a good starting point). Then get the rover to drive gradually left or right using the set motor speeds block. + +**Tip: ** + +Test with different numbers! In our example, a speed difference of 8 for the motors worked well, but numbers for your rover may vary. You could even experiment with different RGB values to see if that gives you a better result. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/e6dda0a5-3de2-41f2-ab19-0c502b693f90/line-following-answer.png) + +Example Code + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/967f926d-3f4c-4eaf-96e2-ef7b398a6c30/line-following-sensor-view.png) + +Sensor View in the Code Editor + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/maze.mdx b/content/resources/maze.mdx new file mode 100644 index 0000000..0ac9449 --- /dev/null +++ b/content/resources/maze.mdx @@ -0,0 +1,138 @@ +--- +title: "Activity: Maze" +date: "2021-06-04" +categories: ["Activities", "All", "Simulator Activities"] +tags: ["Colour Sensors", "Branching", "Iteration", "Algorithm Design", "Ultrasonic", "IR", "Motors", "Beginner"] +excerpt: "Learn branching, iteration, algorithm design, and how to use the Rover’s motors, ultrasonic, colour, and IR sensors." +featuredImage: "/images/resources/maze.png" +--- + +Create a maze that students have to navigate their rover through. Use the rovers two IR sensors and ultrasonic sensor to detect walls and where they can drive. Use the rovers colour sensor to detect the finish. + +#### + Relevant Coding Skills + + Branching + + Iteration + + Functions + + Variables + + --> + + Algorithm Design + + Maths + +#### + Relevant Rover Concepts + + Ultrasonic + + IR + + Colour + + Gyroscope + + Accelerometer + + Motors + + LEDs + + --> + + Buzzer + + --> + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622792353360-7EW09H59B15Z4MKI3BK1/maze.png) + + Activity Demonstration + +### Setup + +Construct mazes with any solid material that is tall enough for the rover IR & ultrasonic sensors to detect. We use boxes or wooden blocks to create our walls. The width of maze pathways will change how difficult the maze will be. For a challenging maze create pathways with 5-10cm allowance from each side of rover to the wall. The larger the width the easier. + +To add complexity to mazes create additional tasks for students to complete in the maze. E.g. use coloured floor tiles or tape on your maze floor and task them to find all colour sections in the maze before they can finish or change speed at different colours. + +### Here’s Our Approach + +Solutions to maze challenges can vary in intricacy depending on rovers sensors utilized and maze complexity. Our basic approach only involves the ultrasonic sensor and the left IR sensor. + +#### Stage 1 + +We start by creating a variable named wall which represents the distance (cm) from the side of our rover to the maze wall when the rover is placed in the middle of a maze path. + +#### **Stage 2** + +With an IF/ELSE IF/ELSE block we first check if the rover can move forward. If the ultrasonic sensor doesn't detect anything closer than our wall variable it will move forward. If it did not pass this check, it means there is a wall in the way and it now has to decide where to turn. + +#### **Stage 3** + +Our next case, the ELSE IF, will check if the left IR sensor detects a wall. If it doesn't, the way is clear & it will turn left. If it does detect a wall, it will go to the ELSE case and turn right. We then place the whole IF/ELSE IF/ELSE block in a while true loop so it will repeat this behaviour indefinitely. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/5f325f2d-9ac4-4896-8d87-633b6583eaf7/Screenshot+2023-10-31+083156.png) + +Example Code + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/micromelon-at-qsite-creativity-2022.mdx b/content/resources/micromelon-at-qsite-creativity-2022.mdx new file mode 100644 index 0000000..e28b796 --- /dev/null +++ b/content/resources/micromelon-at-qsite-creativity-2022.mdx @@ -0,0 +1,18 @@ +--- +title: "Micromelon at QSITE CreativITy 2022 Conference" +date: "2022-09-19" +categories: ["All", "News & Updates"] +tags: [] +excerpt: "Micromelon showcases their robotics platform at the QSITE CreativITy 2022 conference, connecting with Queensland's digital technologies educators." +featuredImage: "/images/logo.png" +--- + +Micromelon Robotics exhibited at the QSITE CreativITy 2022 conference, Queensland's premier event for digital technologies educators. The conference brought together teachers, curriculum specialists, and education technology providers to explore the latest trends and tools in digital technologies education. + +At the Micromelon booth, educators had the opportunity to try the Micromelon Rover firsthand, experiment with the Code Editor's block-to-Python progression, and explore the Robot Simulator. The team demonstrated how the platform aligns with the Australian Digital Technologies curriculum and supports teachers in delivering engaging, standards-aligned lessons. + +QSITE conferences are a key touchpoint for Micromelon to connect directly with the teachers who use their products daily. The team gathered valuable feedback on new features, discussed common classroom challenges, and shared tips and best practices with experienced Micromelon users. + +Several sessions at the conference featured educators presenting case studies of Micromelon deployments in their schools, highlighting creative ways they had integrated the Rover into cross-curricular projects spanning mathematics, science, and design and technologies. + +The QSITE CreativITy conference reinforced Micromelon's position as a leading provider of robotics education tools in Queensland and provided momentum heading into the 2023 school year. diff --git a/content/resources/micromelon-code-editor-260.mdx b/content/resources/micromelon-code-editor-260.mdx new file mode 100644 index 0000000..afc5082 --- /dev/null +++ b/content/resources/micromelon-code-editor-260.mdx @@ -0,0 +1,30 @@ +--- +title: "Micromelon Code Editor 2.6.0" +date: "2022-08-01" +categories: ["News & Updates", "All"] +tags: [] +excerpt: "Micromelon Code Editor 2.6.0 was released on the 2nd August 2022 Here at Micromelon we are continually making changes and improvements to all our product lines, including hardware and software. Previously the best place to find out about these update" +featuredImage: "/images/resources/micromelon-code-editor-260.png" +--- + +Micromelon Code Editor 2.6.0 was released on the 2nd August 2022 + +Here at Micromelon we are continually making changes and improvements to all our product lines, including hardware and software. Previously the best place to find out about these updates was the “What’s new” section within the Code Editor software itself. Going forward we will be writing up our changes and communicating them in blog style here on the resources page of the website. We’ll also offer sneak peeks at things that might be changing and coming soon. So let’s get to it, what’s new in Code Editor version 2.6.0. + +**Create New Project** + +The first change that we’ve made is to encourage students to name their projects in ways that make code easy to find. We still randomise project names as an option, but prompt when new projects are created if the student should change their project name to what they are working on. This also helps them set an intent on what they’ll be working on for the next little while. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/228191ca-573e-44ca-adc4-06a666cfd5d9/Screen+Shot+2022-06-02+at+4.35.40+pm.jpg) + +**Project Explorer** + +The biggest change we’ve made this time around is the addition of the Project Explorer on the left hand side of the code editor. After working with students for a few months at a time, we found that students would end up with too many projects to easily navigate in the top tab bar. With the project explorer, projects can now be closed and therefore only have the projects you’re currently working on active in the tab bar. + +For teachers, this also means student projects can be viewed at the bottom of the Project Explorer, with the “Class Folders” tab. Each class you belong to is shown here and each students work can be selected for viewing, without needing to enter the Teacher Dashboard to select students. We find this to be a much better way to navigate through student projects, during marking or just checking in on progress through sessions. Its also a really great way to show the class students interesting code and new ways to solve problems. + +Once you’re done with all the tabs you’ve got open, you can easily close them all by pressing the “Close all open tabs” button in the project explorer next to Open Tabs. You can also open and close the project explorer at any time. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/e6cb93c4-ed04-4c29-afca-40764af280bf/Screen+Shot+2022-06-02+at+4.38.47+pm.png) + +And that’s it for now! To get the latest version, jump into the Code Editor and click File -> Check for Updates or on Mac click Micromelon IDE -> Check for updates. diff --git a/content/resources/micromelon-code-editor-283.mdx b/content/resources/micromelon-code-editor-283.mdx new file mode 100644 index 0000000..663231f --- /dev/null +++ b/content/resources/micromelon-code-editor-283.mdx @@ -0,0 +1,118 @@ +--- +title: "Micromelon Code Editor 2.8" +date: "2025-06-04" +categories: ["News & Updates", "All"] +tags: [] +excerpt: "Micromelon Code Editor 2.8.3 was released in April of 2025. This post will detail some important changes and how they will affect institutions. Change: Institution Account SystemThe ProblemPreviously in the Code Editor accounts were split between hom" +featuredImage: "/images/resources/micromelon-code-editor-283.png" +--- + +Micromelon Code Editor 2.8.3 was released in April of 2025. This post will detail some important changes and how they will affect institutions. + +## Change: Institution Account System + +#### **The Problem** + +Previously in the Code Editor accounts were split between home users and institution users like admins, teachers, instructors and students. Until now, there has been no easy way to transition between all of these account types. For example, once a student account is created, if you wish to remove that account from your school you would have to delete the student account and all of it’s work. This was an issue if your institution has purchased a set number of licences and changes over student accounts per term. Each time you cycle your student accounts, you would need to be delete and re-create all your students. From **Code** **Editor 2.8.3** this is no longer the case. + +#### **The Solution** + +Going forward, all accounts can transition to a new account type without being deleted and recreated. All work done by an account persists for that account through a transition. Once a user creates an account, they can continue using that account whether they are programming in their own time at home or moving between different schools or roles inside an institution. + +#### **Inviting Users Will Replace Creating Users** + +The teacher dashboard will largely stay the same. The difference now is that instead of having methods to create accounts, you will instead have tools to invite accounts through email. Below is an example of how creating students will become inviting students. + +**Old: Creating Students** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623882884995-U2T31K5HAT27QR69W2LI/manually+creating+students.gif) + +**New: Inviting Students** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/50d7c783-6005-4a5d-96f0-30fa82282500/invite+students+manually.gif) + +## **New: Quick Join Code** + +Besides the old tools being updated to the invite system. There is now a new tool for associated accounts with your school, the Quick Join Code! + +#### What is a Quick Join Code? + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/99817204-564c-4e0f-9090-268549566902/quick+join+code.png) + +Every class has a unique 9 digit Quick Join Code. + +You can share this with your students and they can use it to join your class & school without needing and invitation. + +You can find the Quick Join Code for a class next to the class selection dropdown. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/e8e3d21f-97a7-4f31-8cff-790e4928888c/join+class+with+quick+join+code.gif) + +#### How Students Use Quick Join Codes + +- Instruct your students to open the user menu in the top left, then press the **Join Class** button. + +- In the dialog, your students can enter the **Quick Join Code** for your class. + +- Press the **Join Class** button. + +## New: Sign In Through Google, Microsoft and Apple + +Previously Micromelon Accounts were created with a username, password and email. We’ve now added the ability to sign in through your **Google**, **Microsoft**, and **Apple** accounts. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/e53ba018-e4c0-4688-8781-8f5380139d9b/new+sign+in+services.png) + +#### **Using The Sign-In Services** + +- Open the Code Editor + +- At the bottom of the login page, select the service you’d like to sign-in with. + +- Follow the instructions through your internet browser and allow Micromelon to access your user details. + +After you’ve authorised Micromelon to use your service details, you’ll be redirected to the Code Editor and signed in. + +## New: Data Recorder + +We’ve built a new tool for recording sensor data from the rover during program execution. After running a program, users can open up the new **Data Recorder** tool and download a spreadsheet which contains all values captured by the onboard rover sensors. Let’s look at how to use the data recorder. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1a226bc7-8ff0-4148-92c0-5fef073d778f/open-data-tool.gif) + +#### Using The Data Recorder In The Code Editor + +- Connect to a rover and run your code. + +- After your code has ended, press the **Data** button located in the rover controls area. + +- Select the sensors you want to include in the data. + +- Press **Save To CSV** to save your `.csv` .file to your computer + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/9cbb2c1c-e1b0-4dc0-85d6-1bd0903ab656/open-data.gif) + +#### Using The Data After Saving + +After saving your `.csv` file, you can open it in excel or excel like programs to view & parse the sensor data. + +#### Understanding The Data + +While your rover is executing your code, it snapshots the data from it’s onboard sensors roughly every 50-100 milliseconds. Each time this snapshot happens, the data recorder will save the snapshot. Once you export your data, each snapshot recorded will become a new row. The first row of data is a snapshot from the start of your code executing. The last row is a snapshot of the end of your code executing. When saving your data, you have the choice of picking which sensors to include. Regardless of which sensors you pick, the first two columns will always be `**time** and **time_milliseconds**.` These two columns are different representations of the point in time this snapshot was created. + +- `**time**` is a UTC timestamp. [Learn more about UTC timestamps here.](https://en.wikipedia.org/wiki/Coordinated_Universal_Time) + +- `**time_milliseconds**` is a unix timestamp in milliseconds. [Learn more about unix timestamps here.](https://en.wikipedia.org/wiki/Unix_time) + +The rest of the columns of your sheet will be for each sensor you chose to include in your `.csv` file. So if you chose to save the **Ultrasonic** sensor, you can find it’s data in the column with the header **Ultrasonic**. + +## Change: Interface Refresh + +We’re always aiming to improve the Code Editor. In this release we have updated the interface colour & spacing to clean up the Code Editor and make available actions more clear to the user. + +--- + +## **How To Update** + +To get the latest version, + +- Microsoft Users: Open the Code Editor. In the top bar click **File** -> **Check for Updates** + +- Mac Users: Open the Code Editor. In the app menu click **Micromelon IDE** -> **Check for Updates**. diff --git a/content/resources/micromelon-exhibits-edutech-2023.mdx b/content/resources/micromelon-exhibits-edutech-2023.mdx new file mode 100644 index 0000000..3813a24 --- /dev/null +++ b/content/resources/micromelon-exhibits-edutech-2023.mdx @@ -0,0 +1,18 @@ +--- +title: "Micromelon Exhibits at EduTECH Australia 2023" +date: "2023-08-24" +categories: ["All", "News & Updates"] +tags: [] +excerpt: "Micromelon showcases their complete robotics education platform at EduTECH Australia 2023, the country's largest education technology conference." +featuredImage: "/images/logo.png" +--- + +Micromelon Robotics exhibited at EduTECH Australia 2023, the country's largest education technology conference and expo, held at the Melbourne Convention and Exhibition Centre. The event brought together thousands of educators, administrators, and EdTech providers from across Australia and the Asia-Pacific region. + +At the Micromelon stand, visitors explored the full platform ecosystem: the Micromelon Rover with its range of 3D-printed attachments, the Code Editor with its unique blocks-to-Python progression, the Robot Simulator for virtual learning, and the classroom management tools that help teachers monitor and guide student progress in real time. + +EduTECH provided an opportunity to connect with school leaders and decision-makers from interstate, expanding Micromelon's reach beyond its Queensland home base. Conversations at the booth highlighted growing demand from schools in New South Wales, Victoria, and South Australia for robotics platforms that are curriculum-aligned and teacher-friendly. + +The team also presented on the topic of integrating robotics across the curriculum, demonstrating how the Micromelon platform can be used not just in Digital Technologies classes but also in mathematics, science, and design and technologies subjects. + +EduTECH 2023 reinforced Micromelon's growing reputation as a serious player in the Australian education technology landscape and generated significant interest from schools looking to adopt or expand their robotics programs. diff --git a/content/resources/micromelon-heads-north-to-cairns-state-high-school.mdx b/content/resources/micromelon-heads-north-to-cairns-state-high-school.mdx new file mode 100644 index 0000000..a6571b5 --- /dev/null +++ b/content/resources/micromelon-heads-north-to-cairns-state-high-school.mdx @@ -0,0 +1,22 @@ +--- +title: "Micromelon Heads North to Cairns State High School" +date: "2022-07-25" +categories: ["News & Updates", "All"] +tags: [] +excerpt: "Tim from Micromelon meeting with Design Technology teachers at Cairns State High School showing off some of the 3D printed parts they can use with the Micromelon Rover and collecting some future feature ideas for the Micromelon Robot Simulator In Jun" +featuredImage: "/images/resources/micromelon-heads-north-to-cairns-state-high-school.jpg" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/28426b28-c461-4454-9b5a-cb8af0f31f10/IMG20220608140409.jpg) + +Tim from Micromelon meeting with Design Technology teachers at Cairns State High School showing off some of the 3D printed parts they can use with the Micromelon Rover and collecting some future feature ideas for the Micromelon Robot Simulator + +In June, Micromelon headed up north to Cairns to visit some of our schools as part of the Gateway To Industry Schools ICT Program. As part of this trip we visited Bentley Park College and the TAFE campus to look at all their work in Virtual Reality particularly in the health sector. + +We also got to visit Cairns State High School, a GISP ICT partner, and also a Micromelon school. During the visit we met with the Design and Technology teachers at Cairns State High to discuss the ways the Micromelon Rover can be used to teach design, with 3D printing and robotics having a natural mesh. We also got a tour of their classrooms, seeing there 3D printing, laser cutting and even resin printing capabilities. It was also a great opportunity to gather some feedback from more teachers using the Micromelon platform to help feed future product development. + +On the last day of the trip we got to drop into Cairns State High School again to see two classes working on their Sumo robotics unit and Tim from Micromelon gave some tips and tricks on how to program a really effective sumo robot. It was really exciting to see the students using Micromelon Rovers along with the ACS supported Micromelon Rover Simulator to tune in their Sumo robots and practice against both real and virtual opponents. + +“Teaching with robotics offers so many learning opportunities for students. Programming the robots can reinforce the use of coding languages and software, and working with robotic components and sensors advances an understanding of hardware. Through the setting of challenging tasks, students use data, problem solving and collaboration to succeed just as they would in the workplace. It is great to see how emphatically Cairns State High School has taken to the Micromelon Robot Simulator and Code Editor to continue developing STEM skills in students.” - Matthew Jorgensen, ACS + +Overall the trip was a great opportunity to visit the region, talk to teachers and improve our offerings outside of South East Queensland. A huge thanks to ACS and The Gateway to Industry School ICT Program for supporting the trip and the Micromelon Robot Simulator in schools around Queensland. diff --git a/content/resources/micromelon-joins-uq-ilab-accelerator.mdx b/content/resources/micromelon-joins-uq-ilab-accelerator.mdx new file mode 100644 index 0000000..a2e0625 --- /dev/null +++ b/content/resources/micromelon-joins-uq-ilab-accelerator.mdx @@ -0,0 +1,18 @@ +--- +title: "Micromelon Joins UQ ilab Accelerator" +date: "2019-07-15" +categories: ["All", "News & Updates"] +tags: [] +excerpt: "Micromelon Robotics joins the University of Queensland's ilab Accelerator program, gaining access to mentorship, resources, and a network of innovators." +featuredImage: "/images/logo.png" +--- + +Micromelon Robotics has been accepted into the University of Queensland's ilab Accelerator, one of Australia's longest-running and most respected university startup programs. The program provides intensive mentorship, business development support, and access to UQ's extensive research and industry networks. + +Joining ilab marked a significant step in Micromelon's growth journey. The accelerator helped the team refine their go-to-market strategy, strengthen customer relationships with schools, and plan for interstate expansion. Working alongside other ambitious startups provided a collaborative environment that pushed the team to think bigger. + +The ilab program also connected Micromelon with experienced mentors from the education technology and hardware sectors. These advisors helped the team navigate the unique challenges of selling into schools — from procurement cycles and budget constraints to curriculum alignment and professional development requirements. + +During the program, Micromelon expanded its pilot deployments and gathered extensive feedback from teachers and students. This feedback directly influenced the development of features like the built-in lesson plans, classroom controls, and the progressive blocks-to-Python coding pathway that would become hallmarks of the platform. + +The UQ ilab experience reinforced Micromelon's roots as a University of Queensland-born venture while preparing the company for its next phase of commercial growth. diff --git a/content/resources/micromelon-partners-acs-ict-gateway-schools.mdx b/content/resources/micromelon-partners-acs-ict-gateway-schools.mdx new file mode 100644 index 0000000..3c00140 --- /dev/null +++ b/content/resources/micromelon-partners-acs-ict-gateway-schools.mdx @@ -0,0 +1,18 @@ +--- +title: "Micromelon Partners with ACS ICT Gateway to Industry Schools Program" +date: "2021-02-15" +categories: ["All", "Customer Stories"] +tags: [] +excerpt: "Micromelon partners with the Australian Computer Society to deliver robotics workshops through the Gateway to Industry Schools Program across Queensland." +featuredImage: "/images/logo.png" +--- + +Micromelon Robotics has partnered with the Australian Computer Society (ACS) to deliver robotics and coding workshops through the Gateway to Industry Schools Program (GISP) across Queensland. The partnership connects Micromelon's hands-on robotics platform with ACS's extensive network of schools, providing students with industry-relevant STEM experiences. + +The Gateway to Industry Schools Program is a Queensland Government initiative that builds partnerships between industry and schools to give students exposure to real-world career pathways. Through this collaboration, Micromelon delivers workshops where students program Rovers, solve challenges, and learn about careers in robotics, engineering, and software development. + +Initial workshops were delivered across a range of South East Queensland schools, reaching students from diverse backgrounds and year levels. The sessions combine introductory coding activities with more advanced challenges, ensuring engagement for both beginners and experienced students. + +Teachers involved in the program noted that the Micromelon workshops provided a valuable complement to their existing Digital Technologies curriculum. The hands-on nature of programming a physical robot helped make abstract coding concepts tangible and memorable for students. + +The ACS-GISP partnership marked Micromelon's first large-scale institutional collaboration and laid the groundwork for the program's expansion to hundreds of schools and thousands of students in subsequent years. diff --git a/content/resources/micromelon-partners-cross-river-rail-workshop.mdx b/content/resources/micromelon-partners-cross-river-rail-workshop.mdx new file mode 100644 index 0000000..c22364d --- /dev/null +++ b/content/resources/micromelon-partners-cross-river-rail-workshop.mdx @@ -0,0 +1,18 @@ +--- +title: "Micromelon Partners with Cross River Rail for Public Workshop" +date: "2022-06-29" +categories: ["All", "Customer Stories"] +tags: [] +excerpt: "Micromelon delivers a public robotics workshop in partnership with Cross River Rail, introducing families to coding and engineering at Brisbane's Experience Centre." +featuredImage: "/images/logo.png" +--- + +Micromelon Robotics partnered with Cross River Rail to deliver a public robotics workshop at the Cross River Rail Experience Centre in Brisbane. The event introduced families and young learners to coding and robotics through hands-on activities with the Micromelon Rover. + +Cross River Rail, one of Queensland's largest infrastructure projects, has a strong community engagement program that aims to inspire the next generation of engineers, builders, and technologists. The partnership with Micromelon brought a STEM education dimension to their public programming, connecting the world of infrastructure with the skills students will need for future careers. + +Workshop participants programmed Micromelon Rovers to navigate obstacle courses and complete engineering-themed challenges inspired by the Cross River Rail project. Activities were designed to be accessible to children as young as grade 3, with Micromelon facilitators guiding participants through the basics of block-based coding. + +The event drew strong attendance from families across Brisbane and demonstrated the versatility of the Micromelon platform beyond the traditional classroom setting. Public workshops like these help build awareness of robotics education and give children who may not have access to robotics at school an opportunity to experience hands-on STEM learning. + +The Cross River Rail partnership represented a growing trend of infrastructure and industry organisations using Micromelon's platform to engage communities in STEM education initiatives. diff --git a/content/resources/micromelon-pitches-at-icra-2018.mdx b/content/resources/micromelon-pitches-at-icra-2018.mdx new file mode 100644 index 0000000..3dd3f8c --- /dev/null +++ b/content/resources/micromelon-pitches-at-icra-2018.mdx @@ -0,0 +1,16 @@ +--- +title: "Micromelon Pitches at ICRA 2018 International Robotics Conference" +date: "2018-05-22" +categories: ["All", "News & Updates"] +tags: [] +excerpt: "Micromelon presents at the IEEE International Conference on Robotics and Automation (ICRA) 2018 in Brisbane, showcasing their educational robotics platform to a global audience." +featuredImage: "/images/logo.png" +--- + +Micromelon Robotics presented at the IEEE International Conference on Robotics and Automation (ICRA) 2018, held in Brisbane. ICRA is one of the world's largest and most prestigious robotics conferences, attracting researchers, engineers, and industry leaders from across the globe. + +The conference provided Micromelon with a unique platform to showcase the Rover and its integrated coding environment to an international audience of robotics professionals. The team demonstrated how the platform bridges block-based and text-based programming, making robotics accessible to students from grade 3 through to senior secondary. + +Presenting at ICRA connected Micromelon with leading robotics researchers, potential collaborators, and organisations exploring how educational robotics can inspire the next generation of engineers and computer scientists. The feedback reinforced that the team's approach — a purpose-built educational robot paired with progressive software — addressed a genuine gap in the market. + +Having ICRA hosted in their home city of Brisbane made the opportunity especially meaningful. The conference put Micromelon on the international radar and opened conversations that would shape the platform's development in the years ahead. diff --git a/content/resources/micromelon-pivots-to-remote-learning-covid-19.mdx b/content/resources/micromelon-pivots-to-remote-learning-covid-19.mdx new file mode 100644 index 0000000..455af19 --- /dev/null +++ b/content/resources/micromelon-pivots-to-remote-learning-covid-19.mdx @@ -0,0 +1,18 @@ +--- +title: "Micromelon Pivots to Remote Learning During COVID-19" +date: "2020-04-01" +categories: ["All", "News & Updates"] +tags: [] +excerpt: "When COVID-19 forces schools to close, Micromelon rapidly adapts its platform for remote learning with the Robot Simulator and virtual classroom tools." +featuredImage: "/images/logo.png" +--- + +When COVID-19 forced schools across Australia to close their doors in early 2020, Micromelon Robotics moved quickly to ensure students could continue learning robotics and coding from home. The team accelerated the development and release of the Micromelon Robot Simulator — a 3D virtual environment that lets students write and test code without needing a physical Rover. + +The pivot to remote learning was a defining moment for the company. While competitors who relied solely on physical hardware struggled to stay relevant during lockdowns, Micromelon's integrated platform approach — combining hardware, software, and simulation — proved its value. Teachers could assign coding challenges and monitor student progress entirely through the Code Editor and Simulator. + +Micromelon also developed new resources and lesson plans specifically designed for remote delivery. These materials helped teachers who were already overwhelmed by the transition to online teaching to continue offering meaningful STEM experiences without additional complexity. + +The response from schools was overwhelmingly positive. Many educators who discovered the Simulator during lockdowns continued using it even after returning to the classroom, finding it valuable for homework, extension activities, and schools that had limited numbers of physical Rovers. + +The COVID-19 period, while challenging, ultimately strengthened Micromelon's platform and demonstrated the resilience of its multi-product approach to robotics education. diff --git a/content/resources/micromelon-receives-ignite-ideas-fund-grant.mdx b/content/resources/micromelon-receives-ignite-ideas-fund-grant.mdx new file mode 100644 index 0000000..4c498e8 --- /dev/null +++ b/content/resources/micromelon-receives-ignite-ideas-fund-grant.mdx @@ -0,0 +1,18 @@ +--- +title: "Micromelon Receives Advance Queensland Ignite Ideas Fund Grant" +date: "2018-11-01" +categories: ["All", "News & Updates"] +tags: [] +excerpt: "Micromelon Robotics secures an Advance Queensland Ignite Ideas Fund grant to accelerate the development and commercialisation of their educational robotics platform." +featuredImage: "/images/logo.png" +--- + +Micromelon Robotics has been awarded a grant through the Advance Queensland Ignite Ideas Fund, a Queensland Government initiative designed to support innovative startups in bringing their products to market. + +The Ignite Ideas funding will accelerate the development of the Micromelon Rover and its companion Code Editor software, enabling the team to move from pilot deployments into broader commercial rollout across Australian schools. The grant supports manufacturing, software development, and the creation of curriculum-aligned teaching resources. + +The Advance Queensland program targets high-potential startups that can deliver economic and social benefits to Queensland. Micromelon's focus on STEM education — an area of national priority — aligned strongly with the program's objectives. The grant recognised both the quality of the technology and the team's demonstrated traction with schools. + +Securing government backing provided important validation for Micromelon's business model and mission. With the additional resources, the team expanded its engineering capacity and began developing the classroom management tools that would become a key differentiator of the platform. + +"The Ignite Ideas grant allowed us to invest in the features teachers were asking for," the team noted. "It was the bridge between having a great prototype and having a product ready for schools at scale." diff --git a/content/resources/micromelon-robotics-founded-in-brisbane.mdx b/content/resources/micromelon-robotics-founded-in-brisbane.mdx new file mode 100644 index 0000000..8de75c6 --- /dev/null +++ b/content/resources/micromelon-robotics-founded-in-brisbane.mdx @@ -0,0 +1,16 @@ +--- +title: "Micromelon Robotics Founded in Brisbane" +date: "2017-11-08" +categories: ["All", "News & Updates"] +tags: [] +excerpt: "University of Queensland engineering graduates found Micromelon Robotics with a mission to make robotics education accessible to every Australian student." +featuredImage: "/images/logo.png" +--- + +In November 2017, a team of University of Queensland engineering graduates officially founded Micromelon Robotics in Brisbane, Queensland. United by a shared passion for STEM education and a belief that robotics should be accessible to every student, the founders set out to build an educational platform that would grow with learners from primary school through to senior secondary and beyond. + +The founding team drew on their experience in mechatronics, software engineering, and education to begin designing the Micromelon Rover — a compact, sensor-rich robot purpose-built for the classroom. Unlike hobbyist kits that required extensive assembly and troubleshooting, the Rover was envisioned as a turnkey solution that teachers could confidently deploy from day one. + +From the outset, Micromelon's mission extended beyond hardware. The team began prototyping a companion code editor that would let younger students program with drag-and-drop blocks before transitioning to Python — bridging the gap between visual and text-based coding in a single environment. + +Brisbane's vibrant startup ecosystem provided early support, and the founders quickly connected with educators, accelerators, and mentors who shared their vision. What started as a university project was now a company with a clear purpose: to bring real-world robotics into Australian classrooms at scale. diff --git a/content/resources/micromelon-rover-australian-made-certification.mdx b/content/resources/micromelon-rover-australian-made-certification.mdx new file mode 100644 index 0000000..a0cd886 --- /dev/null +++ b/content/resources/micromelon-rover-australian-made-certification.mdx @@ -0,0 +1,18 @@ +--- +title: "Micromelon Rover Earns Australian Made Certification" +date: "2021-09-01" +categories: ["All", "News & Updates"] +tags: [] +excerpt: "The Micromelon Rover is officially certified as Australian Made, reflecting the company's commitment to local manufacturing and quality." +featuredImage: "/images/logo.png" +--- + +The Micromelon Rover has been officially certified as Australian Made by the Australian Made Campaign, earning the right to carry the iconic green-and-gold kangaroo logo. The certification recognises that the Rover is designed, engineered, and assembled in Australia. + +Australian Made certification requires products to meet strict criteria for local content, manufacturing, and quality. For Micromelon, the certification reflects a deliberate decision to keep production local rather than outsourcing to overseas manufacturers. This approach gives the team direct control over quality, enables faster iteration on hardware improvements, and supports Australian manufacturing jobs. + +For schools, the Australian Made certification provides additional confidence in the product's quality and provenance. Many education departments and procurement teams value locally made products, and the certification simplifies purchasing decisions for schools that prioritise supporting Australian businesses. + +The Rover's design and assembly takes place in Brisbane, Queensland, where the Micromelon team hand-assembles each unit and performs quality checks before shipping. This close-to-customer manufacturing model also enables the team to respond quickly to repair requests and provide direct support to schools. + +"Being able to put the Australian Made logo on our Rover is something the whole team is proud of," the Micromelon team said. "It represents our commitment to quality and to building something genuinely Australian." diff --git a/content/resources/micromelon-rover-wins-good-design-gold-award.mdx b/content/resources/micromelon-rover-wins-good-design-gold-award.mdx new file mode 100644 index 0000000..9e9c0c6 --- /dev/null +++ b/content/resources/micromelon-rover-wins-good-design-gold-award.mdx @@ -0,0 +1,18 @@ +--- +title: "Micromelon Rover Wins Australian Good Design Gold Award" +date: "2024-09-20" +categories: ["All", "News & Updates"] +tags: [] +excerpt: "The Micromelon Rover receives an Australian Good Design Award Gold in the Product Design category, recognising excellence in design and innovation." +featuredImage: "/images/logo.png" +--- + +The Micromelon Rover has been awarded an Australian Good Design Award Gold in the Product Design category, one of Australia's most prestigious design accolades. The Good Design Awards, administered by Good Design Australia, recognise excellence in design and innovation across a wide range of disciplines. + +The Gold award — the highest tier — acknowledged the Rover's thoughtful industrial design, its educational impact, and the seamless integration between hardware and software that defines the Micromelon platform. Judges praised the Rover's compact form factor, its durability in classroom environments, and the clever attachment system that allows students to expand the robot's capabilities with 3D-printed accessories. + +The Good Design Awards jury highlighted the Rover's ability to serve a wide age range — from grade 3 through to senior secondary — as a standout feature. The progressive coding pathway, from visual blocks to Python, was recognised as an innovative approach to scaffolding learning in computer science. + +Winning the Gold award places the Micromelon Rover alongside some of Australia's best-designed products and reinforces the team's commitment to creating hardware that is not only functional but also thoughtfully designed for the people who use it every day — students and teachers. + +"We've always believed that good design is central to good education," the Micromelon team said. "When a product is well-designed, it gets out of the way and lets learning happen. This award validates that philosophy." diff --git a/content/resources/micromelon-school-partnership-reaches-8000-students.mdx b/content/resources/micromelon-school-partnership-reaches-8000-students.mdx new file mode 100644 index 0000000..af74eaa --- /dev/null +++ b/content/resources/micromelon-school-partnership-reaches-8000-students.mdx @@ -0,0 +1,20 @@ +--- +title: "Micromelon's School Partnership Reaches 8,000+ Students" +date: "2025-03-26" +categories: ["All", "Customer Stories"] +tags: [] +excerpt: "Micromelon's partnership with the ACS Gateway to Industry Schools Program has now reached more than 8,000 students across Queensland, delivering hands-on robotics workshops in hundreds of schools." +featuredImage: "/images/logo.png" +--- + +Micromelon Robotics' partnership with the Australian Computer Society (ACS) through the Gateway to Industry Schools Program (GISP) has now reached more than 8,000 students across Queensland. What began in 2021 as a pilot delivering robotics workshops to a handful of South East Queensland schools has grown into one of the state's largest hands-on STEM education initiatives. + +The program delivers free, facilitator-led robotics workshops directly into schools, giving students the opportunity to program Micromelon Rovers and learn about careers in ICT, engineering, and robotics. Workshops are tailored to different year levels, from introductory sessions for primary students through to advanced Python programming for senior secondary students. + +Reaching the 8,000-student milestone reflects the program's broad geographic reach. Workshops have been delivered in metropolitan Brisbane, regional centres including Cairns, Townsville, Rockhampton, and Toowoomba, and remote communities that often have limited access to specialised STEM education resources. + +Teachers and school leaders consistently report that the GISP workshops spark lasting interest in digital technologies. Many schools that initially participated through the program have gone on to purchase their own Micromelon class sets, embedding robotics into their ongoing curriculum. + +The partnership has also generated valuable insights for Micromelon's product development. Feedback from thousands of students and hundreds of teachers across diverse school contexts has directly informed improvements to the Code Editor, Simulator, and teaching resources. + +"Reaching 8,000 students is a milestone we're incredibly proud of," the Micromelon team said. "But the real measure of success is the teachers who tell us their students are now choosing IT subjects, or the kids who say they want to be engineers. That's the impact we're working toward." diff --git a/content/resources/micromelon-surpasses-1000-rovers-deployed.mdx b/content/resources/micromelon-surpasses-1000-rovers-deployed.mdx new file mode 100644 index 0000000..242a361 --- /dev/null +++ b/content/resources/micromelon-surpasses-1000-rovers-deployed.mdx @@ -0,0 +1,18 @@ +--- +title: "Micromelon Surpasses 1,000 Rovers Deployed Across Australia" +date: "2023-11-15" +categories: ["All", "News & Updates"] +tags: [] +excerpt: "Micromelon reaches a major milestone with over 1,000 Rovers now deployed in schools and educational organisations across Australia." +featuredImage: "/images/logo.png" +--- + +Micromelon Robotics has reached a significant milestone: more than 1,000 Micromelon Rovers are now deployed in schools and educational organisations across Australia. From its beginnings as a Brisbane startup, the company has grown to serve hundreds of schools spanning every state and territory. + +The 1,000-Rover milestone reflects years of consistent growth driven by word-of-mouth recommendations from teachers, successful pilot programs, and partnerships with organisations like the Australian Computer Society. Each Rover represents a classroom where students are gaining hands-on experience with robotics, coding, and engineering. + +Reaching this scale has also validated Micromelon's decision to manufacture locally in Brisbane. The team has refined its assembly and quality control processes to maintain high standards while meeting increasing demand. Every Rover is still assembled, tested, and shipped from the company's Brisbane facility. + +Schools using the platform range from small rural primaries with a single class set of Rovers to large metropolitan secondaries with multiple sets integrated across year levels. The diversity of deployment contexts has pushed Micromelon to build a platform that is genuinely adaptable — working equally well for a grade 3 introduction to coding and a year 12 Python programming project. + +"Every Rover we ship represents students who are going to have a better, more engaging experience with STEM," the team reflected. "Hitting 1,000 is exciting, but we're focused on what comes next." diff --git a/content/resources/micromelon-teaches-robotics-world-science-festival.mdx b/content/resources/micromelon-teaches-robotics-world-science-festival.mdx new file mode 100644 index 0000000..0d891cb --- /dev/null +++ b/content/resources/micromelon-teaches-robotics-world-science-festival.mdx @@ -0,0 +1,18 @@ +--- +title: "Micromelon Teaches Robotics at World Science Festival" +date: "2024-05-17" +categories: ["All", "Customer Stories"] +tags: [] +excerpt: "Micromelon delivers hands-on robotics workshops at the World Science Festival Brisbane, inspiring hundreds of young learners at one of the world's premier science events." +featuredImage: "/images/logo.png" +--- + +Micromelon Robotics delivered hands-on robotics workshops at the World Science Festival Brisbane 2024, one of the world's premier public science events. Held across multiple venues in Brisbane's South Bank, the festival attracted tens of thousands of visitors, including families, students, and science enthusiasts from across Australia. + +Micromelon's workshop sessions gave young participants the chance to program Rovers through a series of guided challenges, starting with simple driving tasks and progressing to more complex activities involving sensors and automated navigation. Facilitators from the Micromelon team guided groups through the basics of block-based coding, ensuring every participant — regardless of prior experience — could successfully program their Rover. + +The World Science Festival workshops demonstrated Micromelon's ability to deliver engaging STEM experiences in high-volume public settings. Sessions ran throughout the festival, with hundreds of children and families participating across the multi-day event. + +Parents and educators who attended the sessions frequently asked about bringing the Micromelon platform into their schools, highlighting the value of public events in generating awareness and demand for robotics education. + +"Events like the World Science Festival remind us why we do what we do," the Micromelon team shared. "Seeing a child's face light up when their code makes a robot move for the first time — that's what it's all about." diff --git a/content/resources/micromelon-wins-bluebox-accelerator.mdx b/content/resources/micromelon-wins-bluebox-accelerator.mdx new file mode 100644 index 0000000..d70ac05 --- /dev/null +++ b/content/resources/micromelon-wins-bluebox-accelerator.mdx @@ -0,0 +1,18 @@ +--- +title: "Micromelon Named Winners of QUT Bluebox Robotics Accelerator" +date: "2018-03-20" +categories: ["All", "News & Updates"] +tags: [] +excerpt: "Micromelon Robotics wins the QUT Bluebox Robotics Accelerator, gaining mentorship and resources to develop their educational robotics platform." +featuredImage: "/images/logo.png" +--- + +Micromelon Robotics has been named the winner of the QUT Bluebox Robotics Accelerator program, a competitive program run by Queensland University of Technology to support early-stage robotics ventures in Queensland. + +The Bluebox accelerator provided Micromelon with access to mentorship from industry leaders, dedicated workspace, and resources to further develop the Micromelon Rover and its accompanying software platform. The program challenged the team to refine their business model, validate their product with real teachers, and prepare for commercial launch. + +Competing against a strong field of robotics startups, Micromelon stood out with its clear focus on the education sector and its integrated approach combining hardware, software, and curriculum-aligned content. Judges praised the team's deep understanding of the challenges teachers face when introducing robotics into the classroom. + +The win validated the direction Micromelon had been pursuing since its founding and provided crucial momentum as the team moved from prototype to pilot deployments in Queensland schools. + +"Winning the Bluebox accelerator was a turning point for us," the Micromelon team reflected. "It gave us the confidence and resources to go from building a robot in a garage to piloting in real classrooms." diff --git a/content/resources/micromelon-wins-peoples-choice-young-starters.mdx b/content/resources/micromelon-wins-peoples-choice-young-starters.mdx new file mode 100644 index 0000000..f1db229 --- /dev/null +++ b/content/resources/micromelon-wins-peoples-choice-young-starters.mdx @@ -0,0 +1,16 @@ +--- +title: "Micromelon Wins People's Choice at Young Starters Competition" +date: "2018-05-15" +categories: ["All", "News & Updates"] +tags: [] +excerpt: "Micromelon Robotics wins the People's Choice Award at the Young Starters competition, recognising the team's innovative approach to STEM education." +featuredImage: "/images/logo.png" +--- + +Micromelon Robotics has taken home the People's Choice Award at the Young Starters competition, a program celebrating outstanding young entrepreneurs across Queensland's startup ecosystem. + +The award, determined by audience vote, recognised Micromelon's compelling pitch and the team's clear vision for transforming how Australian schools teach robotics and coding. Presenting alongside a diverse group of young ventures, the Micromelon team demonstrated the Rover platform and shared stories from early classroom pilots that highlighted the impact of hands-on robotics learning. + +The People's Choice recognition brought valuable public visibility to Micromelon at a critical stage of the company's growth. With the Rover still in its pre-commercial phase, the exposure helped the team connect with educators, investors, and partners interested in supporting STEM education innovation. + +The Young Starters win came just weeks before the team would travel internationally to present at ICRA 2018, one of the world's premier robotics conferences. Together, these milestones marked a period of rapid momentum for the young Brisbane company. diff --git a/content/resources/prison-escape.mdx b/content/resources/prison-escape.mdx new file mode 100644 index 0000000..7a0e8a7 --- /dev/null +++ b/content/resources/prison-escape.mdx @@ -0,0 +1,144 @@ +--- +title: "Activity: Prison Escape" +date: "2021-06-03" +categories: ["Activities", "All"] +tags: ["Colour Sensors", "Branching", "Iteration", "Motors", "Intermediate"] +excerpt: "Learn branching and iteration using the colour sensors and motors." +featuredImage: "/images/resources/prison-escape.png" +--- + +** | ** + +Use the colour sensors to find and drive through the gap in the box. Rovers start in the middle facing a random direction and must leave through the gap, they cannot drive over the lines. + +#### + Relevant Coding Skills + + Branching + + Iteration + + Functions + + Variables + + --> + + Algorithm Design + + --> + + Maths + +#### + Relevant Rover Concepts + + Ultrasonic + + --> + + IR + + --> + + Colour + + Gyroscope + + Accelerometer + + Motors + + LEDs + + --> + + Buzzer + + --> + +Activity Demonstration + +### Setup + +Use tape on a table or floor or a printed arena to create an outline. It doesn't matter what colour the tape or surface is as long as they contrast to make it easy to detect with the colour sensors. Make sure the gap you leave in the wall is large enough for the rover the move through. + +The same code should work no matter where the rover is placed to start. Do not hard code all distances in your solution. + +### Here’s Our Approach + +There are multiple ways to solve this challenge. This starter approach simply moves the rover forward until it detects the wall. If we detect the wall it means we must reverse and change direction. This cycle repeats until the rover finds the exit. You can add randomness to the turning or some other strategy to find the exit faster. + +#### Stage 1 + +Use an IF Statement block with a condition that checks if the colour sensor sees the tape which is brighter than the floor. If the rover does detect the tape is underneath it, it knows it has hit a wall. We use motor blocks to go backward then turn. + +#### **Stage 2** + +When our rover does not see the tape we must just use a motor block to set the rover to move forward slowly in the ELSE branch. + +#### **Stage 3** + +We want to repeat this behaviour until the rover finds the exit so we put all our code in a repeat while true loop. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/3d2a8e6a-77e0-4ecb-9e5e-7d27e4b9c5c7/Screenshot+2023-10-31+083156.png) + +Example Code + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/puppy-bot.mdx b/content/resources/puppy-bot.mdx new file mode 100644 index 0000000..195ebd8 --- /dev/null +++ b/content/resources/puppy-bot.mdx @@ -0,0 +1,138 @@ +--- +title: "Activity: Puppy Bot" +date: "2021-06-03" +categories: ["Activities", "All"] +tags: ["Branching", "Iteration", "Functions", "Motors", "Ultrasonic", "Intermediate"] +excerpt: "Branching and looping with the ultrasonic sensor." +featuredImage: "/images/resources/puppy-bot.png" +--- + +** | ** + +Program the rover to act like a puppy. When the rover detects an object within 50cm using the ultrasonic sensor have the rover charge forward. Once the rover gets within 20cm from the object it stops and waits for it to move. When the puppy bot can’t see anything with the ultrasonic, slowly spin on the spot looking for something to follow. + +#### + Relevant Coding Skills + + Branching + + Iteration + + Functions + + Variables + + --> + + Algorithm Design + + --> + + Maths + +#### + Relevant Rover Concepts + + Ultrasonic + + IR + + --> + + Colour + + Gyroscope + + Accelerometer + + Motors + + LEDs + + --> + + Buzzer + + --> + +Activity Demonstration + +### Setup + +The distances used in the code can change depending on how much space you have. Just keep in mind the max range of the ultrasonic sensor is about 100cm. If the ultrasonic sensor can’t detect anything it will return a reading of 255cm. The below solution can be extended to use functions in each branch to make the rover better at finding and following people. + +### Here’s Our Approach + +#### **Stage 1** + +Start with setting up our IF statement with 3 branches. Firstly if the rover detects something within 20cm with the Ultrasonic sensor, stop the rover. Then use an ELSE IF (ELIF) that checks if the rover detects something within 50cm. Lastly we have the ELSE branch for when the ultrasonic sensor doesn’t detect anything close. + +#### **Stage 2** + +Place the appropriate motor blocks for the conditions. When the rover is stationary waiting for it’s owner to move, stop all motors. When the rover is starting to chase move forward at high speed. When it senses nothing from the ultrasonic just slowly turn on the spot searching. + +#### **Stage 3** + +We want to repeat this behaviour forever so place everything inside a repeat while true loop. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/6c51d7ee-9ced-45a5-ab6f-48ec3b39b1d5/Screenshot+2023-10-31+083156.png) + +Example Code + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/random-bug-bot-2.mdx b/content/resources/random-bug-bot-2.mdx new file mode 100644 index 0000000..b170427 --- /dev/null +++ b/content/resources/random-bug-bot-2.mdx @@ -0,0 +1,100 @@ +--- +title: "Random Bug Bot 2" +date: "2022-03-13" +categories: ["Activities", "All"] +tags: ["Colour Sensors", "Branching", "Iteration", "Variables", "Motors", "Maths", "Advanced"] +excerpt: "Program your rover to move like a bug!" +featuredImage: "/images/resources/random-bug-bot-2.png" +--- + +** ** + +Build from the Basic Bug Bot exercise but program the rover to have a more complex lifecycle. Create a mesh of food markers on the ground for the rover to detect with colour sensors. The new bug bot rover should now have health that goes down each second as the rover gets hungry. When the rover detects food on the floor, increase the rover's health. If the rover reaches zero health it will stop (and die). + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1647212932359-COOX3PZZOM19KIONJXYY/random+bug+bot+2.png) + +Activity Demonstration + +### Setup + +You can use coloured tape on the playing surface to act as food. Randomly place food in a 30cm by 30cm playing area where each piece of food is a roughly 1-2cm square. Rovers will have difficulty detecting food chunks that are any smaller. Students will have trouble getting their rovers to detect food if they program the rover to move at max speed. A slower rover will a better chance to detect food. + +### Here’s Our Approach + +#### Stage 1 + +Firstly we use a variable block for our health, we will set it to 20. We want to enter our normal lifecycle activity so we add a repeat while true loop. + +#### **Stage 2** + +There will be three stages to our lifecycle. Firstly, our bug bot will look for food using the colour sensor block. If it detects the colour of our food with the sensor we add 3 to the health variable and play the confirmation sound. + +#### **Stage 3** + +The second stage of our lifecycle is moving. We will use a left and right variable block here to make random numbers, then use those in our set motor speeds block to create random movement. We will also make the duration of movement set to 1 second all the time, this is important for our death countdown. + +#### **Stage 4** + +The final stage of our lifecycle is reducing life and checking for death. First we reduce our life by 1. We then use an if statement to check if we have reached 0 health. If we have, we are dead, break the loop to stop our lifecycle. If we have more than 0 health, we will display the health count on the rover screen. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/3e551567-3b57-4056-9be4-dfac9926e55d/random+bug+bot+2+answer.png) + +Example Code + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/random-bug-bot.mdx b/content/resources/random-bug-bot.mdx new file mode 100644 index 0000000..63cadec --- /dev/null +++ b/content/resources/random-bug-bot.mdx @@ -0,0 +1,142 @@ +--- +title: "Activity: Random Bug Bot" +date: "2021-06-03" +categories: ["Activities", "All"] +tags: ["Iteration", "Motors", "Maths", "Beginner", "Colour Sensors"] +excerpt: "Learn branching using the motors and maths." +featuredImage: "/images/resources/random-bug-bot.png" +--- + +** | ** + +Program the rover to act like a bug and move around randomly looking for food. Using the random number math block generate a speed for each of the motors. This will create a randomly moving bug rover. + +#### + Relevant Coding Skills + + Branching + + --> + + Iteration + + Functions + + Variables + + --> + + Algorithm Design + + --> + + Maths + +#### + Relevant Rover Concepts + + Ultrasonic + + --> + + IR + + --> + + Colour + + Gyroscope + + Accelerometer + + Motors + + LEDs + + --> + + Buzzer + + --> + +Activity Demonstration + +### Setup + +The random number generation of the rovers speed in our approach will have the rover move around randomly. Depending on the ranges students use, their random numbers may result in rovers driving a long way. Make sure to set the speeds and durations to suit the space you have and keep an eye on the rovers while they’re driving. + +### Here’s Our Approach + +#### **Stage 1** + +Start with an advanced motor block for setting different speeds for our left and right motors. Inside each of these slots we can use the random integer block from our math category. We use the numbers -15 to 15, any number that is negative will cause the motor to go backwards. The block has a chance of setting either motors to go forward or backward. + +#### **Stage 2** + +We need to control how long our rovers run at this speed. We can use the delay block to tell our code to continue what it’s doing for now. To continue the trend of our rover being unpredictable we will use another random integer block to set a random number between 1 and 3 for the amount of seconds our rover will move. + +#### **Stage 3** + +After the delay has ended we want our rover to pick new random speeds so we place the code in a repeat while true loop. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622690566137-AU2S6HCB737MCRZI69Z3/randombugbot-answer.png) + +Example Code + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/roaming-rover.mdx b/content/resources/roaming-rover.mdx new file mode 100644 index 0000000..b178cf5 --- /dev/null +++ b/content/resources/roaming-rover.mdx @@ -0,0 +1,140 @@ +--- +title: "Activity: Roaming Rover" +date: "2021-06-03" +categories: ["Activities", "All"] +tags: ["Iteration", "Ultrasonic", "Motors", "Beginner"] +excerpt: "Learn to avoid obstacles with the ultrasonic sensor." +featuredImage: "/images/resources/roaming-rover.png" +--- + +** | ** + +Program the rover to move around the room using the ultrasonic sensor to avoid running into obstacles. If the rover detects an object, turn away from the object and keep moving forward. + +#### + Relevant Coding Skills + + Branching + + --> + + Iteration + + Functions + + Variables + + --> + + Algorithm Design + + --> + + Maths + +#### + Relevant Rover Concepts + + Ultrasonic + + IR + + --> + + Colour + + Gyroscope + + Accelerometer + + Motors + + LEDs + + --> + + Buzzer + + --> + +Activity Demonstration + +### Setup + +When running the exercise, it can often work well to have a small obstacle course setup with flat surfaces like boxes and books for the rover to detect. The ultrasonic sensor works best against flat hard surfaces as it is detecting reflected sound waves. Angled or soft surfaces are harder to detect. + +### Here’s Our Approach + +#### **Stage 1** + +Use an IF statement block with a logic comparison block to check if the ultrasonic sensor detects an obstacle in front of the rover. + +**Stage 2** + +Use the IF ELSE block to turn when an obstacle is detected and drive forward when it is not detected using motor blocks. + +#### **Stage 3** + +Repeat this behaviour by wrapping everything in a while loop. While true will repeat forever. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/fae3c482-6d8c-4595-b85d-24375477e65a/Screenshot+2023-10-31+083156.png) + +Example Code + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/robot-simulator-launches-app-stores.mdx b/content/resources/robot-simulator-launches-app-stores.mdx new file mode 100644 index 0000000..3b6155f --- /dev/null +++ b/content/resources/robot-simulator-launches-app-stores.mdx @@ -0,0 +1,18 @@ +--- +title: "Robot Simulator Launches on Microsoft Store and Mac App Store" +date: "2020-09-15" +categories: ["All", "News & Updates"] +tags: [] +excerpt: "The Micromelon Robot Simulator officially launches on the Microsoft Store and Mac App Store, making virtual robotics accessible to students everywhere." +featuredImage: "/images/products/simulator-demo.gif" +--- + +The Micromelon Robot Simulator is now available for download on both the Microsoft Store and the Mac App Store, making it easier than ever for students and teachers to access virtual robotics environments on their school or home computers. + +The Simulator provides a fully 3D virtual environment where students can program a simulated Micromelon Rover using the same Code Editor they use with physical robots. This means code written for the Simulator transfers directly to real hardware — and vice versa — creating a seamless learning experience. + +Launching on the major app stores significantly reduced the friction of getting the Simulator installed on school-managed devices. IT administrators can now deploy the application through their standard software management tools, and students at home can install it with a single click. + +The Simulator includes a range of built-in environments and challenges, from simple driving exercises to complex navigation tasks. Teachers can use it for homework assignments, extension activities, or as a complete standalone coding platform for schools that do not yet have physical Rovers. + +Since its initial release during the COVID-19 remote learning period, the Simulator has been continuously improved based on teacher and student feedback. The app store launch represents the polished, production-ready version of a tool that has already proven its value in classrooms across Australia. diff --git a/content/resources/robot-simulator.mdx b/content/resources/robot-simulator.mdx new file mode 100644 index 0000000..8c475e5 --- /dev/null +++ b/content/resources/robot-simulator.mdx @@ -0,0 +1,316 @@ +--- +title: "Getting Started With The Robot Simulator" +date: "2021-06-14" +categories: ["All", "Getting Started"] +tags: [] +excerpt: "How to get started with the Micromelon Robot Simulator." +featuredImage: "/images/resources/robot-simulator.png" +--- + +The Micromelon Robot Simulator is a virtual environment filled with activities you can complete without needing a physical Rover. There are a large range of simulated activities with varying complexity. Completing them all will require the use of all available sensors and advanced coding techniques. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623713213272-S5X7Z2PFK740YWX47P68/duckietown.gif) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623713213272-S5X7Z2PFK740YWX47P68/duckietown.gif) + + Simulator Exercise: Driving School + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623713652801-B9YEJY6P6CN9720THK2D/sumo.gif) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623713652801-B9YEJY6P6CN9720THK2D/sumo.gif) + + Simulator Exercise: AI Sumo + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623713907748-YNJX1RWJ6HQG5JTS3OZO/maze.gif) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623713907748-YNJX1RWJ6HQG5JTS3OZO/maze.gif) + + Simulator Exercise: Maze Generator + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623714015700-TOVLCD376UVPPIMWSRB5/balanceboard.gif) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623714015700-TOVLCD376UVPPIMWSRB5/balanceboard.gif) + + Simulator Exercise: Balance Boards + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623713213272-S5X7Z2PFK740YWX47P68/duckietown.gif) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623713652801-B9YEJY6P6CN9720THK2D/sumo.gif) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623713907748-YNJX1RWJ6HQG5JTS3OZO/maze.gif) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623714015700-TOVLCD376UVPPIMWSRB5/balanceboard.gif) + +### What You Need To Get Started + +**The Simulator** + +To start, you will need to download and install the simulator. The Robot Simulator is available for download from the Windows Store and Apple App Store. + +**The Simulator Licence** + +Some of the activities in the Robot Simulator require a simulator licence to use. A Robot Simulator licence is attached to the same Micromelon accounts used in the Code Editor. Without logging into the simulator, you will be limited to activities that do not require a simulator licence. We’ll cover logging into the Simulator in the next section. + +New accounts have access to the Micromelon Simulator for 30 days. If you want to continue using all of its virtual challenges, [contact Micromelon](/contact) for sales. + +**The Code Editor** + +The robot simulator is a virtual recreation of a Micromelon rover. Just as you would need the code editor to control the Micromelon rover; you also need the code editor to control the robot simulator. The code editor is our block & python based coding environment. You can download the code editor for free from the download buttons below. By downloading this software you are agreeing to the [terms and conditions](https://micromelon-s3.s3-ap-southeast-2.amazonaws.com/Documentation/Browsewrap_agreement_for_free_use_of_software-Micromelon_Pty_Ltd.pdf). + +### Selecting A Simulator Activity + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623715664348-R7MHL3MHVRYTU20FRWDB/first+open+the+simulator.gif) + +When you first open the Robot Simulator, you’ll see a list of all the available activities on the left. Scroll through the list and find an activity that you would like to try. + +The **Spike Drop** and **Free Space** are great first activities. If you’re starting to become familiar with programming the Rover, try the **Prison Escape** or **Line Following** activity. Once you’re feeling more confident, the **Maze **or **Sumo **activities provide a stronger challenge. + +**Have To Login To Access an Activity?** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623715833913-DTLGM4T0I96CZV5X04I7/not+logged+in+message.png) + +Like we mentioned before, some of the Robot Simulator activities require a licence. The Robot Simulator licence is attached to your Micromelon account. This is the same one you use to log into the Code Editor. + +**How To Log Into The Simulator** + +- Press the LOGIN button. + +- You can either enter your Micromelon username and password in the form, or you can login automatically from the Code Editor you have already logged in to. To login from the Code Editor, enter the Bot ID of 9000 and click ‘GO!’. + +Here’s a demonstration of how to log into the simulator by connecting from the Code Editor. + +**Simulator View** + +**Code Editor View** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623732846328-YGFV87U2UQUWU8ILZVU0/connecting+to+the+simulator+to+log+in.gif) + +### Doing an Activity + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623724515970-FPO6L1SM9RGDI3CJQZPT/opening+spike+drop.gif) + +**Selecting an Activity** + +Click on the activity you want to try. You will see all the details for the activity appear on the right. Some of the activities such as **Sumo **and **Maze** have customisation options. + +For this post, we’re going to pick the **Spike Drop **activity. Let’s press the **PLAY** button. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623733460807-EOGI1CQ6S81BRUYX5LWU/setting+back+the+menu.gif) + +**Need To Return To The Menu?** + +If you need to return to the main menu to pick a different activity, you can press the MENU button in the top right corner or the CHOOSE EXERCISE button from the menu. + +### Completing The Activity + +When you select the activity, you will see your simulator Rover appear at the starting point for this activity. This is the Rover you will program to complete the activity. + +For the **Spike Drop** activity, we can see the Rover starts in the no parking zone. + +**Accessing Instructions and Tips** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623724781345-5JGUT9FFN2DEJK4S3EGC/opening+help.gif) + +If you’re not sure what you’re doing, you can open the activity help dialog by selecting HELP in the menu. + +**Running Code On The Simulator Rover** + +So for this activity we know we currently are in the no parking zone, and staying here is bad. We need to write code to drive our Rover forward, and avoid falling into the spike pit that’s right next to the parking zone (not a very safe design if you ask me). Let’s write some code to solve this situation. Our simulated Rover works exactly the same as a real Rover, so we program it in the same way. + +**How To Run Code From The Code Editor** + +- If you’re not already connected to the simulated Rover, enter 9000 into the bot ID input in the Code Editor. + +- Write your code. + +- Press the play button on the Code Editor. + +Once you press Run Code, the simulated Rover will execute the code. You can also run and stop your code from the simulator’s Rover control panel in the top right of the screen. The below animation shows using the blocks editor to write and execute an example solution to the activity. + +**Robot Simulator View** + +**Code Editor View** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1626845171596-B87T7QEKZNTLGHE5A2LE/new+running+code.gif) + +**Reset Your Rover Back To The Starting Point** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623720250430-ETBVG4NTD7AYNWMQWBYH/turn+off+reset+on+play.gif) + +By default, whenever you run code on the Rover it will be sent back to the starting point of the activity so that you don’t need to manually reset each time. You can enable and disable this behaviour from the menu. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623720364187-GTYRMEZAX5WC6IQOXXSK/resetting+manually.gif) + +**Manually Resetting The Rover** + +If you want to reset your Rover to the starting point at any time, you can press the reset button on the simulator rover control panel in the top right. + +**Changing The Camera Angle** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623722058046-ZK13R9CC48TXB45HU3V8/camera+controls+duplicate+removed.gif) + +If you would like you can change the camera angle to get a different view of the activity, use the camera controls in the bottom left. + +**Using Keyboard Controls & Sensor View** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623725058022-J414NXHL63ZNREL6RIRK/toggling+keyboard+controls.gif) + +**Enabling Keyboard Controls** + +Simulator Rovers can be controlled using the keyboard arrows. From the menu, click the ‘Enable Keyboard Controls’ toggle to enable this. You can use the keyboard arrow keys to move the Rover. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623729766836-C10HY95LXKNDQ26A5VYH/sensor+view.gif) + +**Using Sensor View With The Simulator Rover** + +Just like the normal Rover you can also use the sensor view from the Code Editor to see the sensor values of the simulator Rover. This can be useful to leave open while using keyboard controls in the simulator. Watching what the sensors see at different points in the activity can help you to write your solutions. Note that the battery sensor readings are not relevant in the simulator. + +**Next Steps** + +There are many activities to try in the simulator and most of them have an associated guide that including steps towards an example solution. You can try progessively more difficult challenges in the simulator using the guides written for the real robots. Some of these guides are shown below. Good Luck! + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1677810765340-7T3INBWSMN3FZ3Z9I3OH/IMG_1856.jpg) + + ](/resources/activity-making-music-beginner) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Activity: Making Music (Beginner)](/resources/activity-making-music-beginner) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Read More →](/resources/activity-making-music-beginner) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1677810765340-7T3INBWSMN3FZ3Z9I3OH/IMG_1856.jpg) + + ](/resources/activity-making-music-advanced) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Activity: Making Music (Advanced)](/resources/activity-making-music-advanced) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Read More →](/resources/activity-making-music-advanced) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1678160894853-587IRX3HY6N4T701GHY8/cover.jpg) + + ](/resources/activity-rover-theremin) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Activity: Rover Theremin](/resources/activity-rover-theremin) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Read More →](/resources/activity-rover-theremin) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1679013197398-E8V6MYZ0B28OMGLH5SXT/program.jpg) + + ](/resources/activity-servo-gauge) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Activity: Servo Gauge](/resources/activity-servo-gauge) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Read More →](/resources/activity-servo-gauge) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1677810765340-7T3INBWSMN3FZ3Z9I3OH/IMG_1856.jpg) + + ](/resources/activity-making-music-intermediate) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Activity: Making Music (Intermediate)](/resources/activity-making-music-intermediate) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Read More →](/resources/activity-making-music-intermediate) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1719456652868-A60EBBK9BOY7S6D987RW/IMG_3785.jpg) + + ](/resources/line-following-h433h-89p7d-capak-lpsxl) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Activity: Seed Planter](/resources/line-following-h433h-89p7d-capak-lpsxl) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Read More →](/resources/line-following-h433h-89p7d-capak-lpsxl) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1673240078055-UBVC2EKJV99G0ZCTBIHD/IMG_1578.jpg) + + ](/resources/activity-pingpong-attachment) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Activity: Ping-Pong Shooter](/resources/activity-pingpong-attachment) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Read More →](/resources/activity-pingpong-attachment) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1716518225046-XC8YN4EIX7ZRQOAOFVDB/IMG_3866.jpg) + + ](/resources/activity-forklift-attachment) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Activity: Forklift Attachment](/resources/activity-forklift-attachment) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Read More →](/resources/activity-forklift-attachment) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1673231471076-JXN2HUDF7O7BSHCC7NHW/IMG_1574.jpg) + + ](/resources/activity-claw-attachment) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Activity: Claw Attachment](/resources/activity-claw-attachment) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) + + [Read More →](/resources/activity-claw-attachment) + + [Activities](/resources?category=Activities), [All](/resources?category=All), [Simulator Activities](/resources?category=Simulator+Activities) diff --git a/content/resources/rover-van-gogh.mdx b/content/resources/rover-van-gogh.mdx new file mode 100644 index 0000000..eb13519 --- /dev/null +++ b/content/resources/rover-van-gogh.mdx @@ -0,0 +1,130 @@ +--- +title: "Activity: Rover Van Gogh" +date: "2022-03-29" +categories: ["Activities", "All", "Simulator Activities"] +tags: ["Branching", "Iteration", "Motors", "Maths", "Simulator", "Intermediate"] +excerpt: "Get your art on with the pen attachment!" +featuredImage: "/images/resources/rover-van-gogh.png" +--- + +** ** + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/d48b056d-c05e-4abd-aceb-0e397c551283/Simulator+Indicator.png) + + ](/robot-simulator) + +Using the pen attachment of the Micromelon Rover, try your hand at using code to create art. You’ll need to program your rover to move with pen-point precision to ensure your artwork is accurate. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/beb4daf2-a6ea-480b-a461-a8b8f77f4095/pen+attachment.png) + +Activity Demonstration + +**Not Sure What To Draw? Try These** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/0b702f2a-e46d-4fdf-88b7-dfcd91399360/square.png) + +Square + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1867be50-7cf7-458a-bd7a-c6999757495d/hexagon.png) + +Hexagon + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/766f3fa8-b2a6-4b1a-8512-8418d6506b4d/initials.png) + +Your Initials + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a7303ca5-ff82-40f5-bfda-e5d987c847ad/duck.png) + +A Duck + +### Setup + +**Download & Print Your Own Pen Attachment** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/c2d589e9-84d3-48cb-a7c6-f4c018c3eade/featured_preview_MM-Attachment_spider_holes.png) + +#### Pen Attachment 3D File + +[**OPEN THINGIVERSE**](https://www.thingiverse.com/micromelonrobotics/designs) + +You can 3D print a pen attachment and attach it to your Micromelon Rover. Find the 3D files for the pen attachment and many other attachments on the Micromelon Thingyverse page. + +**Use The Pen Attachment In The Simulator** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a24c6008-81d7-4078-bdaf-3f6c62b63871/pen+attachment+settings.png) + +The Micromelon Robot Simulator comes with a range of simulated Rover attachments. You can toggle the simulator rover attachment from the in-activity menu in the top left. + +### **How To Program The Pen Attachment** + +Once we add the pen attachment to the Rover we are able to control whether the pen point is making contact with the ground by raising it or lowing it with the server blocks. + +**Lowering The Pen** + +To lower the pen attachment we the servo motor connected to the attachment to -90 degrees. This will move the arm down. If your pen does not make contact with the ground, you should adjust the pen in the pen holder so it does. + +**Raising The Pen** + +If you do not want to draw you can raise the pen. Set the servo motor connected to the attachment to 0 degrees. This will move the arm up. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/0065fa85-e4a4-4452-8d2a-544b60a0f745/Screen+Shot+2022-04-22+at+2.15.47+pm.png) + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/running-a-term-of-digital-technologies-classes-in-the-robot-simulator.mdx b/content/resources/running-a-term-of-digital-technologies-classes-in-the-robot-simulator.mdx new file mode 100644 index 0000000..af70eba --- /dev/null +++ b/content/resources/running-a-term-of-digital-technologies-classes-in-the-robot-simulator.mdx @@ -0,0 +1,368 @@ +--- +title: "Running A Term Of Digital Technologies Classes In The Robot Simulator" +date: "2021-11-15" +categories: ["All", "Guides"] +tags: [] +excerpt: "Learn how you can use the Robot Simulator as the primary learning resource in a term of Digital Technologies classrooms." +featuredImage: "/images/resources/running-a-term-of-digital-technologies-classes-in-the-robot-simulator.png" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1633489356279-1C58ZVR8WM2XXI0PT4DV/simulator-on-devices.png) + +The **Micromelon Robot Simulator** is a virtual world for simulating the Micromelon rover and classroom activities. The simulator’s virtual environment facilitates digital technologies education without any physical setup. In this blog post, we will outline how you can run an entire term of Digital Technologies classes entirety with the Simulator. + +## **Why Use The Simulator** + +The simulator is entirely virtual! This makes it an ideal tool for learning remotely and allowing students to complete digitech work at home without needing to have a physical robot with them. The simulator has a range of typical digitech exercises like line following, sumo and mazes you can run with a single click. It can also enhance these exercises with computer generated challenges and AI opponents which is only possible inside a virtual world. The simulator also alleviates the hassles of running physical exercises by reducing the amount of classroom setup required. + +## **What You Need To Get Started With The Simulator** + +**Accessing The Micromelon Platform ** + +The simulator is just one part of the Micromelon learning platform. If you want to learn more about how your school can access the Micromelon platform you can [contact us to organize a demo or video call.](/contact) If you’re just looking to try out the simulator you can access the simulator for free for 30 days whenever you create a Micromelon home account from the Code Editor. + +**Downloading The Simulator** + +The simulator can be downloaded and installed on Mac and Windows computers. + +## **How To Use The Simulator ** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464675848-K9YEOYK65IWRFRX4QJ1R/blog+header+image+.png) + +#### **Getting Started With The Robot Simulator** + +[**READ MORE**](/resources/robot-simulator) + +Because this post will explore the simulator in the context of a term plan, we will assume you are already somewhat familiar with how to use the simulator. If this is your first time using the simulator you can check out our [Getting Started With The Robot Simulator](/resources/robot-simulator) post. The getting started post will cover the basics of the simulator interface and how to use the different simulator tools. + +## **Creating An 8 Week Term Plan** + +In this section we are going to outline 8 weeks of classroom & homework activities. We have assumed there is a single 1 hour lesson each week totalling 8 contact hours in the term. The outline will have 3 parts; **introduction**, **knowledge building **and **assessment**. In each part we will mention **exercises**. All these exercises are already built into the simulator and can be found in the simulator’s exercise list. Don’t worry if your term is not structured exactly like this, the content is adaptable to all sorts of classroom settings and schedules. + +### **Week 1: Introduction** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464675848-K9YEOYK65IWRFRX4QJ1R/blog+header+image+.png) + +#### **Getting Started With The Robot Simulator** + +[**READ MORE**](/resources/robot-simulator) + +The primary objective of this lesson is to make sure everyone in class has the Simulator & Code Editor installed and working. We will use the [Getting Started With The Robot Simulator](/resources/robot-simulator) blog post as our primary teaching resource which we can share with the class. This post covers how to set up and start using the simulator. + +**Downloading And Installing The Simulator & Code Editor** + +Depending on the age of your students, you can send the Getting Started post to students (or their parents) before class so they can install the Simulator & Code Editor before they arrive. If you are unable to have students prepare before class, you will need to spend time in class installing and downloading. Like we’ve mentioned, the primary objective this week is to make sure the class has everything working, don’t be too concerned if downloading takes up the majority of class time. Some schools may even be able to have the IT department install both pieces of software for the students at the beginning of the term. + +**Once Everything Is Installed ** + +Once everyone has the Code Editor & Simulator working, you can jump into coding. We will outline 3 exercises Driving Shapes, Prison Escape and Invisible bridge** **which you can cover in the remaining lesson time. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622684279112-XRY395UVS00KLZXFIGGS/drivingshapes.png) + +#### **Activity: Driving Shapes** + +[**READ MORE**](/resources/driving-shapes) + +#### **To Start With: Driving Shapes** + +The Driving Shapes exercise space offers a simple area for students to play around in. We typically ask students to program their rover to drive in a shape e.g. a square or a triangle. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622691207784-0X6JV7RYRQXZAFRG712S/pisonescape.png) + +#### **Activity: Prison Escape** + +[**READ MORE**](/resources/prison-escape) + +#### **If You Get To It: Prison Escape** + +If you complete Driving Shapes and still have time for more coding, we recommend moving onto the Prison Escape exercise. This exercise will introduce the colour sensor and some simple algorithm design which we will continue to use in future weeks. + +#### **For Students Needing A Challenge: Invisible Bridge** + +Invisible Bridge is an interesting challenge students can work through if they’re progressing quickly and finish the previous two exercises. Invisible bridge will also offer students an opportunity to start exploring concepts that will become more relevant for later weeks. + +**Homework** + +If students are unable to get the simulator & code editor installed and running, make sure they attempt this before the next class. If you’re limited on time in the term or looking to challenge students, we recommend you issue **Prison Escape** as homework activity for students who didn’t complete it in class. This will help ensure students are introduced to necessary concepts for future lessons. You can have students make small groups and present their solutions to the exercise to each other and discuss the quality of their program. + +### **Weeks 2-4: Building Knowledge** + +For this section of the term we will develop our student’s knowledge & understanding in preparation for the assessment in weeks 5-8. Because each curriculum grade-band dictates different required knowledge & understanding of students, we are unable to prescribe a single assessment to fit all classrooms (this will be discussed further in the assessment section). As this knowledge building section presupposes the assessment it too will also change depending on your class. + +To make this outline applicable for as many classrooms as possible, we will outline 3 exercises; **line following**, **maze solving **and **balance challenges, **describe what digitech knowledge understanding can be built on for each exercise and how they can be varied to match curriculum concepts. We will leave the decision to what exercises you include in your term plan and how long you spend on them to you, so you can best match them to your class’s requirements. These 3 exercises are presented in no particular order. You may choose to cover a new exercise each week or spend more than a week on a single exercise. + +**Line Following** + +#### + Relevant Coding Skills + + Branching + + Iteration + + Functions + + Variables + + --> + + Algorithm Design + + Maths + +#### + Relevant Rover Concepts + + Ultrasonic + + --> + + IR + + --> + + Colour + + Gyroscope + + Accelerometer + + Motors + + LEDs + + --> + + Buzzer + + --> + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/96be982b-d240-4e70-a1d6-9b7f72142622/linefollowing.png) + + The line following exercise provides students an opportunity to combine basic **iteration **and **branching **logic to form a fairly simple **algorithm**. Line following algorithms will require an understanding of the rover’s colour sensors. Colour sensors generate colour data which can give you an opportunity to explore collection and manipulation of **complex data types** with additional activities for the students centred around understanding and using the colour sensor. + +#### **How to Vary Complexity** + +Level 1: Having the rover follow the entire course is indicative of a successful, simple line following algorithm. And should be possible for most students. + +Level 2: Require students to detect the additional colour indicators (the red and blue markers). On red, rovers should turn right. On blue, rovers should understand they’ve completed the course and stop. This will require more sophisticated branching logic. + +Level 3: Challenge the class to produce the fastest line following algorithm. A shorter time window will require students to move the rover faster which can be challenging when using the sensors to guide direction. Having a friendly class competition will keep students who are progressing quicker occupied while slower moving students can still complete the exercise. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625100333671-W96TNT63WMR1GW4LCSHJ/colour+animation.gif) + +#### **Learning The Colour Sensor** + +[**READ MORE**](/resources/colour-sensor) + +#### **Related Reading For Line Following ** + +The colour sensor produces complex colour data. While completing this exercise you can run additional activities around understanding the data types we use to represent colour information e.g. RGB, HSL and hex codes. You can use the Colour Sensor blog post as an introductory teaching resource for colour sensors and colour data. + +### **Maze Solving** + +#### + Relevant Coding Skills + + Branching + + Iteration + + Functions + + Variables + + --> + + Algorithm Design + + Maths + +#### + Relevant Rover Concepts + + Ultrasonic + + IR + + Colour + + Gyroscope + + Accelerometer + + Motors + + LEDs + + --> + + Buzzer + + --> + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/531a3d67-a093-4d40-bdaf-ba09e4bb3ee5/maze.gif) + + Maze challenges provide students an opportunity to combine basic **iteration **and **branching **logic to form a simple **algorithm**. Maze solving algorithms will require students to utilise the rover’s Infrared Distance and/or Ultrasonic sensors. These distance sensors provide data on proximity of objects around the rover e.g. detecting maze walls. You can read the [Maze blog post](/resources/maze) which describes what maze solving is and insights in how to complete it. + +#### **How To Vary Complexity** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/d15e2d46-88fb-4d7e-b8c2-9d5ea19e3b97/maze+options.png) + +Maze options selector in the Robot Simulator + +The simulator maze exercise provides controls to change what kind of maze you can attempt. From the exercise options, you can customize the maze size and shape. + +Level 1: Complete a square maze + +Level 2: Complete a triangle maze + +Level 3: Complete a hexagonal maze + +There is no linear increase to complexity the larger a maze gets. An algorithm that can solve a small maze will also be able to solve a larger maze of the same shape, it will just take the rover more time but the underlying logic doesn’t need to change. Size 5 mazes are a good general size to have students attempt to complete. + +You can also add a time requirement for solving mazes, which will encourage students to create a more complete algorithm. + +#### **Related Reading For Maze Activities ** + +The ultrasonic sensor and Infrared Distance sensors are essential in creating any maze solving algorithm. If you’d like to read a further breakdown of how these sensors work check out our dedicated [Ultrasonic sensor post](/resources/ultrasonic-sensor) and [Infrared sensor post](/resources/ir-sensor). + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623915734752-YSUBGA76JUDTBIFYUGB3/ultrasonic+animation.gif) + +#### **Learning The Ultrasonic Sensor** + +[**READ MORE**](/resources/ultrasonic-sensor) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624234434184-QRO7PVDGHKDS2LFKIFU2/ir+diagram+animation.gif) + +#### **Learning The IR Sensors** + +[**READ MORE**](/resources/ir-sensor) + +### **Balance Challenges** + +#### + Relevant Coding Skills + + Branching + + Iteration + + Functions + + Variables + + --> + + Algorithm Design + + Maths + +#### + Relevant Rover Concepts + + Ultrasonic + + --> + + IR + + --> + + Colour + + Gyroscope + + Accelerometer + + Motors + + --> + + LEDs + + --> + + Buzzer + + --> + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/9c27398b-745d-44a1-91c5-92d58c74bb05/balance+board.png) + + There are two balance exercises in the simulator, **See-Saw **and **Balance Board**. Both these challenges require **algorithms **utilising **iteration** and a good understanding of the **accelerometer, **as well as the data it produces. Depending on algorithm implementation, branching logic may or may not be used. For example, an algorithm that relies heavily on complex mathematics to process the accelerometer data may not need to use branching. You can read the [Balance Bot blog post ](/resources/balance-bot)to get an explanation of balance challenges and insights into how to complete them. + +#### **How To Vary Complexity** + +**See-saw** is the more basic of the two balance exercises as it requires utilisation of only 1 axis of the accelerometer. We recommend all students start with see-saw first. Students should be able to apply their understanding of how to write algorithms which use branching and iteration similar to Maze Solving and Line Following. + +The **balance board **exercise requires utilisation of 2 axes of the accelerometer. The addition of another accelerometer axis provides a significant jump in complexity. As mentioned previously, students who are attempting a balance board may implement interesting solutions involving complex maths or may have many different branches in their code to successfully process the 2 directions of movement. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1624336913633-VY5GQ36LSDO8KPRET58Z/accelerometer+diagram.png) + +#### Learning The Accelerometer + +[**READ MORE**](/resources/accelerometer) + +#### **Related Reading For Balance Challenges** + +The accelerometer is essential for completing the balance challenges. If you’d like to read a further breakdown of how the accelerometer works, check out our dedicated [Accelerometer post](/resources/accelerometer). + +## **Week 5-8: Assessment ** + +In this section we will outline the final section of our term plan. This will be our assessment period that will have students create three accessible pieces of work. These three pieces of work disperse across multiple weeks to reduce a single large marking burden at the end of term. For this outline, we will use **Sumo** as our example exercise and will use the **Digitech Assignment - Sumo** as our assessment resource for students. You can open the Digitech Assignment - Sumo sheet from the button below. + + [ + DOWNLOAD DIGITECH ASSIGNMENT - SUMO PDF + ](/s/Sumo-Assignment-Sheet-Rules.pdf) + + [ + DOWNLOAD DIGITECH ASSIGNMENT - SUMO DOC + ](/s/Sumo-Assignment-Sheet-Rules.docx) + +The structure of this plan isn’t limited to a specific exercise in the simulator. You can apply a similar assessment structure we use in this outline to any of the exercises in the simulator. If sumo isn’t right for your class, we encourage you to experiment with other simulator exercises like **Driving School** or **Maze Generator** for your assessment. + +**Week 5: Introducing Sumo & Algorithm Design Flowchart** + +The aim of this week is to introduce students to the assignment tasks and allow them time to start preparing for their first assessment item, the algorithm design flowchart. + +#### **Introducing The Assignment ** + +The first step is familiarizing students with the assignment if they are unfamiliar with sumo. Showing videos of battle bots or demonstrating a sumo algorithm you’ve created is a great way to get them excited for the assignment. This will also start giving them ideas of how they might approach their sumo algorithm. Once everyone is familiar with the assignment challenge, we want to make sure the students understand the algorithm rules outlined in the assignment sheet. When everyone understands the assignment and what is required of their algorithm, it’s time to jump into the algorithm design flowchart. + +#### **The Algorithm Design Flowchart** + +The purpose of the algorithm design flow chart is to provide students an opportunity to demonstrate their understanding of computational thinking in a non-code setting. Think of this like the planning stage of an English essay. Students can brainstorm and organize their ideas and create a plan for how they will construct their algorithm. This planning stage prevents students regressing into unproductive, rote trial and error programming. This also gives students who have a conceptual understanding of coding logic but struggle to implement that understanding in code an opportunity to demonstrate their knowledge. + + You can make the flowchart due at the start of the next lesson so students can work on it at home. You can even use online tools like Draw.io to digitize their flow charts although pen and paper works great as well. + +**Week 6: Starting to Write Code** + +Hopefully by the start of this lesson students have completed their algorithm design flowchart. If students have yet to complete their flowchart, you can allow them to continue working on it in class and require it to be completed before they start coding. Once the flowchart is submitted and students have a plan for how they will develop their algorithm they can jump into coding. + +Student’s should start by coding the algorithm that they designed in their flowchart. Once they’ve developed an algorithm that matches the flowchart design, they can start practicing against the AI sumo opponents in the simulator. As they practice they will most likely need to improve their algorithm which will diverge from their flowchart. Diverging from their flowchart to improve their algorithm is encouraged as this is what will create opportunity for good reflection which will be the basis of our reflective questions assessment item. + +All of class time and time until the next lesson can be spent working on the development of the algorithm. If students begin to struggle with the complexity of their code it can be a good idea to take them back to their flow charts and adjust it with new and innovative ideas of how their Sumo robot will function. + +**Week 7: Algorithm Demonstration** + +This class is devoted to running and marking the **Algorithm Demonstration** assessment item. As **Digitech Assignment - Sumo** outlines, each student demonstrates their sumo algorithm battling each AI sumo opponent in a best of 3 match (total of 9 matches). Below we will outline different ways you can organize the demonstrations in your class: + +- Have each student demonstrate on a common screen (e.g. electronic whiteboard or projector) so the whole class can take part in each match. This can be a fun way to have the class excited and cheering each other on. + +- Go around to each student’s device and have them demonstrate to you personally. While you are going to each student, the rest of the class can be working on other things. + +- Have all students submit their final algorithm to you and run the code on your own device. The approach is great if you’re running short on class time as this can be done outside of class however this can also be logistically frustrating if you have a lot of students. + + The setup of your class & term will dictate which demonstration method is best. We recommend a mix of the first and second approach. Complete demonstrations personally with each student however make note of the best performing algorithm and have them present to the rest of the class after all demonstrations have been completed. This preserves the fun side of everyone watching a sumo battle together while still allowing class time to be used efficiently and nobody feels embarrassed in front of the class if their algorithm isn’t performing well. + +If all demonstrations have been completed or the final algorithm submitted for marking later, you can ask students to begin work on the **reflective questions** component of their assessment. We will allow for more time to complete this in the next week so don’t worry if you don’t begin this in class time. Students can begin work on this at home. + +**Week 8: Reflective Questions and Assignment Finish** + +This week will provide students with more time to complete the **reflective questions** assignment item. The purpose of this assessment item is to provide students an opportunity to reflect and describe what was successful and what was not. This is especially important for students who weren’t successful in their demonstrations and are looking to earn more marks. You may wish to change, add or remove to the list of questions provided in the sumo sheet depending on your class. + +Once submitted, the answers can be marked and results and feedback returned to students. The term is now completed, hooray! + +# **Wrapping Up** + +The robot simulator is a great teaching tool for any digital technologies classroom. Hopefully the 8 week term outline above will help you use the robot simulator in your digital technologies classroom. If you’ve got any feedback or suggestions for this post please [contact Micromelon support](/contact). diff --git a/content/resources/setting-up-a-school.mdx b/content/resources/setting-up-a-school.mdx new file mode 100644 index 0000000..61bdce4 --- /dev/null +++ b/content/resources/setting-up-a-school.mdx @@ -0,0 +1,452 @@ +--- +title: "How To Set Up A School" +date: "2021-06-14" +categories: ["All", "Getting Started"] +tags: [] +excerpt: "Learn how to set up your school through the teacher dashboard in the Micromelon Code Editor." +featuredImage: "/images/resources/setting-up-a-school.png" +--- + +This post will describe how we set up your school. When your school is fully setup, staff & students using Micromelon in your school will have a Micromelon account associated with your school. This will enable the use of classroom management features available in the Code Editor. + +#### What are the classroom management features? + + Disabling Student Rovers + + Muting Student Rovers + + Hiding Student Screens + + Share Your Screen + + Lock What Students Can See + + Open & Send Student's Work + +If you’ve already set up your school and are looking for more information about what the teaching tools are and how to use them, read [this post](https://resources.micromelon.com.au/resources/using-class-controls). + +## **Concepts To Understand Before We Start** + +#### What is a Micromelon Account? + +Micromelon accounts are created through the Code Editor. A Micromelon account is needed to login to the Code Editor. You can create an account by providing a username, email and password or through **Google**, **Apple**, or **Microsoft** sign-in services. All of the code you write while logged in will be saved to your account. + +#### Account Types + +When a new account is created it is considered a **home account**. Home accounts are not associated with any school. Through the tools we’ll describe in this post, we’ll look at ways you can invite home accounts to join your school as **student accounts**, **teacher accounts** or** instructor accounts**. Regardless of account type, your account will remain yours. Your login details will not change and all of your code will be preserved if you transition to different account types. + +**Student Accounts** + +- No control over school data + +- Cannot add or remove users from a school. + +- Cannot use any classroom management features. + +**Teacher Accounts** + +- Complete control over adding & removing students & classes. + +- Can use classroom management features for all classes in the school. + +**Instructor Accounts** + +- No control over adding & removing students & classes. + +- Can use classroom management features **only** for classes they are assigned to. + +--- + +**What are Classes?** + +Classes are collections of student accounts which are created by teachers. When a teacher or instructor applies a class control to a class, all student in that class will be affected. Students can be members of multiple classes. + +#### How School Invitations Work + +Invitations to join a school are sent via email. Both student and teacher invitations follow these rules: + +- When an invited email is associated with an existing Micromelon account the contents of the email will include instructions to accept or reject the invitation. + +- When an invitation is sent to an email that is not associated with a Micromelon account, the contents of the email will contain instructions on how to create a Micromelon account. Once an account has been created, a subsequent email will be sent with instructions to accept or reject the invitation. + +#### **How Many Accounts Can Be Invited To Your School?** + +When you purchase a Micromelon school package, you purchase a number of student licences. Each student account consumes 1 student licence. If you buy 50 student licences, you can have 50 student accounts in your school at one time. You can always remove students from your school to make room for new students. When you remove a student account from your school that account will transition back to a home user. All the data in that account is preserved and at any time it can be re-added to your school. + +Schools that have purchased a site-wide licence have unlimited student licences. + +All schools can have unlimited teacher & instructor accounts. + +## Getting Started + +#### **Download and Open The Code Editor** + +The Code Editor is the primary piece of software used to control Rovers and your school. If you have not already downloaded and installed the Code Editor you can [download it for Windows and Mac here](https://micromelon.com/download.html?setting-up-a-school). + +#### **The School Admin** + +The school admin is the first teacher account in your school. + +- If you are the school admin, you should have received word from the Micromelon team with your admin account details. Once you have the admin account, you can move to the next steps. + +- If your school has purchased Micromelon and you don’t have an account within the school, contact your school admin and they can invite you to join the school. + +- If your school has purchased Micromelon and you are unaware who is the school admin, please contact the [Micromelon team](https://micromelon.com/contact), and we can help you recover access to your school. + +## **Opening The Teacher Dashboard** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/3d219d54-5429-40cc-966b-40131f3783c2/opening+the+teacher+dashboard.gif) + +Opening the teacher dashboard + +The **Teacher Dashboard** is the interface where we control everything related to our school. + +After logging in as a teacher, you should have a **Manage School** button in the top left. Press this to open the **Teacher Dashboard**. + +If you are unable to see this button, your account is not yet associated with your school as a teacher. Instructions on how to solve this are above under the **Getting Started** header. + +#### Navigating The Teacher Dashboard + +The left hand side of the teacher dashboard contains the navigation to the four parts of the dashboard. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/94be651f-15e9-488b-86ac-91b516b8a51d/teacher+dashboard+navigation.png) + +**Classes** + +- Creating and editing the classes in your school. + +- Using the class management tools + +**Students** + +- Inviting and removing students from your school + +**Teachers** + +- Inviting & removing teachers from your school + +- Controlling instructor permissions + +**School** + +- Information on your school licence + +### Create Classes + +The first step to setting up your school is to create the classes you’ll need. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/b73b1bbb-fd78-41f6-a912-b4e2cc1c4390/creating+a+class.gif) + +Creating a class + +#### **Creating A Class** + +- Navigate to the **Classes** section of the teacher dashboard. + +- Press the **Create Class** button. + +- Enter the new class name. + +- Press **Create**. + +Once created your class will be opened. At any time you can change which class you have opened by selecting another class from the class selection dropdown at the top left. + +## Onboarding Teachers & Instructors + +In this step we’ll onboard the other teaching staff by sending them invitations to join the school. As outlined above, when the invited email is associated with an existing Micromelon account the contents of the email will include instructions to accept or reject the invitation. When an invitation is sent to an email that is not associated with a Micromelon account, the contents of the email will contain instructions on how to create a Micromelon account. Once an account has been created, a subsequent email will be sent with instructions to accept or reject the invitation. + +**Sending Teacher Invitations** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/fc63057a-6566-433f-9c1e-4cf4c456cc2c/inviting+teachers+to+school.gif) + +- Navigate to the **Teachers **section of the teacher dashboard. + +- Press the **Invite Teacher** button. + +- Enter the emails for all users who you wish to join your school as a teacher. + +- Press **Confirm**. + +All emails are now invited to your school. After the invitations have been accepted, teaching staff will be able to access your school. + +**Creating Instructors** + +Instructors first need to be invited to your school as teacher accounts. Once a teacher, they can be changed into a casual instructor. After changing a teacher to an instructor, you’ll need to assign them to their classes. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/772219db-d63e-4364-ac92-5b0395f9c07b/creating+instructor.gif) + +- Navigate to the **Teachers** dashboard. + +- In the list of teachers, find the teacher you wish to change to an instructor + +- Using the permission dropdown, change their role to **Casual Instructor**. + +- Using the **Edit Class Access** button, select which classes they can view. + +### Onboarding Students + +There are multiple methods for onboarding students into your school. The method you choose will depend on if your students already have Micromelon accounts, if you’ve created classes yet and if you plan to setup your school before lesson time or during a lesson. Choose the method which best fits your needs. + +**Method 1: Quick Join Codes** + +For this method; + +- You have a class created + +- Your students have the Code Editor open and are ready to log into their Micromelon account or create a new account. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/99817204-564c-4e0f-9090-268549566902/quick+join+code.png) + +#### What is a Quick Join Code? + +Every class has a unique 9 digit Quick Join Code. You can share this with your students and they can use it to join your class & school without needing and invitation. + +#### How Students Use Quick Join Codes + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/e8e3d21f-97a7-4f31-8cff-790e4928888c/join+class+with+quick+join+code.gif) + +- Have your students login to the Code Editor, or create their account if they do not have one. + +- Instruct your students to open the user menu in the top left, then press the **Join Class** button. + +- In the dialog, your students can enter the **Quick Join Code** for your class. + +- Press the **Join Class** button. + +**Method 2: Invitations Via Bulk Import Tool** + +For this method; + +- Your students do not need to have the Code Editor open or have an account yet. + +- You do not need to have your classes created yet. + +#### What is the Bulk Import Tool? + +The bulk import tool allows you to invite many emails at once by uploading a spreadsheet. If you haven’t got a spreadsheet but would like to use the importer tool, [fill in this template](/s/student-list-template.xlsx).** **The file you upload to the import tool is never saved by Micromelon. + +#### **How To Use The Bulk Import Tool** + +- Navigate to the **Students** section of the Teacher Dashboard. + +- Press the **Import Students **button. + +- Once the dialog opens, select or drag in the file you wish to use. You can use files of type **.xls** .**xlsx** or **.csv** + +- If your file has multiple sheets, pick the sheet you want to use. + +- Select the spreadsheet column that will be used to send invitations to. + +- If you would like, you can simultaneously choose to assign the invited student accounts to classes. + +- Select the rows you want to be imported. The toggle on the left side of a row controls if that row is selected. + +- Press **Confirm** + +All of the emails you’ve selected will now be invited to join your school as a student. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/5e99e170-b6eb-4816-9de4-865996ecc5b9/bulk+import+tool+part+1.gif) + +Step 1-3 + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/065b40f8-f40d-4348-9ea6-26df5c85fc0f/bulk+import+tool+part+2.gif) + +Importing students, step 4-8 + +**Method 3: Sending Student Invitations Manually** + +For this method; + +- Your students do not need to have the Code Editor open or have an account yet. + +- You do not need to have your classes created yet. + +#### **What Are Manual Student Invitations?** + +This method allows you to send invitations by typing in the emails. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/50d7c783-6005-4a5d-96f0-30fa82282500/invite+students+manually.gif) + +#### How to Manually Invite Students + +- Navigate to the **Students **section of the Teacher Dashboard. + +- Press the **Invite Student **button. + +- Enter the email for the accounts you want to create. You can add invite multiple emails at once if you need. + +- Press **Confirm** + +All of the emails you’ve typed in will now be invited to join your school as a student. + +## Moving Students In & Out Of Classes + +Class controls will apply to all students in a class. Your students may or may not be members of a class depending on which method you’ve used to onboard them. Teachers have control over adding or removing students from classes at any time. + +**Adding Students To A Class ** + +There are two ways to add students to a class. + +- The first method involves using the class **Quick Join Code** and does not require students to be a member of your school already. We’ve covered how to use the Quick Join Code in the above section title **Method 1: Quick Join Codes**. + +The second method allows you to manually add student accounts to a class. Students can be manually added to a class after they’ve accepted an invitation to join your school. + +#### Adding Students Manually + +- Ensure the students are members of your school via invitation or quick join code. + +- Navigate to the **Classes **section of the Teacher Dashboard. + +- Select the class you want to add users to from the class dropdown. + +- Press the **Add Member **button + +- Select all the students you wish to add to this class. + +**Important:** + +If you have recently invited a student to join your school they will not appear in this list until they have accepted your invitation. + +- Press **Confirm** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/644bda90-f566-4836-9735-73da922bc734/adding+students+to+a+class+manually.gif) + +**Remove Students From A Class** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/fe6694dd-4219-4447-915a-8e631882b975/remove+students+from+a+class+manually.gif) + +- Navigate to the **Classes **section of the **Teacher Dashboard**. + +- Select the class you want to add users to from the class dropdown. + +- Select all the students you wish to remove from this class. + +- Press the **Remove Member** button + +- Press **Confirm** + +The selected students will no longer be members of this class. If you selected the option to also remove them from your school, they will also be removed from the school. + +### All Done! Your School Should Be Ready To Go + +If you are still unsure how to setup your school. Please do not hesitate to contact the Micromelon team. + +**Curious About Using Class Controls?** + +If you want to learn more about the class controls and how to efficiently use Micromelon in your classroom, you can read a whole blog post on [how to use class controls here.](https://resources.micromelon.com.au/resources/using-class-controls) + +**Unsure About How To Program the Rover?** + +More information on how to use the Micromelon Rover and Code Editor, is available in [this blog post](https://resources.micromelon.com.au/resources/getting-started-with-the-micromelon-rover). + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464675848-K9YEOYK65IWRFRX4QJ1R/blog+header+image+.png) + + ](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Robot Simulator](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +How to get started with the Micromelon Robot Simulator. + + [Read More →](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1626837419969-WBB4D85KQIXSOP750N5M/resized+banner+%281%29.png) + + ](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Micromelon Rover](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +Crash course on basic rover function, how and what to program and starter activities to attempt. + + [Read More →](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622691207784-0X6JV7RYRQXZAFRG712S/pisonescape.png) + + ](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + + [Activity: Prison Escape](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + +Learn branching and iteration using the colour sensors and motors. + + [Read More →](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) diff --git a/content/resources/showcase-rover-and-arduino-line-follow.mdx b/content/resources/showcase-rover-and-arduino-line-follow.mdx new file mode 100644 index 0000000..eace0f8 --- /dev/null +++ b/content/resources/showcase-rover-and-arduino-line-follow.mdx @@ -0,0 +1,91 @@ +--- +title: "Showcase: Rover and Arduino Line Follow" +date: "2024-12-30" +categories: ["Customer Stories"] +tags: ["Extension"] +excerpt: "Using I2C and an Arduino Nano, a QTR-8RC line sensor array can be attached to the Rover to undertake advanced line follow. This guide is a showcase of how this can be done.An overview of the I2C protocol and how to use it with the Rover can be found" +featuredImage: "/images/resources/showcase-rover-and-arduino-line-follow.JPG" +--- + +Using I2C and an Arduino Nano, a QTR-8RC line sensor array can be attached to the Rover to undertake advanced line follow. This guide is a showcase of how this can be done. + +An overview of the I2C protocol and how to use it with the Rover can be found here. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/0064ee2c-fa49-4f36-917d-36d8186f7f6b/IMG_1366.JPG) + +## The Sensor (QTR-8RC) + +The [Pololu QTR-8RC](https://www.pololu.com/product/961) is an array of 8 infrared sensors spaced approximately 9.5cm apart. The advantage of using 8 sensors for line following is that the robot's speed can be significantly increased as there is a much lower chance of losing the line when moving. When paired with the [QTR library](https://github.com/pololu/qtr-sensors-arduino/tags), the sensor array can calculate the line's location relative to it, returned as a value between 0 and 8000. If the line is lost, the sensor also can remember the last sensor that saw the line in the array. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/199bbd60-5b04-4018-8221-0a8a469533e5/qtr.PNG) + +## The Arduino: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/8b833de8-39df-4b29-a0af-c3f9a1ca1e2b/Arduino+Nano.jpg) + +The Arduino Nano is the microcontroller used to control the QTR sensor. With the sensor plugged in, the Arduino uses the QTR library to locate the line's position under the sensor. The Arduino can then communicate with the Rover through the I2C communication protocol. The Rover requests data and receives a buffer containing the line's location determined by the infrared sensor array. This buffer is 2 bytes large because the maximum returned value of 8000 is larger than what a single byte can hold. + +Further information on the code and the wiring diagram can be found below. + +``` +#include `` +#include `` + +#define ADDRESS 10 +QTRSensors qtr; + +const uint8_t SensorCount = 8; +uint16_t sensorValues[SensorCount]; + +uint16_t position = 2000; +void setup() +{ + Wire.begin(ADDRESS); + Wire.onRequest(readSensor); + // configure the sensors + qtr.setTypeRC(); + qtr.setSensorPins((const uint8_t[]){9, 8, 7, 6, 5, 4, 3, 2}, SensorCount); + + delay(500); + pinMode(LED_BUILTIN, OUTPUT); + digitalWrite(LED_BUILTIN, HIGH); + + for (uint16_t i = 0; i `< 400; i++) + { + qtr.calibrate(); + } + digitalWrite(LED_BUILTIN, LOW); +} + +void loop() +{ + position = qtr.readLineBlack(sensorValues); +} + +void readSensor(){ + byte buf[2] = {(position & 0xFF00) >`> 8, position & 0xFF}; + Wire.write(buf, 2); +} + +``` + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/fa37f1a5-6305-4d37-93ed-a107c3a9ff5a/Circuit.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/89879a50-6e70-4104-a956-df8888c6d462/rover+expansion+header.png) + +## The Rover + +A 3D-printed mount was designed to mount the Arduino and the line sensor array. Once all the electronics were connected, the code to request the data from the Arduino was uploaded to the Rover. The snippet below was used to request the data from the Arduino. Using the read_sensor function, the Rover could receive incoming data from the Arduino. + +``` +ADDRESS = 10 +REGISTER = 0x1 + +def read_sensor(): + packet = I2C.read(ADDRESS, REGISTER, 2) + packet = (packet[0] << 8) | packet[1] + return packet + +``` + +The above concepts were then assembled to create a PID line follower. diff --git a/content/resources/spike-drop.mdx b/content/resources/spike-drop.mdx new file mode 100644 index 0000000..b4d1803 --- /dev/null +++ b/content/resources/spike-drop.mdx @@ -0,0 +1,96 @@ +--- +title: "Activity: Spike Drop" +date: "2022-02-23" +categories: ["All", "Simulator Activities"] +tags: ["Colour Sensors", "Branching", "Iteration", "Ultrasonic", "Robot Simulator", "Beginner"] +excerpt: "Simulator activity for learning ultrasonic, colour sensor and iteration." +featuredImage: "/images/resources/spike-drop.png" +--- + +[ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/d48b056d-c05e-4abd-aceb-0e397c551283/Simulator+Indicator.png) + + ](/robot-simulator) + +Find a way to drive the simulator rover into the green parking lot. Use your colour or ultrasonic sensor to help you find the safe zone. Watch out though, go to far and you’ll fall and get spiked! + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/c5ccabcf-2e0e-4a45-943d-85780203bb1f/spike-drop-demo.gif) + +Activity Demonstration + +### Setup + +This activity requires no physical setup, just make sure you connect the Code Editor to the Robot Simulator. If your unsure what the Robot Simulator is or need help setting it up, see our post [Getting Started With The Robot Simulator.](https://micromelon.com.au/resources/robot-simulator) + +### Here’s Our Approach + +#### Solution 1 + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/6d00470f-7747-44c6-8654-4909fed71a4c/spike-drop-answer-1.png) + +The first solution involves using the ultrasonic sensor. We use a repeat while true block, but instead of leaving it on true we tell it to repeat while the ultrasonic sensor detects a number larger than 55. Once our rover detects the warning wall suspended above the spikes within 55cm it means we are directly in our safe zone and can stop moving. + +#### **Solution 2** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/e4138ffa-d19c-4fc1-a8b6-ce698d0179f0/spike-drop-answer-2.png) + +The second solution is a bit more dynamic, uses the colour sensor and will work better if you move the rover and it needs to detect green multiple times within the one program. The benefit here is that the program won’t end on green, but it keeps making sure the colour is detected. We do this by using an IF/ELSE statement inside of a while true loop. We look for the colour green as before, but this time instead of ending the loop we just keep telling the motors to stop moving, and any other colour we will still keep the forwards movement. + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/stop-on-colour-change.mdx b/content/resources/stop-on-colour-change.mdx new file mode 100644 index 0000000..7f8bce4 --- /dev/null +++ b/content/resources/stop-on-colour-change.mdx @@ -0,0 +1,150 @@ +--- +title: "Activity: Stop On Colour Change" +date: "2021-06-03" +categories: ["Activities", "All"] +tags: ["Colour Sensors", "Branching", "Iteration"] +excerpt: "Learn branching, iteration, and how to use the colour sensors." +featuredImage: "/images/resources/stop-on-colour-change.png" +--- + +Program the rover to keep moving forward until it detects a change of floor colour with the colour sensors. Once it detects this colour, stop the rover. + +#### + Relevant Coding Skills + + Branching + + --> + + Iteration + + Functions + + Variables + + --> + + Algorithm Design + + --> + + Maths + +#### + Relevant Rover Concepts + + Ultrasonic + + --> + + IR + + --> + + Colour + + Gyroscope + + Accelerometer + + Motors + + LEDs + + --> + + Buzzer + + --> + +Activity Demonstration + +### Setup + +For this exercise we recommend a strip of tape stuck to the floor that contrasts the floor colour. It doesn't have to be tape, all that matters is there is a clear change in colour for the rover to detect. An alternative solution is to use a piece of coloured paper. + +Your solutions should work no matter how far from the tape the rover starts. Make sure to test the same code from multiple starting positions. + +### Here’s Our Approach + +#### **Stage 1** + +First we need the rover to drive forward towards a change in colour. We tell the rover to move forward with a start moving motor block. + +#### **Stage 2** + +As the rover drives forward, we need to be constantly checking the colour sensor. Use a repeat until loop block where the condition is set to detect the desired colour. Our code is looking for the brightness of the white tape. + +#### **Stage 3** + +The rover will keep checking the colour sensor in the loop block until the condition is true. After the repeat we stop all motors. + +#### Note + +If the simple colour sensor blocks aren’t working we may need to use a different comparison block to check more detailed readings from the sensor. Use the rover sensor view to identify the one that will work best for you. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/c52097bd-1ea2-415a-a12b-d39f1e142d5b/Screenshot+2023-05-24+123918.png) + +Example Code 1 + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/2e23eb40-fe43-4840-8f74-5958238dc3c0/Screenshot+2023-05-24+123918.png) + +Example Code 2 + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/sumo.mdx b/content/resources/sumo.mdx new file mode 100644 index 0000000..84e6346 --- /dev/null +++ b/content/resources/sumo.mdx @@ -0,0 +1,138 @@ +--- +title: "Activity: Sumo" +date: "2021-06-03" +categories: ["Activities", "All", "Simulator Activities"] +tags: ["Colour Sensors", "Branching", "Iteration", "Algorithm Design", "Ultrasonic", "IR", "Motors", "Advanced"] +excerpt: "Learn branching, iteration, algorithm design, and how to use the Rover’s motors, colour, ultrasonic, and IR sensors." +featuredImage: "/images/resources/sumo.png" +--- + +A classic robotics competition challenge. Have your rovers battle in the sumo ring. If a rover is disabled or leaves the ring for any reason it loses the match. There are many possible approaches to staying in the ring while pushing the opponent out. This challenge is a great opportunity to design attachments for your rovers. + +#### + Relevant Coding Skills + + Branching + + Iteration + + Functions + + Variables + + --> + + Algorithm Design + + Maths + +#### + Relevant Rover Concepts + + Ultrasonic + + IR + + Colour + + Gyroscope + + Accelerometer + + Motors + + LEDs + + --> + + Buzzer + + --> + +Activity Demonstration + +### Setup + +The sumo exercise works best with a circular arena but any shape can work. The edges of the arena should be a clear contrast to the body of the arena so rovers can use colour sensors to detect when they are at the edge. We recommend the arena be 60-100cm in diameter with a 3-5cm edge. There are many variations of rules available online. + +**The Quick & Easy Setup** + +Use a desk as the arena floor and make the arena circle with coloured tape. + +### Here’s Our Approach + +Note that this is a simple approach that should be improved upon. Try different tactics and include sensors like IR and Accelerometer to better find and push your opponent. + +#### Stage 1: Stay Away From The Edge + +First we will add a repeat while true loop as we want our code to run continuously. We can then use an IF statement to move backward and turn around if the colour sensor detects the edge of the ring. + +#### **Stage 2: Move Around The Ring** + +If the robot doesn’t detect the edge it should move in search of the opponent. We can use the ELSE part of the IF statement to move forward. + +#### **Stage 3: Push The Opponent** + +Staying in the ring is most important. After checking for the edge, we can use an ELSE IF (ELIF) in the IF statement to detect if an opponent is in front with the ultrasonic sensor. If it is close use a motor block to set our motors to full speed to charge the opponent. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/7b61a2a0-d101-40de-9fd8-b20bc5eca868/Screenshot+2023-05-24+123918.png) + +Example Code + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/survey-bot.mdx b/content/resources/survey-bot.mdx new file mode 100644 index 0000000..ef3618a --- /dev/null +++ b/content/resources/survey-bot.mdx @@ -0,0 +1,140 @@ +--- +title: "Activity: Survey Bot" +date: "2021-06-03" +categories: ["Activities", "All"] +tags: ["Iteration", "IR", "Motors", "Maths", "Advanced", "Colour Sensors"] +excerpt: "Learn iteration while using the IR sensors." +featuredImage: "/images/resources/survey-bot.png" +--- + +** | ** + +Program the rover to perform a distance survey of the area around it. Have the rover turn on the spot and print out the value of one of the IR distance sensors at intervals around the circle. + +#### + Relevant Coding Skills + + Branching + + --> + + Iteration + + Functions + + Variables + + --> + + Algorithm Design + + --> + + Maths + +#### + Relevant Rover Concepts + + Ultrasonic + + --> + + IR + + Colour + + Gyroscope + + Accelerometer + + Motors + + LEDs + + --> + + Buzzer + + --> + +Activity Demonstration + +### Setup + +The IR distance sensors have a maximum range of approximately 125cm. If nothing is detected an IR sensor it will read 255.0cm. Place the rover amongst a collection of objects, run the code, and see if a partner can say where the objects were by only reading the distances the robot prints out. This can be done faster by using both IR sensors and only turning 180 degrees. + +### Here’s Our Approach + +#### **Stage 1** + +In our approach, our objective is to get 15 readings from the environment around us. You might use a different number of readings. We will start with a loop block that repeats 15 times. If you’re missing obstacles, try a higher number to collect more readings. + +**Stage 2** + +We will need a motor turn by degrees block inside our loop. If we want our robot to have turned a full 360 degree circle once the code has finished running, this block will need to turn one fifteenth of a circle each iteration. After it has run 15 times our rover will have turned a full 360 degrees. We can use a math operation block to divide 360 by 15. + +#### **Stage 3** + +Finally we need the rover to print out the IR distance values. The print block will print that IR value to the console. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622686313464-N1SCSLXE642VO88LQ5FH/surveybot-answer.png) + +Example Code + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/tafe-queensland-integrates-micromelon-autonomous-technologies.mdx b/content/resources/tafe-queensland-integrates-micromelon-autonomous-technologies.mdx new file mode 100644 index 0000000..0cf8912 --- /dev/null +++ b/content/resources/tafe-queensland-integrates-micromelon-autonomous-technologies.mdx @@ -0,0 +1,18 @@ +--- +title: "TAFE Queensland Integrates Micromelon into Autonomous Technologies Course" +date: "2024-07-01" +categories: ["All", "Customer Stories"] +tags: [] +excerpt: "TAFE Queensland adopts the Micromelon platform for their Autonomous Technologies course, extending Micromelon's reach into vocational education." +featuredImage: "/images/logo.png" +--- + +TAFE Queensland has integrated the Micromelon robotics platform into their Autonomous Technologies course, marking a significant expansion of Micromelon's reach from primary and secondary schools into the vocational education and training (VET) sector. + +The course uses Micromelon Rovers and the Python programming module to teach foundational concepts in autonomous systems, sensor integration, and programmatic control. Students in the program learn to write Python code that reads sensor data, makes decisions, and controls physical hardware — skills directly applicable to careers in automation, robotics, and manufacturing. + +TAFE Queensland selected the Micromelon platform for its versatility and progressive learning pathway. Students begin with the visual block-based coding environment before transitioning to Python, mirroring the journey from novice to professional programmer. The Rover's built-in sensors — including ultrasonic, infrared, colour, accelerometer, and gyroscope — provide a rich set of inputs for autonomous behaviour programming. + +The integration has been well received by both instructors and students. TAFE lecturers noted that the platform's accessibility allowed students with no prior coding experience to achieve meaningful outcomes within their first few sessions, while the Python module provided sufficient depth for more advanced learners. + +This partnership demonstrates the breadth of the Micromelon platform's applicability, extending beyond traditional K-12 education into post-secondary pathways that prepare students for careers in technology and engineering. diff --git a/content/resources/troubleshooting-3d-prints.mdx b/content/resources/troubleshooting-3d-prints.mdx new file mode 100644 index 0000000..fd26848 --- /dev/null +++ b/content/resources/troubleshooting-3d-prints.mdx @@ -0,0 +1,262 @@ +--- +title: "Troubleshooting 3D Prints" +date: "2024-02-15" +categories: ["Guides"] +tags: [] +excerpt: "When it comes to 3D printing, there are a 101 things that can go wrong with the print. They may be minor, fine details that require adjustments, all the way to errors that cause a print to fail completely. In this guide, you will learn how to identif" +featuredImage: "/images/resources/troubleshooting-3d-prints.jpg" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/70dbfa49-ab7e-42d9-9df0-c7e5f6c0f2a5/IMG_2142.jpg) + +When it comes to 3D printing, there are a 101 things that can go wrong with the print. They may be minor, fine details that require adjustments, all the way to errors that cause a print to fail completely. In this guide, you will learn how to identify common printing errors, and implement solutions for them. + +## Common Issues: + +Using this guide is quite simple. Simply click on an image below which resembles an issue similar to your print, and follow the guide linked to it. If the guide doesn’t feel quite right for your purpose, come back and click on another image to see another guide. + +Please note that the solutions listed for the issues are the most common fixes. There are other solutions that will also work for many of these problems that are not included + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1682294993960-9H0U2OP02IFQT3M2VRCK/bed+adhesion.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1682294993960-9H0U2OP02IFQT3M2VRCK/bed+adhesion.jpg) + + ](https://micromelon.com.au/resources/troubleshooting-3d-prints/#bed-adhesion) + + Bed Adhesion + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1682295932499-UO888EJ86NEIIPRVQGGZ/Layer+Shifting.PNG) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1682295932499-UO888EJ86NEIIPRVQGGZ/Layer+Shifting.PNG) + + ](https://micromelon.com.au/resources/troubleshooting-3d-prints?rq=troubleshooting/#layer-shifting) + + Layer Shifting + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1682296579646-9P2GLZM57FJMTM27FUH6/under-extrusion-side.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1682296579646-9P2GLZM57FJMTM27FUH6/under-extrusion-side.jpg) + + ](https://micromelon.com.au/resources/troubleshooting-3d-prints?rq=troubleshooting/#under-extrusion) + + Under Extrusion + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1682297110604-0LEWD74F7MMKKIRDTGD2/cooling.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1682297110604-0LEWD74F7MMKKIRDTGD2/cooling.jpg) + + ](https://micromelon.com.au/resources/troubleshooting-3d-prints?rq=troubleshooting/#cooling) + + Overhangs and Cooling + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1682298162335-KP9FQKKNTYJJ7WQTO715/Stringing.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1682298162335-KP9FQKKNTYJJ7WQTO715/Stringing.jpg) + + ](https://micromelon.com.au/resources/troubleshooting-3d-prints?rq=troubleshooting/#stringing) + + Stringing + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1682298296793-JTYUHH80QD7YZQAO5V7D/rough+print.jpeg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1682298296793-JTYUHH80QD7YZQAO5V7D/rough+print.jpeg) + + ](https://micromelon.com.au/resources/troubleshooting-3d-prints?rq=troubleshooting/#texture) + + Surface Texture + +## Bed Adhesion: + +If a print does not stick uniformly to a build plate, it may have a non-uniform first layer, lift in areas, or even completely come off the bed. Each of the factors and fixes below can help to prevent this issue. + +#### Bed Levelling: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a830ddae-51c6-43ca-9718-aef419709bef/levelling.png) + +Bed levelling refers to tuning the distance of the nozzle from the bed when printing the first layer. As seen in the diagram, this height must be calibrated perfectly depending on the printer. For more on bed levelling, head to our ‘Maintaining a 3D Printer’ guide: + + [ + How to Maintain a 3D Printer + ](how-to-maintain-a-3d-printer) + +#### Build Surface: + +Even with a perfectly calibrated bed level, you may come across the issue that the filament peels off the bed. This can happen as a result of the material and texture of the build plate. Shown below are some tips and tricks you can implement to get better bed adhesion. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/ea80b4e4-f458-4fb1-bb9d-fe52b00ab8c6/painters+tape.png) + +Lining the bed with painters tape + +- **Clean the bed: **Sometimes dust and residue from previous prints can cause a first layer to lift. A great way to clean the bed is to spray it with isopropyl alcohol and wipe it down. + +- **Use Adhesives: **A technique to use with glass build surfaces is to spread a washable adhesive such as glue stick or clear hairspray on the surface while it’s hot. This literally sticks the print to the build surface and ensures it doesn’t peel. Remember to reapply every few prints, and to clean the residue off the bed every now and then. + +- **Painters Tape: **Similar to using adhesives, the bed can be covered with a layer of painters tape prior to each print. This allows the print to stick to the tape, which in turn sticks well to the build surface. + +#### First Layer: + +A technique to improve bed adhesion through the slicer is to use a skirt, brim, or a raft. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a549b5ce-2a0d-49d4-8586-4d94f9004bf4/skirt.PNG) + +Skirt, Brim, and Raft respectively + +- **Skirt: **Prints a few lines around a print (unconnected to print). This helps to prime the nozzle and ensure a uniform flow of material before starting on the print. + +- **Brim: **A brim is like a skirt however it connects to the outer perimeter of the print itself. This helps to stick the outermost perimeter of the print to the bed. + +- **Raft: **A raft is about 3 or more layers printed first on the bed before the print itself is printed on the raft. This creates a whole new surface for the print to adhere to. + +## Layer Shifting: + +Layer shifting is when the entire print shifts to a side and continues printing. While this can rarely happen with an issue in the motors. Most of the time, this happens due to an issue in belt tension, or an unsecured build plate. + +#### Belt Tension: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1122b9d9-00f6-43f1-abaf-71e9335531a9/belts.jpg) + +Most 3D printers have belts to move the gantry or build plate around. When a belt is not at the correct tension, prints may come out in a warped shape or if the belt skips, layer shifting will occur. To tension belts correctly, head to our ‘Maintaining a 3D Printer’ guide: + + How to Maintain a 3D printer + +#### Build Plate Securing: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/b1197bd2-0bff-4d25-9af2-bd8aea5a8c0e/binder+clip.jpg) + +Sometimes a simple cause of this issue is if the build plate is not secured properly. When the build plate slips, the printer continues printing at the same place, however the entire print has been shifted to the side. Depending on your printer, some binder clips can be used to clip the build plate to the bed. Make sure the clips do not get in the way of the head or printer when it’s operating. + +## Under-Extrusion: + +Under-extrusion is when not enough material is coming out of the nozzle. Holes may appear in the print due to this which results in a very weak structure. Some causes of this issue may even result in the printer not extruding at all. + +#### Extruder Nozzle: + +The extruder nozzle can be the culprit of many under-extrusion issues. Most extruders on printers are made of brass and they tend to wear out over time or clog. The easiest fix is to replace the nozzle however there are techniques to remove a clog. + +Use a needle: First, the printer must be heated up, and the filament should be removed. Then, a dedicated 3D printer nozzle needle can be inserted in from below. Do this a few times to clean any blockages from the nozzle. + +Cold Pull:** **If the technique above does not work, a cold pull can be performed. This is a technique where a small length of filament is used to completely flush out the hotend and anything that may be trapped inside. To perform a cold pull, take a look at the following steps: + +- Heat the nozzle to printing temperature (of the last printed material) and remove any filament (and PTFE tube if your printer is a Bowden setup). + +- Once the nozzle is hot, insert a length of filament into the hotend (making sure it extends out the printer for you to grab) until you feel resistant. Push it in a little tight. + +- Set the nozzle temperature to half the print temperature and wait for it to cool down. Once it cools down, slowly pull the filament out, and any debris and blockages may come out with it. + +- If you feel as if the hotend is not clear, keep repeating from step 2 until satisfactory. + +#### Filament Temperature: + +There are many different materials used in 3D printing, and each possess different properties. It’s important to make sure that the nozzle temperature is hot enough to melt the material you are working with. Even so, depending on your roll and printer, custom temperatures may be required. A good strategy is to select a small, test file and print it repeatedly while increasing the temperature at 5°C increments. Note which temperature print looks the best and use those settings from now on. + +#### Filament Quality: + +Filament is known to absorb moisture and dust from the air which can compromise the quality of the material. This can cause weak prints, irregular extrusion, and even clog the nozzle entirely. Filament that has absorbed moisture tends to be brittle, and sometimes makes a crackling sound when melted in the hotend. It is however possible to restore quality to the filament using a filament dryer. If a filament dryer isn’t accessible, a modified food dehydrator or even an oven in some cases can be used to dry filament. Shown below are two prints of the same roll and the same printer, the only difference being the filament was dried in a food dehydrator prior to printing the part on the right: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a8943b0f-cab1-4ebd-af44-466d22da09a1/Rough.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/b7b153ce-d663-49aa-b8ab-9e111ae070f3/Smooth.jpg) + +To prevent exposing the filament to dust and moisture, store rolls in an airtight bag away from sunlight. Desiccants and vacuum sealing can be used for an even safer storage technique. + +## Overhangs and Cooling: + +#### Cooling: + +The basic concept of FDM printers is to extrude molten filament and cool it the instant it leaves the nozzle. Good cooling allows the printer to print over large gaps without a problem and prevents corners from curling which happens when the filament cools slowly. With PLA, good cooling is vital. + +To improve overhangs and cooling, ensure that the cooling fan speed is switched onto maximum and is on for all the layers (unless excluding the first few layers). Depending on your printer, you may even upgrade the printer head to have more and larger cooling fans. Tutorials for such upgrades can be found all over the internet for various popular printers. + +Finally, as a band-aid fix, the print can be cooled externally with the help of a pedestal fan aimed at the print. While this is not recommended as it may lead to warping, on occasion, better overhangs can be achieved using this technique. + +#### Supports: + +Sometimes, overhangs simply cannot be achieved even with the help of perfect cooling. In situations outlined in the diagram below, the use of supports are vital. While removing supports can be long and annoying process, here are some slicer settings we’ve experimented with that can create easier to remove supports: + +- Z contact distance: This is the distance between the top of a support and your part. Making this about 0.2mm will stop the support from bonding to the part. + +- Support Interface: This gives the support a sort of roof. Again, this roof will stop the support from bonding to the part so make sure to enable this option. + +- XY distance from support: This dictates how close a support can be to a part wall. Making this about 60% of the printing perimeter width should stop supports from sticking to walls. + +There are many other support settings to play around with, but these are the ones we’ve found to be the most important. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/9e83dfec-ce59-4858-a620-5b01370e4210/Dachshund-supports-e1667918548774.png) + +*Creidt: vmsaSTEM* + +## Stringing: + +Stringing occurs when the printer is not extruding, but some remaining molten filament in the nozzle oozes out. As the printer travels about the part, it unintentionally draws thin strings of filament between walls which lowers the quality of the final part. + +#### Temperature: + +The most common cause of stringing is temperature. Simply put, the hotter the filament is printed at, the runnier it is when liquid. To prevent stringing, the goal is to remain within the printing temperatures for the filament, but to be as low as possible. Each filament roll is different so the best way to find the ideal temperature is to print the same test print repeatedly while changing the temperature by 5o each time. + +Another faster trick to find the ideal printing temperature is to use a temperature tower. Download a temperature tower (any should do) and use your slicer’s advanced settings to add temperature changes each block. Shown below is how we prepared a temperature tower in Prusaslicer. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/9821f162-ba2a-44af-be4f-a4454d1eb40a/1.png) + +- Download the files for a temperature tower and import it into a slicer. The temperature tower by Simplify3D was used for this tutorial. + +[Simplify3D Temperature Tower](https://www.thingiverse.com/thing:2893943/files) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/cd26e717-2fe5-4521-b0b5-ea93e4572ab7/2.png) + +2. Use advanced settings on your slicer to add a temperature change on each platform. A good way to do this is to start at the coldest recommended temperature for your material and increase in 5°C increments. + +To do this in Prusaslicer: + +1) Slice the print + +2) Scroll to a platform, right click on the slicer, and click ‘Add Custom G-code’ + +3) Enter the `M104 S` command to set a temperature change at that layer. In the example image, the temperature is being set to 240°C + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/ef0582a6-d038-48bc-ab17-97b0955d1cb3/3.jpg) + +After the print, inspect and see which temperature results are the best and use that temperature for future prints with that filament. + +*Credit: Simplify 3D* + +#### Slicer Settings: + +Sometimes stringing is unavoidable, however measures can be taken so these strings don’t affect your part. Shown below are some settings you can activate in your slicer to prevent strings: + +- Travel only over print/Avoid crossing perimeters: Enabling this setting, forces the printer to travel only over the part and not through open space when possible. Shown in the example below, dark blue lines indicate the travel of the print head. On the left side is without this setting and we can see there can be a lot of stringing. However, with the setting enabled for the print on the right, there is a far lower chance of stringing. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/81f1a5e9-1ddc-4b69-b7e6-68d438f043e1/travel.png) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/a0baed20-d86a-4faf-9a4f-7c33fd7edd75/travel+2.png) + +- Retraction: Retraction is where the extruder pulls out the filament a bit when it’s not printing. This releases the pressure in the nozzle and reduces leaks. A retraction of about 4mm at 60mm/s is a standard setting to use. + +Sometimes print speed, and quality of the filament used plays a role in stringing, however the techniques outlined above are the common fixes. + +## Surface Texture: + +#### Vibrations: + +A rough texture on the outside of a print can be caused by printer vibrations. This can be from vibrations anywhere in the system, from the print head, to the printer itself, and even the table or surface the printer is on. + +To fix vibrations, simply observe the printer to see where vibrations may be occurring, and take measures to reduce it. This could be tightening loose bolts on the printer, calibrating eccentric nuts, or ensuring the surface the printer is on is sturdy. A technique to dampen vibrations is to place the printer on a thick foam mat. Reducing vibrations may even make your printer a bit quieter! + +#### Belt Tension: + +Tensioning belts is a crucial part of maintaining 3D printers. This doesn’t have to be done often, however belts must always be at the correct tension. When belts are not tensioned correctly, dimensional defects may occur in the print like in the example below. For tips on getting your belts tensioned correctly, visit our page on maintaining 3D printers through the link below: + + [ + How To Maintain a 3D Printer + ](/resources/how-to-maintain-a-3d-printer) diff --git a/content/resources/turn-over-rover.mdx b/content/resources/turn-over-rover.mdx new file mode 100644 index 0000000..97b2af7 --- /dev/null +++ b/content/resources/turn-over-rover.mdx @@ -0,0 +1,140 @@ +--- +title: "Activity: Turn Over Rover" +date: "2021-06-03" +categories: ["Activities", "All"] +tags: ["Branching", "Iteration", "Accelerometer", "LEDs", "Beginner"] +excerpt: "Learn branching, iteration, and how to use the accelerometer and LEDs." +featuredImage: "/images/resources/turn-over-rover.png" +--- + +** | ** + +Program the rover to detect if it is upside down or not. When the rover is the right way up set it's LEDs to green. When the rover is upside down set the LEDs to red. The rover should change the LEDs as soon as it detects a change in orientation, you should not need to press the play button to trigger a change in colour. + +#### + Relevant Coding Skills + + Branching + + Iteration + + Functions + + Variables + + --> + + Algorithm Design + + --> + + Maths + +#### + Relevant Rover Concepts + + Ultrasonic + + --> + + IR + + --> + + Colour + + Gyroscope + + Accelerometer + + Motors + + --> + + LEDs + + Buzzer + + --> + +Activity Demonstration + +### Setup + +All you need is a flat, uniform surface to drive on. Different surfaces have different friction properties. This means the tracks will slip differently dependent on where the rover is driving. Some movement blocks such as turn by degrees are calibrated for an average friction. When driving on other surfaces you may need to turn more or less to get the desired angle. + +### Here’s Our Approach + +#### **Stage 1** + +Start with an IF Statement. Make the condition our sensor block that checks if the robot is the right way up. + +#### **Stage 2** + +If our condition is true (the robot is the right way up) we want to use a Set All LEDs block and make all the LEDs green. If our condition is not true (the robot is upside down), use the ELSE part of the IF statement to set all our LEDs to red. + +#### **Stage 3** + +If we run our code with just an IF statement it will check our sensor once and end the program. We want our robot to constantly check if it is upside down or not and change the LEDs accordingly so we put our entire IF statement in a repeat while true loop. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622687125124-1JA3326RPWS5T8CV45W3/turnoverrover-answer.png) + +Example Code + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/ultrasonic-sensor.mdx b/content/resources/ultrasonic-sensor.mdx new file mode 100644 index 0000000..ae6815e --- /dev/null +++ b/content/resources/ultrasonic-sensor.mdx @@ -0,0 +1,286 @@ +--- +title: "The Ultrasonic Sensor" +date: "2021-07-21" +categories: ["All", "Guides"] +tags: [] +excerpt: "Learn all about the ultrasonic sensor!" +featuredImage: "/images/resources/ultrasonic-sensor.png" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623914345952-12B4TG3EF3AT2EJMK5UW/the+ultrasonic+sensor.png) + +The ultrasonic sensor is one of the fives types of sensors on the Micromelon rover. + +**What Is It Used For?** + +The ultrasonic sensor is used to detect the distance to the closest object in front of the sensor. The sensor is placed on the front of the rover, so we can detect if any obstacles (like walls) are in front of the rover, and how far away they are. + +### **How The Ultrasonic Sensor Works** + +To detect objects, the ultrasonic sensor uses sound. Ultrasonic sound is defined as sound waves at a frequencies higher than 20kHz. How does it detect objects by using sound? Simply by following the steps below. + +**Ultrasonic Distance Sensing** + +- The sensor makes the high pitched sound. + +- The sound waves travel outwards from the sensor towards objects or surfaces in front. + +- The sound waves hit and reflect off the object or surface back towards the sensor. + +- The sound waves travel back towards the sensor. + +- The sensor detects the returning sound waves. + +**Based on how long it took the sound to bounce back, the sensor calculates how far away the object is using the speed of sound.** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623904065305-QUNCZV7C94455QROTLIH/ultrasonic+animation.gif) + +**The Parts That Make It Work** + +The sensor is made up of two different components, **the transmitter** and **the receiver**. These are called transducers. The transmitter is making the ultrasonic sound and the receiver is listening for the reflected sound waves. Some ultrasonic sensors use a single transducer as both the transmitter and receiver. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623894690691-R11ZI31O4Z1X6L6E55LF/sensor+detector.png) + +**Why Can’t Humans Hear The Sound?** + +Ultrasonic sensors typically use frequencies between 30kHz and 500kHz. In the case of the Micromelon Rover, the sensor uses approximately 40kHz. In general, humans can only hear sounds up to 20 kHz. + +Wanna know something cool though? If you take a video of the ultrasonic sensor when it is running, the camera’s microphone will hear it. We can hear it playing back in the video. An example of this is on the right. Hear the ticking sound when the sensor is pointed at the microphone? + +**Ultrasonic Sensors Exist in Nature!** + +Echo location is another name for ultrasonic sensing. Bats and dolphins are just two examples of animals who use ultrasonic sensing to detect where they are going and where to find food. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623905583690-XQDI2RJE7N1YWLH1DJD9/micromelon+dolphin.png) + +Finley (above) works in Micromelon marketing + +Finley (pictured) uses ultrasonic sensing to detect where pods of fish are in the sea when on lunch break. Unfortunately when I start yelling at lunch trying to find food, people get annoyed with me. + +### **Ultrasonic Problems & Limitations** + +**Sound Waves Reflected Away Or Absorbed** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623911322898-F9S4N4COR6WB7NXCBLV9/incorrect+bounce+animation.gif) + +When the emitted sound waves don’t reflect back to our sensor we won’t be able to get an accurate reading. This will happen when trying to detect angled or curved surfaces. Soft or textured surfaces can absorb the sound waves and reduce the range of the sensor. + +To ensure you are able to get consistent readings, make sure the ultrasonic is pointed at flat, hard surfaces. A wide variety of surfaces will still be detected, but may be unreliable. + +**Rover Ultrasonic Range Is Limited To Approximately 1m** + +The further the sound waves need to travel, the quiter the echo becomes. If the echo becomes too quiet, the robot can no longer hear it and can’t detect the object. In order for the sensor to detect more and more distant objects, the Rover needs to emit a louder sound, which requires more power. + +### Programming The Ultrasonic Sensor + +To write some code that uses the ultrasonic sensor, open the Micromelon Code Editor and connect Rover. You can use sensor view to see what the ultrasonic sensor is detecting. To open sensor view, click the ROVER button next to your Rover’s name. + +In the sensor view dialog, the ultrasonic value is located at the top of the rover diagram. The ‘CM’ next to the value indicates centimetres. Point the ultrasonic sensor at different objects and watch this value to measure how far away they are. + +**What does 255cm mean?** + +255 is the returned value when the sensor is unable to detect an object. If you are seeing 255 it means you may be attempting to detect objects further away than 1m or because the sound waves are being absorbed or reflected away from the sensor. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623908456123-SFLGD6EJY3YZD9ICDIIR/opening+sensor+view.gif) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623909040619-5ZA8CEZZL843FDH8KQAA/using+sensor+mode+small+small.gif) + +**Using The Ultrasonic In Code** + +Let’s write a simple program to print our ultrasonic sensor value every second. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623913882276-KLKLEA7H45FMUZPU3W9N/example+code.gif) + +- Start by adding a **Print **statement. You can find this block in the **Utilities **category. + +- Place our ultrasonic sensor read inside the print statement. + +You can find the **Read Ultrasonic **block in the **Sensors** category. The Python command is **Ultrasonic.Read()**. + +- Wrap this Print statement in a **While True Loop**. + +- Add a **Delay For 1 Second** block so this loop waits 1 second before running again. + +- Press Play! + +While this is running we will see our ultrasonic value every second. + +- You can now write other code that makes decisions based on the ultrasonic sensor. + +### Wrapping Up + +Now that we’re familiar with what the ultrasonic is, how it works, and how to program with it, it’s time to start doing some activities that use the ultrasonic sensor. + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1647214830941-XGY83MWLD0GDNDSCOF33/driving+school.png) + + ](/resources/driving-school-basics) + + [Driving School Basics](/resources/driving-school-basics) + +Learn the basics of rover motors and sensors while navigating Duck City. + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1645597438165-KTLM6ETLCY694N7E59ZV/spike-drop.png) + + ](/resources/spike-drop) + + [Activity: Spike Drop](/resources/spike-drop) + +Simulator activity for learning ultrasonic, colour sensor and iteration. + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1707816086925-3340QDPKLWEWZY20T5HC/maze.png) + + ](/resources/maze) + + [Activity: Maze](/resources/maze) + +Learn branching, iteration, algorithm design, and how to use the Rover’s motors, ultrasonic, colour, and IR sensors. + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1707816124090-JAEYY3E5NGRDOMCLXOXE/Lane+guidance.png) + + ](/resources/lane-guidance) + + [Activity: Lane Guidance](/resources/lane-guidance) + +Learn iteration, branching, algorithm design, maths, and how to use the motors, ultrasonic, and IR sensors. + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1707816196956-OB33L2YRHUKHVQFOQE0D/puppy+bot.png) + + ](/resources/puppy-bot) + + [Activity: Puppy Bot](/resources/puppy-bot) + +Branching and looping with the ultrasonic sensor. + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622686877131-P5FU2IDAB8U05PX8M98Z/sumo.png) + + ](/resources/sumo) + + [Activity: Sumo](/resources/sumo) + +Learn branching, iteration, algorithm design, and how to use the Rover’s motors, colour, ultrasonic, and IR sensors. + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464675848-K9YEOYK65IWRFRX4QJ1R/blog+header+image+.png) + + ](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Robot Simulator](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +How to get started with the Micromelon Robot Simulator. + + [Read More →](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1626837419969-WBB4D85KQIXSOP750N5M/resized+banner+%281%29.png) + + ](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Micromelon Rover](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +Crash course on basic rover function, how and what to program and starter activities to attempt. + + [Read More →](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622691207784-0X6JV7RYRQXZAFRG712S/pisonescape.png) + + ](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + + [Activity: Prison Escape](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + +Learn branching and iteration using the colour sensors and motors. + + [Read More →](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) diff --git a/content/resources/using-class-controls.mdx b/content/resources/using-class-controls.mdx new file mode 100644 index 0000000..c949160 --- /dev/null +++ b/content/resources/using-class-controls.mdx @@ -0,0 +1,250 @@ +--- +title: "Using Classroom Management Features" +date: "2021-06-14" +categories: ["All", "Getting Started"] +tags: [] +excerpt: "How to use the built-in classroom management features in the Micromelon Code Editor." +featuredImage: "/images/resources/using-class-controls.png" +--- + +The Micromelon Rover and Code Editor have built-in classroom management features that give teachers more flexibility to organise and run their lessons. This post will explore what these features are, and how to make the most of them. + +### Opening Class Controls & Selecting Your Class + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623647826550-P3AD647DLSUA0EJ7VSP5/opening+class+controls.gif) + +Opening class controls & selecting a class + +Before you can use any class controls, you must select the class to which you want them to apply. When a class control is activated, only students inside the selected class will be affected. + +**Who can control what? ** + +Standard teacher accounts can select and control all of the classes in the school that they are in. Casual instructor accounts can only control classes that they have been assigned to. Student accounts can never access class controls. + +### What Class Controls Are Available? + +**Disabling and Muting Student Rovers** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623648699034-ENN7J13QW07M197WI5PI/muteanddisable.gif) + +You can disable and/or mute all student Rovers. While the Rovers are disabled, students can still interact with the Code Editor, but they will not be able to run any code. While the Rovers are muted, the Rovers and Code Editor will function normally, however the Rovers will not produce any sounds requested from student code. + +**Note: **Both these controls are toggled on for 5 minutes when first pressed. To extend the time press the **+5 mins** button. + +**Hiding Student Screens** + +If you need to grab the attention of the class, you can hide their screens! This will cover their Code Editor and stop their Rover if it is currently running. This will only hide the Code Editor, they will still be able to see other programs opened on their laptop. + +**Note: **Hiding student screens will also last for 5 minutes when first pressed. To extend the time press the **+5 mins** button. + +**Student View** + +**Teacher View** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623650267023-M6ZL2KKQ9T3E6YNMF8DB/control-disable+screen.gif) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623650284050-RAOMCVAMRD377AVWFXT3/screen-being-disabled.gif) + +**Sharing Your Screen With The Class** + +If you want to show your students what is currently on your Code Editor, you can broadcast your current Code Editor workspace to your current class. Students will not be able to edit your code. If you would like to send them code that they can edit, we will cover that shortly. + +**Note: **By default this screen share is unlocked. This means students can select other projects in the code editor. If you want students to only be able to look at your code, press the **Lock **button once the control is active. + +**Student View** + +**Teacher View** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623651177619-UGWM07COCLGSBF4103DV/broadcast.gif) + +**Restricting What Code Students Can See And Edit** + +The Micromelon Code Editor has simultaneous block and text coding. Users can either choose between seeing just blocks, just text or both. If you want to restrict what your classroom can see and edit, you can lock your class to only be able to see a specific view or only allow them to edit in a specific way. + +**Restrict What Students Can See** + +You can choose if students can see only blocks, only code or both. They will still be able to edit both code types if they are locked to mixed view. + +**Student View** + +**Teacher View** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623652748448-ANYDLWUII21OZZ6VK0IT/lock+view+control.gif) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623652769502-1TS54JH79CMEOXZS42R3/student+view+lock+vew.gif) + +**Restrict What Students Can Edit** + +You can restrict what type of code students are able to edit. If you want to challenge students, you could restrict them to only be able to edit text code. Students will still see the block code (which is useful for debugging), but they won’t be able to edit the blocks. + +**Student View** + +**Teacher View** + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623653379796-2S4TKGY5FA2O0QUYEO69/resticting+edit+controls.gif) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623653398772-H8XS1PEIZO3JUEYBG1J9/student+view+restrict+editing.gif) + +**Sending Code To Students** + +You can send your projects and code to students. They will have a duplicate of this project added to their workspace and will have full control to edit it, rename it, or delete it. If you want to share your screen with your class without students being able to edit the project, see the previous section on sharing your screen. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623654148828-D0KLKJHX7STFWM6Z3S5L/send+project.gif) + +**How To Send A Project** + +- Locate the project you want to send in your project tab bar. + +- Click the three vertical dots or right click the tab to open the project menu. + +- Select **Send To Class **or **Send To Student**. + +Select **Send To Class **to send this project to an entire class. + +Select **Send To Student **to send it to specific students. You can choose from all of the students in the school. + +**Opening Student Work** + +If you want to see what a student is working on, you can open a folder in your Code Editor that contains of all their projects. This folder will continuously update to the latest version of the student’s work. + +**Note: **You cannot edit the code in the student’s projects or delete these projects from the student’s Code Editor remotely. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623655490592-IHRYOH9FM1LGCF0HVOU2/good+open+student+work.gif) + +**How To Open Student’s Work** + +- From the teacher dashboard go to the Classes tab and select your class. + +- Locate the target student/s in the class list on the right. Click the **+** button for all the students whose work you wish to view. This will open their folder in your Code Editor. + +- Close the teacher dashboard and you will see the folder/s in your project tab bar. Move your mouse over the folder to see all projects inside. Click the project you wish to see. + +To remove a folder, press the **-** button on the folder. + +### Individual Student Controls + +Most of the controls we have discussed so far will impact your entire class. If you prefer, you are able to set these controls to impact individual students rather than your whole class. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1623656389687-4C1PZGOVITMH6E7K9FRM/individual+controls.gif) + +**How To Set Controls For Individual Students** + +- From the teacher dashboard, navigate to the class tab and select your class. + +- In the class list there will be all of the students in your class. Press the expand arrow at the far right of the student entry. This will expand and you will see all the same controls that are available for the class. + +- Select the restrictions you want to apply to this student. + +**Note: **You can use both class wide and individual controls at the same time. Your individual controls will always overwrite the class controls. If you want revert a student that is impacted by individual controls to the class’s current status, click the revert button located next to the expand arrow on their entry. + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464675848-K9YEOYK65IWRFRX4QJ1R/blog+header+image+.png) + + ](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Robot Simulator](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +How to get started with the Micromelon Robot Simulator. + + [Read More →](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1626837419969-WBB4D85KQIXSOP750N5M/resized+banner+%281%29.png) + + ](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Micromelon Rover](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +Crash course on basic rover function, how and what to program and starter activities to attempt. + + [Read More →](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622691207784-0X6JV7RYRQXZAFRG712S/pisonescape.png) + + ](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + + [Activity: Prison Escape](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + +Learn branching and iteration using the colour sensors and motors. + + [Read More →](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) diff --git a/content/resources/windup-rover.mdx b/content/resources/windup-rover.mdx new file mode 100644 index 0000000..f70aec4 --- /dev/null +++ b/content/resources/windup-rover.mdx @@ -0,0 +1,140 @@ +--- +title: "Activity: Wind-up Rover" +date: "2021-06-03" +categories: ["Activities", "All"] +tags: ["Iteration", "Variables", "Accelerometer", "Motors", "Maths", "Intermediate"] +excerpt: "Learn iteration, variables, maths, and how to use the Rover’s motors and accelerometer." +featuredImage: "/images/resources/windup-rover.jpg" +--- + +** | ** + +Create a classic wind up toy out of our rover. The rover records the number of seconds that it is held upside down and once placed right way up on a surface it will move forward. The longer the rover was held upside down the longer it will move forward and the faster it will go. For more interesting wind up rovers, incorporate the LEDs and Buzzers to also respond and change to the wind up time. + +#### + Relevant Coding Skills + + Branching + + --> + + Iteration + + Functions + + Variables + + Algorithm Design + + --> + + Maths + +#### + Relevant Rover Concepts + + Ultrasonic + + --> + + IR + + --> + + Colour + + Gyroscope + + Accelerometer + + Motors + + LEDs + + --> + + Buzzer + + --> + +Activity Demonstration + +### Setup + +The only requirement for this exercise is there be a long enough space for the rover to move in. If you've got limited space you can add a limit to wind up time. + +### Here’s Our Approach + +#### Stage 1 + +Firstly we create a variable for our wind up time. Then we create a repeat while true loop so that our wind up and wind down code will repeat. Inside the loop we add an IF statement with the condition that checks the most important detail, if our rover is upside down or not. + +#### **Stage 2** + +When the rover is upside down we set all LEDs red and begin increasing the wind up time. We do this by adding 1 and then delaying our code for 1 second. This means each second our variable wind up time increases by 1. + +#### **Stage 3** + +When our rover is right way up and the wind up time is greater than zero we enter the unwinding branch. Firstly we set our LEDs green. Then we do our sound and motor commands (feel free to do your own thing here). We then decrease wind up time by 1 and delay. Once this reaches 0 we will enter the ELSE branch where we turn everything off. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/40a5024f-93a3-4d8d-8ade-505d96aa6977/Screenshot+2023-10-31+083156.png) + +Example Code + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) diff --git a/content/resources/xb3xasp6iz9s5gwqqo5anvcd0lwd1l.mdx b/content/resources/xb3xasp6iz9s5gwqqo5anvcd0lwd1l.mdx new file mode 100644 index 0000000..43026a9 --- /dev/null +++ b/content/resources/xb3xasp6iz9s5gwqqo5anvcd0lwd1l.mdx @@ -0,0 +1,185 @@ +--- +title: "Getting Started with Arduino and the Micromelon Rover" +date: "2024-02-07" +categories: ["Getting Started"] +tags: [] +excerpt: "The Micromelon Rover comes with an expansion header that allows for the connection of various additional devices. This guide will outline how to connect an Arduino Uno and use it to control the Rover via UART.    Hardware Setup First, the R" +featuredImage: "/images/resources/xb3xasp6iz9s5gwqqo5anvcd0lwd1l.jpg" +--- + +The Micromelon Rover comes with an expansion header that allows for the connection of various additional devices. This guide will outline how to connect an Arduino Uno and use it to control the Rover via UART. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/212ba78f-a1aa-4a80-8d22-216122336066/PXL_20230113_043927089.MP.jpg) + +## Hardware Setup + +First, the Rover’s RX and TX pins must be connected to the Arduino. Software serial will be used instead of the hardware serial ports (pin 0 and pin 1) on the Arduino since these pins are also used when communicating to the Arduino via the USB port. + +In this guide, pins A0 and A1 will be used for this. However, any pair of GPIO pins can be used. The Rover’s header pinout and an example wiring diagram can be seen below: + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/d7b300d8-7c30-4a03-8c4f-07c7b6b71097/Image+from+iOS.jpg) + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/c21a338f-6822-4316-85ec-ba8afdf5280b/MM_Website_bb+%281%29.jpg) + +## Rover UART Initialisation + +``` +`When programming the Arduino, the Arduino IDE is the easiest-to-use development environment. It has a lot of included libraries which will make sending UART packets much more straightforward, and everything can be kept inside a single file. All of the code for this project can be stored in an Arduino sketch (.ino file), which can be created using the Arduino IDE.` +``` + +When working with Arduino sketches, there must be both a setup and a main function. The specifics of what goes in each will be explained later, but the setup function runs once at the program’s start. After this, the loop function will run until the program ends. Typically the setup function would be written before the loop function. + +Before any functions are written, any required libraries must be imported, and global variables must be declared. + +Since we will not use the hardware UART pins, a software serial must be set up. As the name suggests, this library is designed to replicate the functionality of hardware serial pins. To set up software serial, we must accomplish the following: + +- Import SoftwareSerial.h + +- Define RX and TX pins, which are A0 and A1, respectively + +- Create the SoftwareSerial object + +``` +#include `` + +const byte rxPin = A1; +const byte txPin = A0; + +SoftwareSerial roverSerial = SoftwareSerial(rxPin, txPin); + +``` + +The next step is to set up the Arduino and Rover to send and receive UART packets. To do this, we must accomplish the following: + +- Set the RX and TX pin modes + +- Begin serial + +- Set the Rover to “Expansion Mode” + +The command to set the Rover to “Expansion Mode” must be sent first. For this to happen, the data packet must be constructed as follows: + + Start Byte + Operation Byte (Read/Write) + Register Byte + Data Length Byte + Data + + 0x55 + 0x01 (Writing) + 26 + 1 + 1 (Bluetooth Mode) + +This information must be stored in a buffer and written out to the serial port to send this packet over UART. + +``` +void setup() { + + pinMode(rxPin, INPUT); + pinMode(txPin, OUTPUT); + + roverSerial.begin(115200); + delay(50); + + uint8_t armPacket[5] = {0x55, 0x01, 26, 1, 1}; + roverSerial.write(armPacket, 5); + delay(50); + +} + +``` + +Uploading this code to the Arduino should cause the Rover to enter the required “Expansion Mode”. To check if this has been done, the Rover’s LCD should read “Expansion Mode”, where the bot ID used to be. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/2b8dcd18-30de-4637-a084-fa3d6bfef001/PXL_20230113_011439613.jpg) + +## Sending Rover Commands + +Once the Rover is in “Expansion Mode”, other commands can be sent to the Rover. + +The move motors command is one of the most useful commands to know how to send to the Rover. Similar to the expansion mode command, the motor movement packet is constructed as follows: + + Start Byte + Operation Byte (Read/Write) + Register Byte + Data Length Byte + Data + + 0x05 + 0x01 (Writing) + 0 + 2 + Left speed, right speed + +We recommend creating a separate function that handles moving the motors. Anytime this is called, the motors should move based on your inputs to this function. + +It should be noted that the motors must be encoded as an integer from -127 to 127. In this example, it will be assumed that the input to the ‘moveMotors’ function will be from -30 to 30 and must be scaled accordingly. + +``` +void moveMotors(int8_t leftSpeed, int8_t rightSpeed) { + + int8_t scaledLeftMotors = 127/30; + int8_t scaledRightMotors = 127/39; + + uint8_t packet = {0x55, 0x01, 0, 2, scaledLeftMotors, scaledRightMotors}; + roverSerial.write(packet); + delay(50); + +} + +``` + +For this example, the Rover should move forwards until the program is finished. The final step is to implement this function into the main loop. + +``` +void loop() { + + moveMotors(30, 30); + +} + +``` + +Putting all of this together should result in the following code: + +``` +#include `` + +const byte rxPin = A1; +const byte txPin = A0; + +SoftwareSerial roverSerial = SoftwareSerial(rxPin, txPin); + +void moveMotors(int8_t leftSpeed, int8_t rightSpeed) { + + int8_t scaledLeftSpeed = leftSpeed * (127/30); + int8_t scaledRightSpeed = rightSpeed * (127/30); + + uint8_t packet[6] = {0x55, 0x01, 0, 2, scaledLeftSpeed, scaledRightSpeed}; + roverSerial.write(packet, 6); + + delay(50); + +} + +void setup() { + + pinMode(rxPin, INPUT); + pinMode(txPin, OUTPUT); + + roverSerial.begin(115200); + + uint8_t arm_packet[5] = {0x55, 0x01, 26, 1, 1}; + roverSerial.write(arm_packet, 5); + delay(50); + +} + +void loop() { + + moveMotors(30, 30); + +} + +``` diff --git a/content/resources/year-7-digital-tech-at-st-peters.mdx b/content/resources/year-7-digital-tech-at-st-peters.mdx new file mode 100644 index 0000000..36a0d5f --- /dev/null +++ b/content/resources/year-7-digital-tech-at-st-peters.mdx @@ -0,0 +1,162 @@ +--- +title: "Case Study: Year 7 Digital Tech at St Peters Lutheran College" +date: "2021-07-06" +categories: ["All", "Customer Stories"] +tags: [] +excerpt: "See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon." +featuredImage: "/images/resources/year-7-digital-tech-at-st-peters.png" +--- + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625614102357-9B99HWCOVZ926VVKHCTS/cropped+image+4.png) + +For the final unit of Digital Technology this Semester, Year 7 students were given a whirlwind tour of physical computing through learning how to code Microbits, Lego Mindstorms EV3 robotic arms and Micromelon Robots (two lessons for each one) before attempting a final activity incorporating all three technologies. + +**Building a Knowledge Base** + +To familiarize themselves with the technology, students were given basic code (Blocks and Python) and were asked to improve the code by reading the sensors, updating the values and adding any extra functions that they needed. Students were provided with a few activities during the two lessons that they could complete in pairs. These activities allowed the students to get to know the device, understand how it functions, what sensors it uses and how to code it. + +**Learning Through Exploring** + +Many pairs then went on to create their own activities and build on the code that was provided. For example, for the Micromelon lessons, students were given an activity card with line following, balance board and obstacle avoidance code. A few groups then found they could combine these to complete an obstacle course. Giving students a choice and allowing for exploration and play helped the students to consolidate their learning. + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625615489795-JQ4FHPGG8AGJ70WHYL3P/image2.jpg) + +**Analysing and Understanding** + +After each lesson, students were then asked to reflect on their program in a journal, share their code, answer questions and share any new learnings. Students were asked to respond to the following: + +- What did you learn during the lesson? - Explain what you created and how it works. + +- Was there anything you found hard? -** **Share how you overcame challenges + +- How could this type of technology be used in a Smart City? - Discuss the use of sensors, “codable” technology and autonomous vehicles. + +**The Final Activity** + +The culminating activity for the Physical Computing unit was getting students to collaborate using the three devices to solve a challenge, in a ‘Smart City’ style setting. The challenge outline was, + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625614011032-FHNMMWABK8L8TFUBIMIL/image1.jpg) + +- Code the EV3 robotic arm to drop a tyre stack onto the Micromelon Rover, + +- The Micromelon Rover then needed to follow a line, avoid obstacles and drive onto a balance board. + +As an additional challenge, an EV3 rover was programmed to drive around on the black line as a ‘moving obstacle’. Students worked in pairs or trios to solve their part of the challenge; these groupings then worked together as a team (e.g. Red, Blue, Yellow teams). + +- Once the Micromelon Rover drove over and tipped the balance board, the Microbit would be triggered and light up. + +**The Learning Outcomes** + +Students seemed to really engage in this activity as it was challenging, but not impossible, with a number of teams able to complete all aspects of the challenge. Some students struggled with the margin of error when reading the Micromelon Rover sensors (the code given used the brightness reading), especially when the line curved or had a corner. A number of students found solving the challenge really exciting; they felt a real sense of achievement when they solved a problem. It was awesome to see students express the feeling of ‘oh I did that, I made the robot move and follow the line!’ + +### Related Posts + + Resources + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1639455538805-9NI7CPKR7IYG6D4RBKAN/high+quality+sumo.png) + + ](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [Creating A Sumo Unit For Your Digital Technologies Class](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + +How to run a sumo unit in your digital technologies classroom. + + [Read More →](/resources/creating-a-sumo-unit) + + [All](/resources?category=All) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464845856-BBPD7GTIIHHOSJCFORWF/the+ultrasonic+sensor.png) + + ](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [The Ultrasonic Sensor](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + +Learn all about the ultrasonic sensor! + + [Read More →](/resources/ultrasonic-sensor) + + [All](/resources?category=All), [Guides](/resources?category=Guides) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1625616494179-LZHZP5MUA0E0MQKEB7HC/cropped+image+4.png) + + ](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [Case Study: Year 7 Digital Tech at St Peters Lutheran College](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + +See how Meg Foley at St Peters conducted a challenge for their Year 7s using Micromelon. + + [Read More →](/resources/year-7-digital-tech-at-st-peters) + + [All](/resources?category=All), [Customer Stories](/resources?category=Customer+Stories) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1637464675848-K9YEOYK65IWRFRX4QJ1R/blog+header+image+.png) + + ](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Robot Simulator](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +How to get started with the Micromelon Robot Simulator. + + [Read More →](/resources/robot-simulator) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1626837419969-WBB4D85KQIXSOP750N5M/resized+banner+%281%29.png) + + ](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [Getting Started With The Micromelon Rover](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + +Crash course on basic rover function, how and what to program and starter activities to attempt. + + [Read More →](/resources/getting-started-with-the-micromelon-rover) + + [All](/resources?category=All), [Getting Started](/resources?category=Getting+Started) + + [ + +![](https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828/1622691207784-0X6JV7RYRQXZAFRG712S/pisonescape.png) + + ](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + + [Activity: Prison Escape](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) + +Learn branching and iteration using the colour sensors and motors. + + [Read More →](/resources/prison-escape) + + [Activities](/resources?category=Activities), [All](/resources?category=All) diff --git a/package-lock.json b/package-lock.json index f6b2e13..e3ea773 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,9 +8,12 @@ "name": "micromelon-website", "version": "0.1.0", "dependencies": { + "gray-matter": "^4.0.3", "next": "16.1.6", + "next-mdx-remote": "^6.0.0", "react": "19.2.3", - "react-dom": "19.2.3" + "react-dom": "19.2.3", + "stripe": "^20.4.0" }, "devDependencies": { "@tailwindcss/postcss": "^4", @@ -40,7 +43,6 @@ "version": "7.29.0", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", @@ -183,7 +185,6 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -1022,6 +1023,60 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@mdx-js/mdx": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz", + "integrity": "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdx": "^2.0.0", + "acorn": "^8.0.0", + "collapse-white-space": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-util-scope": "^1.0.0", + "estree-walker": "^3.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "markdown-extensions": "^2.0.0", + "recma-build-jsx": "^1.0.0", + "recma-jsx": "^1.0.0", + "recma-stringify": "^1.0.0", + "rehype-recma": "^1.0.0", + "remark-mdx": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "source-map": "^0.7.0", + "unified": "^11.0.0", + "unist-util-position-from-estree": "^2.0.0", + "unist-util-stringify-position": "^4.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/react": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.1.tgz", + "integrity": "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==", + "license": "MIT", + "dependencies": { + "@types/mdx": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=16", + "react": ">=16" + } + }, "node_modules/@napi-rs/wasm-runtime": { "version": "0.2.12", "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", @@ -1525,13 +1580,39 @@ "tslib": "^2.4.0" } }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, "license": "MIT" }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -1546,12 +1627,34 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdx": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", + "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, "node_modules/@types/node": { "version": "20.19.35", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.35.tgz", "integrity": "sha512-Uarfe6J91b9HAUXxjvSOdiO2UPOKLm07Q1oh0JHxoZ1y8HoqxDAu3gVrsrOHeiio0kSsoVBt4wFrKOm0dKxVPQ==", - "dev": true, + "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~6.21.0" } @@ -1560,7 +1663,6 @@ "version": "19.2.14", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", - "dev": true, "license": "MIT", "peer": true, "dependencies": { @@ -1577,6 +1679,12 @@ "@types/react": "^19.2.0" } }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.56.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.56.1.tgz", @@ -1873,6 +1981,12 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, "node_modules/@unrs/resolver-binding-android-arm-eabi": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", @@ -2146,7 +2260,6 @@ "version": "8.16.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, "license": "MIT", "peer": true, "bin": { @@ -2160,7 +2273,6 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -2383,6 +2495,15 @@ "dev": true, "license": "MIT" }, + "node_modules/astring": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", + "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", + "license": "MIT", + "bin": { + "astring": "bin/astring" + } + }, "node_modules/async-function": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", @@ -2429,6 +2550,16 @@ "node": ">= 0.4" } }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -2587,6 +2718,16 @@ ], "license": "CC-BY-4.0" }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -2604,12 +2745,62 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", "license": "MIT" }, + "node_modules/collapse-white-space": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", + "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -2630,6 +2821,16 @@ "dev": true, "license": "MIT" }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2663,7 +2864,6 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "dev": true, "license": "MIT" }, "node_modules/damerau-levenshtein": { @@ -2731,7 +2931,6 @@ "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -2745,6 +2944,19 @@ } } }, + "node_modules/decode-named-character-reference": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -2788,6 +3000,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", @@ -2798,6 +3019,19 @@ "node": ">=8" } }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -3031,6 +3265,38 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/esast-util-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", + "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esast-util-from-js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", + "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "acorn": "^8.0.0", + "esast-util-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -3246,6 +3512,7 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -3439,6 +3706,19 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/esquery": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", @@ -3475,6 +3755,97 @@ "node": ">=4.0" } }, + "node_modules/estree-util-attach-comments": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", + "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-build-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", + "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-walker": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-scope": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz", + "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-to-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", + "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "astring": "^1.8.0", + "source-map": "^0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-visit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", + "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -3485,6 +3856,24 @@ "node": ">=0.10.0" } }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -3820,6 +4209,43 @@ "dev": true, "license": "ISC" }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "license": "MIT", + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/has-bigints": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", @@ -3914,6 +4340,74 @@ "node": ">= 0.4" } }, + "node_modules/hast-util-to-estree": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz", + "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-attach-comments": "^3.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/hermes-estree": { "version": "0.25.1", "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", @@ -3968,6 +4462,12 @@ "node": ">=0.8.19" } }, + "node_modules/inline-style-parser": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", + "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", + "license": "MIT" + }, "node_modules/internal-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", @@ -3983,6 +4483,30 @@ "node": ">= 0.4" } }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-array-buffer": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", @@ -4141,6 +4665,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -4200,6 +4743,16 @@ "node": ">=0.10.0" } }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", @@ -4253,6 +4806,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", @@ -4444,7 +5009,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, "license": "MIT" }, "node_modules/js-yaml": { @@ -4533,6 +5097,15 @@ "json-buffer": "3.0.1" } }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/language-subtag-registry": { "version": "0.3.23", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", @@ -4851,6 +5424,16 @@ "dev": true, "license": "MIT" }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -4884,6 +5467,18 @@ "@jridgewell/sourcemap-codec": "^1.5.5" } }, + "node_modules/markdown-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", + "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -4894,6 +5489,176 @@ "node": ">= 0.4" } }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", + "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -4904,6 +5669,602 @@ "node": ">= 8" } }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-expression": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz", + "integrity": "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-jsx": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz", + "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-md": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", + "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", + "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", + "license": "MIT", + "dependencies": { + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^3.0.0", + "micromark-extension-mdx-jsx": "^3.0.0", + "micromark-extension-mdx-md": "^2.0.0", + "micromark-extension-mdxjs-esm": "^3.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs-esm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", + "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-mdx-expression": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz", + "integrity": "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-events-to-acorn": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz", + "integrity": "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -4945,7 +6306,6 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, "license": "MIT" }, "node_modules/nanoid": { @@ -5042,6 +6402,28 @@ } } }, + "node_modules/next-mdx-remote": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/next-mdx-remote/-/next-mdx-remote-6.0.0.tgz", + "integrity": "sha512-cJEpEZlgD6xGjB4jL8BnI8FaYdN9BzZM4NwadPe1YQr7pqoWjg9EBCMv3nXBkuHqMRfv2y33SzUsuyNh9LFAQQ==", + "license": "MPL-2.0", + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@mdx-js/mdx": "^3.0.1", + "@mdx-js/react": "^3.0.1", + "unist-util-remove": "^4.0.0", + "unist-util-visit": "^5.1.0", + "vfile": "^6.0.1", + "vfile-matter": "^5.0.0" + }, + "engines": { + "node": ">=14", + "npm": ">=7" + }, + "peerDependencies": { + "react": ">=16" + } + }, "node_modules/next/node_modules/postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", @@ -5300,6 +6682,31 @@ "node": ">=6" } }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -5407,6 +6814,16 @@ "react-is": "^16.13.1" } }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -5468,6 +6885,73 @@ "dev": true, "license": "MIT" }, + "node_modules/recma-build-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", + "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-build-jsx": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-jsx": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.1.tgz", + "integrity": "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==", + "license": "MIT", + "dependencies": { + "acorn-jsx": "^5.0.0", + "estree-util-to-js": "^2.0.0", + "recma-parse": "^1.0.0", + "recma-stringify": "^1.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/recma-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz", + "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "esast-util-from-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/recma-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", + "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-util-to-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", @@ -5512,6 +6996,68 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/rehype-recma": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", + "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "hast-util-to-estree": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.1.tgz", + "integrity": "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==", + "license": "MIT", + "dependencies": { + "mdast-util-mdx": "^3.0.0", + "micromark-extension-mdxjs": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/resolve": { "version": "1.22.11", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", @@ -5649,6 +7195,19 @@ "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", "license": "MIT" }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -5865,6 +7424,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -5874,6 +7442,22 @@ "node": ">=0.10.0" } }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, "node_modules/stable-hash": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", @@ -6008,6 +7592,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -6018,6 +7616,15 @@ "node": ">=4" } }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -6031,6 +7638,41 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/stripe": { + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/stripe/-/stripe-20.4.0.tgz", + "integrity": "sha512-F/aN1IQ9vHmlyLNi3DkiIbyzQb6gyBG0uYFd/VrEVQSc9BLtlgknPUx0EvzZdBMRLFuRaPFIFd7Mxwtg7Pbwzw==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@types/node": ">=16" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/style-to-js": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", + "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.14" + } + }, + "node_modules/style-to-object": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz", + "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.7" + } + }, "node_modules/styled-jsx": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", @@ -6163,6 +7805,26 @@ "node": ">=8.0" } }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/ts-api-utils": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", @@ -6361,9 +8023,124 @@ "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, + "devOptional": true, "license": "MIT" }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", + "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-4.0.0.tgz", + "integrity": "sha512-b4gokeGId57UVRX/eVKej5gXqGlc9+trkORhFJpu9raqZkZhU0zm8Doi05+HaiBsMEIJowL+2WtQ5ItjsngPXg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/unrs-resolver": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", @@ -6440,6 +8217,48 @@ "punycode": "^2.1.0" } }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-matter": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/vfile-matter/-/vfile-matter-5.0.1.tgz", + "integrity": "sha512-o6roP82AiX0XfkyTHyRCMXgHfltUNlXSEqCIS80f+mbAyiQBE2fxtDVMtseyytGx75sihiJFo/zR6r/4LTs2Cw==", + "license": "MIT", + "dependencies": { + "vfile": "^6.0.0", + "yaml": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -6562,6 +8381,21 @@ "dev": true, "license": "ISC" }, + "node_modules/yaml": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -6598,6 +8432,16 @@ "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } } } diff --git a/package.json b/package.json index f17a5ca..663224c 100644 --- a/package.json +++ b/package.json @@ -9,9 +9,12 @@ "lint": "eslint" }, "dependencies": { + "gray-matter": "^4.0.3", "next": "16.1.6", + "next-mdx-remote": "^6.0.0", "react": "19.2.3", - "react-dom": "19.2.3" + "react-dom": "19.2.3", + "stripe": "^20.4.0" }, "devDependencies": { "@tailwindcss/postcss": "^4", diff --git a/public/images/awards/advance-queensland.png b/public/images/awards/advance-queensland.png new file mode 100644 index 0000000..8dd2e34 Binary files /dev/null and b/public/images/awards/advance-queensland.png differ diff --git a/public/images/awards/australian-made-owned.png b/public/images/awards/australian-made-owned.png new file mode 100644 index 0000000..f72bf8d Binary files /dev/null and b/public/images/awards/australian-made-owned.png differ diff --git a/public/images/awards/australian-made.jpg b/public/images/awards/australian-made.jpg new file mode 100644 index 0000000..6cad2ef Binary files /dev/null and b/public/images/awards/australian-made.jpg differ diff --git a/public/images/awards/bluebox.png b/public/images/awards/bluebox.png new file mode 100644 index 0000000..7307de7 Binary files /dev/null and b/public/images/awards/bluebox.png differ diff --git a/public/images/awards/good-design.jpg b/public/images/awards/good-design.jpg new file mode 100644 index 0000000..7450248 Binary files /dev/null and b/public/images/awards/good-design.jpg differ diff --git a/public/images/awards/icra.png b/public/images/awards/icra.png new file mode 100644 index 0000000..76b0131 Binary files /dev/null and b/public/images/awards/icra.png differ diff --git a/public/images/awards/pl.jpg b/public/images/awards/pl.jpg new file mode 100644 index 0000000..0f22adb Binary files /dev/null and b/public/images/awards/pl.jpg differ diff --git a/public/images/awards/young-starters.png b/public/images/awards/young-starters.png new file mode 100644 index 0000000..1e687fe Binary files /dev/null and b/public/images/awards/young-starters.png differ diff --git a/public/images/founders/adam.png b/public/images/founders/adam.png new file mode 100644 index 0000000..4d3d89c Binary files /dev/null and b/public/images/founders/adam.png differ diff --git a/public/images/founders/tim.png b/public/images/founders/tim.png new file mode 100644 index 0000000..12870a0 Binary files /dev/null and b/public/images/founders/tim.png differ diff --git a/public/images/hero/3d-printing.jpg b/public/images/hero/3d-printing.jpg new file mode 100644 index 0000000..a3672d4 Binary files /dev/null and b/public/images/hero/3d-printing.jpg differ diff --git a/public/images/hero/code-editor-demo.gif b/public/images/hero/code-editor-demo.gif new file mode 100644 index 0000000..b3038e5 Binary files /dev/null and b/public/images/hero/code-editor-demo.gif differ diff --git a/public/images/hero/driving-school.png b/public/images/hero/driving-school.png new file mode 100644 index 0000000..63e9394 Binary files /dev/null and b/public/images/hero/driving-school.png differ diff --git a/public/images/hero/platform.png b/public/images/hero/platform.png new file mode 100644 index 0000000..84764f1 Binary files /dev/null and b/public/images/hero/platform.png differ diff --git a/public/images/hero/rover-hero-large.jpg b/public/images/hero/rover-hero-large.jpg new file mode 100644 index 0000000..dd2f6d7 Binary files /dev/null and b/public/images/hero/rover-hero-large.jpg differ diff --git a/public/images/hero/rover-hero.jpg b/public/images/hero/rover-hero.jpg new file mode 100644 index 0000000..e085d84 Binary files /dev/null and b/public/images/hero/rover-hero.jpg differ diff --git a/public/images/hero/rover-to-software.gif b/public/images/hero/rover-to-software.gif new file mode 100644 index 0000000..80d4e32 Binary files /dev/null and b/public/images/hero/rover-to-software.gif differ diff --git a/public/images/logo-dark.png b/public/images/logo-dark.png new file mode 100644 index 0000000..94e5608 Binary files /dev/null and b/public/images/logo-dark.png differ diff --git a/public/images/logo.png b/public/images/logo.png new file mode 100644 index 0000000..5a90045 Binary files /dev/null and b/public/images/logo.png differ diff --git a/public/images/partners/bgs.jpeg b/public/images/partners/bgs.jpeg new file mode 100644 index 0000000..cf580a5 Binary files /dev/null and b/public/images/partners/bgs.jpeg differ diff --git a/public/images/partners/cisco.png b/public/images/partners/cisco.png new file mode 100644 index 0000000..f4747b5 Binary files /dev/null and b/public/images/partners/cisco.png differ diff --git a/public/images/partners/codingathome.png b/public/images/partners/codingathome.png new file mode 100644 index 0000000..7eea230 Binary files /dev/null and b/public/images/partners/codingathome.png differ diff --git a/public/images/partners/gisp.png b/public/images/partners/gisp.png new file mode 100644 index 0000000..e882b4c Binary files /dev/null and b/public/images/partners/gisp.png differ diff --git a/public/images/partners/hfs-design.png b/public/images/partners/hfs-design.png new file mode 100644 index 0000000..9034adc Binary files /dev/null and b/public/images/partners/hfs-design.png differ diff --git a/public/images/partners/mars.png b/public/images/partners/mars.png new file mode 100644 index 0000000..dcc0740 Binary files /dev/null and b/public/images/partners/mars.png differ diff --git a/public/images/partners/nambour.jpg b/public/images/partners/nambour.jpg new file mode 100644 index 0000000..ef59297 Binary files /dev/null and b/public/images/partners/nambour.jpg differ diff --git a/public/images/partners/queensland-robotics.png b/public/images/partners/queensland-robotics.png new file mode 100644 index 0000000..e8b831a Binary files /dev/null and b/public/images/partners/queensland-robotics.png differ diff --git a/public/images/partners/reddirtrobotics.jpg b/public/images/partners/reddirtrobotics.jpg new file mode 100644 index 0000000..237c760 Binary files /dev/null and b/public/images/partners/reddirtrobotics.jpg differ diff --git a/public/images/partners/robogals.png b/public/images/partners/robogals.png new file mode 100644 index 0000000..e08fb2f Binary files /dev/null and b/public/images/partners/robogals.png differ diff --git a/public/images/partners/roborave.png b/public/images/partners/roborave.png new file mode 100644 index 0000000..964bd6f Binary files /dev/null and b/public/images/partners/roborave.png differ diff --git a/public/images/partners/shapelabs.png b/public/images/partners/shapelabs.png new file mode 100644 index 0000000..d7cb9ac Binary files /dev/null and b/public/images/partners/shapelabs.png differ diff --git a/public/images/partners/somerset.png b/public/images/partners/somerset.png new file mode 100644 index 0000000..9895792 Binary files /dev/null and b/public/images/partners/somerset.png differ diff --git a/public/images/partners/stpeters.jpg b/public/images/partners/stpeters.jpg new file mode 100644 index 0000000..86fb4d6 Binary files /dev/null and b/public/images/partners/stpeters.jpg differ diff --git a/public/images/partners/uq.png b/public/images/partners/uq.png new file mode 100644 index 0000000..04b93b1 Binary files /dev/null and b/public/images/partners/uq.png differ diff --git a/public/images/partners/worldsciencefair.png b/public/images/partners/worldsciencefair.png new file mode 100644 index 0000000..5c12806 Binary files /dev/null and b/public/images/partners/worldsciencefair.png differ diff --git a/public/images/products/3d-printing.gif b/public/images/products/3d-printing.gif new file mode 100644 index 0000000..d00ae95 Binary files /dev/null and b/public/images/products/3d-printing.gif differ diff --git a/public/images/products/case.png b/public/images/products/case.png new file mode 100644 index 0000000..c9b1d14 Binary files /dev/null and b/public/images/products/case.png differ diff --git a/public/images/products/class-management-large.png b/public/images/products/class-management-large.png new file mode 100644 index 0000000..4725eda Binary files /dev/null and b/public/images/products/class-management-large.png differ diff --git a/public/images/products/class-management.png b/public/images/products/class-management.png new file mode 100644 index 0000000..aaa359a Binary files /dev/null and b/public/images/products/class-management.png differ diff --git a/public/images/products/claw.jpg b/public/images/products/claw.jpg new file mode 100644 index 0000000..13184d1 Binary files /dev/null and b/public/images/products/claw.jpg differ diff --git a/public/images/products/code-editor-big.png b/public/images/products/code-editor-big.png new file mode 100644 index 0000000..3695d1b Binary files /dev/null and b/public/images/products/code-editor-big.png differ diff --git a/public/images/products/code-editor-laptop.gif b/public/images/products/code-editor-laptop.gif new file mode 100644 index 0000000..b3038e5 Binary files /dev/null and b/public/images/products/code-editor-laptop.gif differ diff --git a/public/images/products/code-editor-screenshot.png b/public/images/products/code-editor-screenshot.png new file mode 100644 index 0000000..faf20bc Binary files /dev/null and b/public/images/products/code-editor-screenshot.png differ diff --git a/public/images/products/cords.png b/public/images/products/cords.png new file mode 100644 index 0000000..a2be8e3 Binary files /dev/null and b/public/images/products/cords.png differ diff --git a/public/images/products/forklift-render.jpg b/public/images/products/forklift-render.jpg new file mode 100644 index 0000000..6eba23b Binary files /dev/null and b/public/images/products/forklift-render.jpg differ diff --git a/public/images/products/pen-holder.jpg b/public/images/products/pen-holder.jpg new file mode 100644 index 0000000..c15e776 Binary files /dev/null and b/public/images/products/pen-holder.jpg differ diff --git a/public/images/products/rover-activities.png b/public/images/products/rover-activities.png new file mode 100644 index 0000000..c459f7c Binary files /dev/null and b/public/images/products/rover-activities.png differ diff --git a/public/images/products/rover-big.png b/public/images/products/rover-big.png new file mode 100644 index 0000000..b25e19b Binary files /dev/null and b/public/images/products/rover-big.png differ diff --git a/public/images/products/rover-candid.png b/public/images/products/rover-candid.png new file mode 100644 index 0000000..70fd26c Binary files /dev/null and b/public/images/products/rover-candid.png differ diff --git a/public/images/products/rover-demo.gif b/public/images/products/rover-demo.gif new file mode 100644 index 0000000..80d4e32 Binary files /dev/null and b/public/images/products/rover-demo.gif differ diff --git a/public/images/products/rover-digger.png b/public/images/products/rover-digger.png new file mode 100644 index 0000000..024b057 Binary files /dev/null and b/public/images/products/rover-digger.png differ diff --git a/public/images/products/rover-render.jpg b/public/images/products/rover-render.jpg new file mode 100644 index 0000000..560afd3 Binary files /dev/null and b/public/images/products/rover-render.jpg differ diff --git a/public/images/products/rover-specs.png b/public/images/products/rover-specs.png new file mode 100644 index 0000000..6e2fb5d Binary files /dev/null and b/public/images/products/rover-specs.png differ diff --git a/public/images/products/rover.png b/public/images/products/rover.png new file mode 100644 index 0000000..95e1927 Binary files /dev/null and b/public/images/products/rover.png differ diff --git a/public/images/products/servo-programming.jpg b/public/images/products/servo-programming.jpg new file mode 100644 index 0000000..f7bf91b Binary files /dev/null and b/public/images/products/servo-programming.jpg differ diff --git a/public/images/products/simulator-big.png b/public/images/products/simulator-big.png new file mode 100644 index 0000000..cd6877e Binary files /dev/null and b/public/images/products/simulator-big.png differ diff --git a/public/images/products/simulator-demo.gif b/public/images/products/simulator-demo.gif new file mode 100644 index 0000000..ca6ffa9 Binary files /dev/null and b/public/images/products/simulator-demo.gif differ diff --git a/public/images/products/simulator-screenshot.png b/public/images/products/simulator-screenshot.png new file mode 100644 index 0000000..a2ac741 Binary files /dev/null and b/public/images/products/simulator-screenshot.png differ diff --git a/public/images/products/store/balloon-battle.jpg b/public/images/products/store/balloon-battle.jpg new file mode 100644 index 0000000..f0a4e2b Binary files /dev/null and b/public/images/products/store/balloon-battle.jpg differ diff --git a/public/images/products/store/bolt-clip-adapter.jpg b/public/images/products/store/bolt-clip-adapter.jpg new file mode 100644 index 0000000..6792922 Binary files /dev/null and b/public/images/products/store/bolt-clip-adapter.jpg differ diff --git a/public/images/products/store/bulldozer.png b/public/images/products/store/bulldozer.png new file mode 100644 index 0000000..6a8fac4 Binary files /dev/null and b/public/images/products/store/bulldozer.png differ diff --git a/public/images/products/store/carry-case.png b/public/images/products/store/carry-case.png new file mode 100644 index 0000000..7207cdb Binary files /dev/null and b/public/images/products/store/carry-case.png differ diff --git a/public/images/products/store/claw.jpg b/public/images/products/store/claw.jpg new file mode 100644 index 0000000..aaa2579 Binary files /dev/null and b/public/images/products/store/claw.jpg differ diff --git a/public/images/products/store/digger.jpg b/public/images/products/store/digger.jpg new file mode 100644 index 0000000..4fb8637 Binary files /dev/null and b/public/images/products/store/digger.jpg differ diff --git a/public/images/products/store/forklift.jpg b/public/images/products/store/forklift.jpg new file mode 100644 index 0000000..6eba23b Binary files /dev/null and b/public/images/products/store/forklift.jpg differ diff --git a/public/images/products/store/pen-holder.jpg b/public/images/products/store/pen-holder.jpg new file mode 100644 index 0000000..21f3fc7 Binary files /dev/null and b/public/images/products/store/pen-holder.jpg differ diff --git a/public/images/products/store/ping-pong-shooter.png b/public/images/products/store/ping-pong-shooter.png new file mode 100644 index 0000000..0a10a99 Binary files /dev/null and b/public/images/products/store/ping-pong-shooter.png differ diff --git a/public/images/products/store/rover-class-set.png b/public/images/products/store/rover-class-set.png new file mode 100644 index 0000000..7207cdb Binary files /dev/null and b/public/images/products/store/rover-class-set.png differ diff --git a/public/images/products/store/rover-individual.jpg b/public/images/products/store/rover-individual.jpg new file mode 100644 index 0000000..a0e9f3f Binary files /dev/null and b/public/images/products/store/rover-individual.jpg differ diff --git a/public/images/products/store/seed-planter.jpg b/public/images/products/store/seed-planter.jpg new file mode 100644 index 0000000..e3ecacf Binary files /dev/null and b/public/images/products/store/seed-planter.jpg differ diff --git a/public/images/products/store/servo-motor.jpg b/public/images/products/store/servo-motor.jpg new file mode 100644 index 0000000..a4e9c43 Binary files /dev/null and b/public/images/products/store/servo-motor.jpg differ diff --git a/public/images/products/store/spare-tracks.jpg b/public/images/products/store/spare-tracks.jpg new file mode 100644 index 0000000..24f726f Binary files /dev/null and b/public/images/products/store/spare-tracks.jpg differ diff --git a/public/images/products/store/sumo-brick-scoop.jpg b/public/images/products/store/sumo-brick-scoop.jpg new file mode 100644 index 0000000..600a61a Binary files /dev/null and b/public/images/products/store/sumo-brick-scoop.jpg differ diff --git a/public/images/products/store/sumo-flat-scoop.jpg b/public/images/products/store/sumo-flat-scoop.jpg new file mode 100644 index 0000000..c8947d5 Binary files /dev/null and b/public/images/products/store/sumo-flat-scoop.jpg differ diff --git a/public/images/products/store/sumo-ramp-scoop.jpg b/public/images/products/store/sumo-ramp-scoop.jpg new file mode 100644 index 0000000..49a7596 Binary files /dev/null and b/public/images/products/store/sumo-ramp-scoop.jpg differ diff --git a/public/images/products/store/tipper.jpg b/public/images/products/store/tipper.jpg new file mode 100644 index 0000000..e97edf1 Binary files /dev/null and b/public/images/products/store/tipper.jpg differ diff --git a/public/images/resources/accelerometer.gif b/public/images/resources/accelerometer.gif new file mode 100644 index 0000000..186e311 Binary files /dev/null and b/public/images/resources/accelerometer.gif differ diff --git a/public/images/resources/activity-claw-attachment.jpg b/public/images/resources/activity-claw-attachment.jpg new file mode 100644 index 0000000..7aba618 Binary files /dev/null and b/public/images/resources/activity-claw-attachment.jpg differ diff --git a/public/images/resources/activity-digger-and-tipper-attachment.jpg b/public/images/resources/activity-digger-and-tipper-attachment.jpg new file mode 100644 index 0000000..b5fa5e9 Binary files /dev/null and b/public/images/resources/activity-digger-and-tipper-attachment.jpg differ diff --git a/public/images/resources/activity-forklift-attachment.jpg b/public/images/resources/activity-forklift-attachment.jpg new file mode 100644 index 0000000..410b11a Binary files /dev/null and b/public/images/resources/activity-forklift-attachment.jpg differ diff --git a/public/images/resources/activity-making-music-advanced.jpg b/public/images/resources/activity-making-music-advanced.jpg new file mode 100644 index 0000000..638eec4 Binary files /dev/null and b/public/images/resources/activity-making-music-advanced.jpg differ diff --git a/public/images/resources/activity-making-music-beginner.jpg b/public/images/resources/activity-making-music-beginner.jpg new file mode 100644 index 0000000..638eec4 Binary files /dev/null and b/public/images/resources/activity-making-music-beginner.jpg differ diff --git a/public/images/resources/activity-making-music-intermediate.jpg b/public/images/resources/activity-making-music-intermediate.jpg new file mode 100644 index 0000000..638eec4 Binary files /dev/null and b/public/images/resources/activity-making-music-intermediate.jpg differ diff --git a/public/images/resources/activity-pingpong-attachment.jpg b/public/images/resources/activity-pingpong-attachment.jpg new file mode 100644 index 0000000..60d2f1e Binary files /dev/null and b/public/images/resources/activity-pingpong-attachment.jpg differ diff --git a/public/images/resources/activity-rover-theremin.jpg b/public/images/resources/activity-rover-theremin.jpg new file mode 100644 index 0000000..d71c60c Binary files /dev/null and b/public/images/resources/activity-rover-theremin.jpg differ diff --git a/public/images/resources/activity-servo-gauge.jpg b/public/images/resources/activity-servo-gauge.jpg new file mode 100644 index 0000000..c8bfeb2 Binary files /dev/null and b/public/images/resources/activity-servo-gauge.jpg differ diff --git a/public/images/resources/balance-bot.png b/public/images/resources/balance-bot.png new file mode 100644 index 0000000..b32facc Binary files /dev/null and b/public/images/resources/balance-bot.png differ diff --git a/public/images/resources/balloon-battle-bots-at-trinity-college-beenleigh.jpeg b/public/images/resources/balloon-battle-bots-at-trinity-college-beenleigh.jpeg new file mode 100644 index 0000000..8d66007 Binary files /dev/null and b/public/images/resources/balloon-battle-bots-at-trinity-college-beenleigh.jpeg differ diff --git a/public/images/resources/binary-bot.png b/public/images/resources/binary-bot.png new file mode 100644 index 0000000..fc4234d Binary files /dev/null and b/public/images/resources/binary-bot.png differ diff --git a/public/images/resources/build-guide-bulldozer.png b/public/images/resources/build-guide-bulldozer.png new file mode 100644 index 0000000..fa49922 Binary files /dev/null and b/public/images/resources/build-guide-bulldozer.png differ diff --git a/public/images/resources/build-guide-claw.jpg b/public/images/resources/build-guide-claw.jpg new file mode 100644 index 0000000..528cd54 Binary files /dev/null and b/public/images/resources/build-guide-claw.jpg differ diff --git a/public/images/resources/build-guide-digger.jpg b/public/images/resources/build-guide-digger.jpg new file mode 100644 index 0000000..e1f941a Binary files /dev/null and b/public/images/resources/build-guide-digger.jpg differ diff --git a/public/images/resources/build-guide-forklift.png b/public/images/resources/build-guide-forklift.png new file mode 100644 index 0000000..af1c5fb Binary files /dev/null and b/public/images/resources/build-guide-forklift.png differ diff --git a/public/images/resources/build-guide-pen.jpg b/public/images/resources/build-guide-pen.jpg new file mode 100644 index 0000000..1fb25cc Binary files /dev/null and b/public/images/resources/build-guide-pen.jpg differ diff --git a/public/images/resources/build-guide-ping-pong-shooter.PNG b/public/images/resources/build-guide-ping-pong-shooter.PNG new file mode 100644 index 0000000..7bebffc Binary files /dev/null and b/public/images/resources/build-guide-ping-pong-shooter.PNG differ diff --git a/public/images/resources/build-guide-planter.png b/public/images/resources/build-guide-planter.png new file mode 100644 index 0000000..a2aaf4d Binary files /dev/null and b/public/images/resources/build-guide-planter.png differ diff --git a/public/images/resources/build-guide-roborave-line-follow.jpg b/public/images/resources/build-guide-roborave-line-follow.jpg new file mode 100644 index 0000000..9c2e688 Binary files /dev/null and b/public/images/resources/build-guide-roborave-line-follow.jpg differ diff --git a/public/images/resources/build-guide-tipper.jpg b/public/images/resources/build-guide-tipper.jpg new file mode 100644 index 0000000..9ae4ab6 Binary files /dev/null and b/public/images/resources/build-guide-tipper.jpg differ diff --git a/public/images/resources/cargo-bot.png b/public/images/resources/cargo-bot.png new file mode 100644 index 0000000..6ae7fbb Binary files /dev/null and b/public/images/resources/cargo-bot.png differ diff --git a/public/images/resources/colour-sensor.gif b/public/images/resources/colour-sensor.gif new file mode 100644 index 0000000..dc4ec43 Binary files /dev/null and b/public/images/resources/colour-sensor.gif differ diff --git a/public/images/resources/colourful-sounds.png b/public/images/resources/colourful-sounds.png new file mode 100644 index 0000000..8905978 Binary files /dev/null and b/public/images/resources/colourful-sounds.png differ diff --git a/public/images/resources/connections-in-3d-printing.jpg b/public/images/resources/connections-in-3d-printing.jpg new file mode 100644 index 0000000..02b4774 Binary files /dev/null and b/public/images/resources/connections-in-3d-printing.jpg differ diff --git a/public/images/resources/conversation-bot.png b/public/images/resources/conversation-bot.png new file mode 100644 index 0000000..370ba4b Binary files /dev/null and b/public/images/resources/conversation-bot.png differ diff --git a/public/images/resources/creating-a-maze-unit.png b/public/images/resources/creating-a-maze-unit.png new file mode 100644 index 0000000..45a36a1 Binary files /dev/null and b/public/images/resources/creating-a-maze-unit.png differ diff --git a/public/images/resources/creating-a-sumo-unit.png b/public/images/resources/creating-a-sumo-unit.png new file mode 100644 index 0000000..b8fc0b8 Binary files /dev/null and b/public/images/resources/creating-a-sumo-unit.png differ diff --git a/public/images/resources/dance-dance-rover-lution.png b/public/images/resources/dance-dance-rover-lution.png new file mode 100644 index 0000000..505ca54 Binary files /dev/null and b/public/images/resources/dance-dance-rover-lution.png differ diff --git a/public/images/resources/design-blog-domino-layer.jpg b/public/images/resources/design-blog-domino-layer.jpg new file mode 100644 index 0000000..bf699e4 Binary files /dev/null and b/public/images/resources/design-blog-domino-layer.jpg differ diff --git a/public/images/resources/design-blog-fan-gecko.jpg b/public/images/resources/design-blog-fan-gecko.jpg new file mode 100644 index 0000000..447f2e4 Binary files /dev/null and b/public/images/resources/design-blog-fan-gecko.jpg differ diff --git a/public/images/resources/design-blog-ping-pong-shooter.jpg b/public/images/resources/design-blog-ping-pong-shooter.jpg new file mode 100644 index 0000000..f72c818 Binary files /dev/null and b/public/images/resources/design-blog-ping-pong-shooter.jpg differ diff --git a/public/images/resources/design-blog-sumo-flipper.jpg b/public/images/resources/design-blog-sumo-flipper.jpg new file mode 100644 index 0000000..bbbd6e0 Binary files /dev/null and b/public/images/resources/design-blog-sumo-flipper.jpg differ diff --git a/public/images/resources/driving-school-basics.png b/public/images/resources/driving-school-basics.png new file mode 100644 index 0000000..013c906 Binary files /dev/null and b/public/images/resources/driving-school-basics.png differ diff --git a/public/images/resources/driving-shapes-2.png b/public/images/resources/driving-shapes-2.png new file mode 100644 index 0000000..fdee834 Binary files /dev/null and b/public/images/resources/driving-shapes-2.png differ diff --git a/public/images/resources/driving-shapes.png b/public/images/resources/driving-shapes.png new file mode 100644 index 0000000..4bc3439 Binary files /dev/null and b/public/images/resources/driving-shapes.png differ diff --git a/public/images/resources/everything-to-know-about-3d-printing.jpeg b/public/images/resources/everything-to-know-about-3d-printing.jpeg new file mode 100644 index 0000000..40c331e Binary files /dev/null and b/public/images/resources/everything-to-know-about-3d-printing.jpeg differ diff --git a/public/images/resources/flip-bot.png b/public/images/resources/flip-bot.png new file mode 100644 index 0000000..dfd6e10 Binary files /dev/null and b/public/images/resources/flip-bot.png differ diff --git a/public/images/resources/frequently-asked-questions.jpeg b/public/images/resources/frequently-asked-questions.jpeg new file mode 100644 index 0000000..7611ccf Binary files /dev/null and b/public/images/resources/frequently-asked-questions.jpeg differ diff --git a/public/images/resources/getting-started-the-micromelon-rover-uart.png b/public/images/resources/getting-started-the-micromelon-rover-uart.png new file mode 100644 index 0000000..fa03c2e Binary files /dev/null and b/public/images/resources/getting-started-the-micromelon-rover-uart.png differ diff --git a/public/images/resources/getting-started-with-open-mv-and-the-micromelon-rover.png b/public/images/resources/getting-started-with-open-mv-and-the-micromelon-rover.png new file mode 100644 index 0000000..628e5cf Binary files /dev/null and b/public/images/resources/getting-started-with-open-mv-and-the-micromelon-rover.png differ diff --git a/public/images/resources/getting-started-with-proportional-controls.png b/public/images/resources/getting-started-with-proportional-controls.png new file mode 100644 index 0000000..b5aa6a0 Binary files /dev/null and b/public/images/resources/getting-started-with-proportional-controls.png differ diff --git a/public/images/resources/getting-started-with-servo-motors.png b/public/images/resources/getting-started-with-servo-motors.png new file mode 100644 index 0000000..54b01f8 Binary files /dev/null and b/public/images/resources/getting-started-with-servo-motors.png differ diff --git a/public/images/resources/getting-started-with-the-micromelon-rover.png b/public/images/resources/getting-started-with-the-micromelon-rover.png new file mode 100644 index 0000000..89983de Binary files /dev/null and b/public/images/resources/getting-started-with-the-micromelon-rover.png differ diff --git a/public/images/resources/getting-started-with-the-python-module.png b/public/images/resources/getting-started-with-the-python-module.png new file mode 100644 index 0000000..b7b8a2d Binary files /dev/null and b/public/images/resources/getting-started-with-the-python-module.png differ diff --git a/public/images/resources/guide-how-to-design-a-rover-attachment.PNG b/public/images/resources/guide-how-to-design-a-rover-attachment.PNG new file mode 100644 index 0000000..15f6688 Binary files /dev/null and b/public/images/resources/guide-how-to-design-a-rover-attachment.PNG differ diff --git a/public/images/resources/guide-starting-an-after-school-robotics-club.jpg b/public/images/resources/guide-starting-an-after-school-robotics-club.jpg new file mode 100644 index 0000000..9bae423 Binary files /dev/null and b/public/images/resources/guide-starting-an-after-school-robotics-club.jpg differ diff --git a/public/images/resources/guide-to-making-attachments-in-tinkercad.jpg b/public/images/resources/guide-to-making-attachments-in-tinkercad.jpg new file mode 100644 index 0000000..b525908 Binary files /dev/null and b/public/images/resources/guide-to-making-attachments-in-tinkercad.jpg differ diff --git a/public/images/resources/guide-to-roborave-line-follow.jpg b/public/images/resources/guide-to-roborave-line-follow.jpg new file mode 100644 index 0000000..857b26b Binary files /dev/null and b/public/images/resources/guide-to-roborave-line-follow.jpg differ diff --git a/public/images/resources/guide-to-using-gears.PNG b/public/images/resources/guide-to-using-gears.PNG new file mode 100644 index 0000000..a6721be Binary files /dev/null and b/public/images/resources/guide-to-using-gears.PNG differ diff --git a/public/images/resources/gyroscope.gif b/public/images/resources/gyroscope.gif new file mode 100644 index 0000000..d1f4dab Binary files /dev/null and b/public/images/resources/gyroscope.gif differ diff --git a/public/images/resources/how-to-design-a-sumo-attachment.png b/public/images/resources/how-to-design-a-sumo-attachment.png new file mode 100644 index 0000000..3b9bc23 Binary files /dev/null and b/public/images/resources/how-to-design-a-sumo-attachment.png differ diff --git a/public/images/resources/how-to-export-sensor-data-from-the-rover.PNG b/public/images/resources/how-to-export-sensor-data-from-the-rover.PNG new file mode 100644 index 0000000..e7d10e1 Binary files /dev/null and b/public/images/resources/how-to-export-sensor-data-from-the-rover.PNG differ diff --git a/public/images/resources/how-to-maintain-a-3d-printer.JPG b/public/images/resources/how-to-maintain-a-3d-printer.JPG new file mode 100644 index 0000000..da80b81 Binary files /dev/null and b/public/images/resources/how-to-maintain-a-3d-printer.JPG differ diff --git a/public/images/resources/how-to-remote-control-the-rover.jpg b/public/images/resources/how-to-remote-control-the-rover.jpg new file mode 100644 index 0000000..8a48908 Binary files /dev/null and b/public/images/resources/how-to-remote-control-the-rover.jpg differ diff --git a/public/images/resources/how-to-use-i2c.PNG b/public/images/resources/how-to-use-i2c.PNG new file mode 100644 index 0000000..478334a Binary files /dev/null and b/public/images/resources/how-to-use-i2c.PNG differ diff --git a/public/images/resources/install-guide-pycharm.png b/public/images/resources/install-guide-pycharm.png new file mode 100644 index 0000000..d0ffd16 Binary files /dev/null and b/public/images/resources/install-guide-pycharm.png differ diff --git a/public/images/resources/install-guide-vs-code.png b/public/images/resources/install-guide-vs-code.png new file mode 100644 index 0000000..06f7ea6 Binary files /dev/null and b/public/images/resources/install-guide-vs-code.png differ diff --git a/public/images/resources/ir-sensor.gif b/public/images/resources/ir-sensor.gif new file mode 100644 index 0000000..b5490aa Binary files /dev/null and b/public/images/resources/ir-sensor.gif differ diff --git a/public/images/resources/lane-guidance.png b/public/images/resources/lane-guidance.png new file mode 100644 index 0000000..77b91bf Binary files /dev/null and b/public/images/resources/lane-guidance.png differ diff --git a/public/images/resources/learning-binary.jpg b/public/images/resources/learning-binary.jpg new file mode 100644 index 0000000..f60d119 Binary files /dev/null and b/public/images/resources/learning-binary.jpg differ diff --git a/public/images/resources/line-following-h433h-89p7d-capak-lpsxl.jpg b/public/images/resources/line-following-h433h-89p7d-capak-lpsxl.jpg new file mode 100644 index 0000000..d197e58 Binary files /dev/null and b/public/images/resources/line-following-h433h-89p7d-capak-lpsxl.jpg differ diff --git a/public/images/resources/line-following.png b/public/images/resources/line-following.png new file mode 100644 index 0000000..db04aff Binary files /dev/null and b/public/images/resources/line-following.png differ diff --git a/public/images/resources/maze.png b/public/images/resources/maze.png new file mode 100644 index 0000000..55a7ccd Binary files /dev/null and b/public/images/resources/maze.png differ diff --git a/public/images/resources/micromelon-code-editor-260.png b/public/images/resources/micromelon-code-editor-260.png new file mode 100644 index 0000000..df6a044 Binary files /dev/null and b/public/images/resources/micromelon-code-editor-260.png differ diff --git a/public/images/resources/micromelon-code-editor-283.png b/public/images/resources/micromelon-code-editor-283.png new file mode 100644 index 0000000..1966c42 Binary files /dev/null and b/public/images/resources/micromelon-code-editor-283.png differ diff --git a/public/images/resources/micromelon-heads-north-to-cairns-state-high-school.jpg b/public/images/resources/micromelon-heads-north-to-cairns-state-high-school.jpg new file mode 100644 index 0000000..a807a15 Binary files /dev/null and b/public/images/resources/micromelon-heads-north-to-cairns-state-high-school.jpg differ diff --git a/public/images/resources/prison-escape.png b/public/images/resources/prison-escape.png new file mode 100644 index 0000000..3315926 Binary files /dev/null and b/public/images/resources/prison-escape.png differ diff --git a/public/images/resources/puppy-bot.png b/public/images/resources/puppy-bot.png new file mode 100644 index 0000000..7e3e526 Binary files /dev/null and b/public/images/resources/puppy-bot.png differ diff --git a/public/images/resources/random-bug-bot-2.png b/public/images/resources/random-bug-bot-2.png new file mode 100644 index 0000000..3e00d81 Binary files /dev/null and b/public/images/resources/random-bug-bot-2.png differ diff --git a/public/images/resources/random-bug-bot.png b/public/images/resources/random-bug-bot.png new file mode 100644 index 0000000..aacf49e Binary files /dev/null and b/public/images/resources/random-bug-bot.png differ diff --git a/public/images/resources/roaming-rover.png b/public/images/resources/roaming-rover.png new file mode 100644 index 0000000..af7bd7b Binary files /dev/null and b/public/images/resources/roaming-rover.png differ diff --git a/public/images/resources/robot-simulator.png b/public/images/resources/robot-simulator.png new file mode 100644 index 0000000..6563347 Binary files /dev/null and b/public/images/resources/robot-simulator.png differ diff --git a/public/images/resources/rover-van-gogh.png b/public/images/resources/rover-van-gogh.png new file mode 100644 index 0000000..d5ec8b9 Binary files /dev/null and b/public/images/resources/rover-van-gogh.png differ diff --git a/public/images/resources/running-a-term-of-digital-technologies-classes-in-the-robot-simulator.png b/public/images/resources/running-a-term-of-digital-technologies-classes-in-the-robot-simulator.png new file mode 100644 index 0000000..8afe0a6 Binary files /dev/null and b/public/images/resources/running-a-term-of-digital-technologies-classes-in-the-robot-simulator.png differ diff --git a/public/images/resources/setting-up-a-school.png b/public/images/resources/setting-up-a-school.png new file mode 100644 index 0000000..5c4c547 Binary files /dev/null and b/public/images/resources/setting-up-a-school.png differ diff --git a/public/images/resources/showcase-rover-and-arduino-line-follow.JPG b/public/images/resources/showcase-rover-and-arduino-line-follow.JPG new file mode 100644 index 0000000..db69238 Binary files /dev/null and b/public/images/resources/showcase-rover-and-arduino-line-follow.JPG differ diff --git a/public/images/resources/spike-drop.png b/public/images/resources/spike-drop.png new file mode 100644 index 0000000..2877274 Binary files /dev/null and b/public/images/resources/spike-drop.png differ diff --git a/public/images/resources/stop-on-colour-change.png b/public/images/resources/stop-on-colour-change.png new file mode 100644 index 0000000..9b02b19 Binary files /dev/null and b/public/images/resources/stop-on-colour-change.png differ diff --git a/public/images/resources/sumo.png b/public/images/resources/sumo.png new file mode 100644 index 0000000..7bba227 Binary files /dev/null and b/public/images/resources/sumo.png differ diff --git a/public/images/resources/survey-bot.png b/public/images/resources/survey-bot.png new file mode 100644 index 0000000..8f321bb Binary files /dev/null and b/public/images/resources/survey-bot.png differ diff --git a/public/images/resources/troubleshooting-3d-prints.jpg b/public/images/resources/troubleshooting-3d-prints.jpg new file mode 100644 index 0000000..e8303be Binary files /dev/null and b/public/images/resources/troubleshooting-3d-prints.jpg differ diff --git a/public/images/resources/turn-over-rover.png b/public/images/resources/turn-over-rover.png new file mode 100644 index 0000000..81eb236 Binary files /dev/null and b/public/images/resources/turn-over-rover.png differ diff --git a/public/images/resources/ultrasonic-sensor.png b/public/images/resources/ultrasonic-sensor.png new file mode 100644 index 0000000..22002f2 Binary files /dev/null and b/public/images/resources/ultrasonic-sensor.png differ diff --git a/public/images/resources/using-class-controls.png b/public/images/resources/using-class-controls.png new file mode 100644 index 0000000..06fabc9 Binary files /dev/null and b/public/images/resources/using-class-controls.png differ diff --git a/public/images/resources/windup-rover.jpg b/public/images/resources/windup-rover.jpg new file mode 100644 index 0000000..7ad86a1 Binary files /dev/null and b/public/images/resources/windup-rover.jpg differ diff --git a/public/images/resources/xb3xasp6iz9s5gwqqo5anvcd0lwd1l.jpg b/public/images/resources/xb3xasp6iz9s5gwqqo5anvcd0lwd1l.jpg new file mode 100644 index 0000000..5af306d Binary files /dev/null and b/public/images/resources/xb3xasp6iz9s5gwqqo5anvcd0lwd1l.jpg differ diff --git a/public/images/resources/year-7-digital-tech-at-st-peters.png b/public/images/resources/year-7-digital-tech-at-st-peters.png new file mode 100644 index 0000000..fa58bcf Binary files /dev/null and b/public/images/resources/year-7-digital-tech-at-st-peters.png differ diff --git a/scripts/cleanup-mdx.mjs b/scripts/cleanup-mdx.mjs new file mode 100644 index 0000000..60abf5b --- /dev/null +++ b/scripts/cleanup-mdx.mjs @@ -0,0 +1,45 @@ +import fs from 'fs'; +import path from 'path'; +import { fileURLToPath } from 'url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const dir = path.join(__dirname, '..', 'content', 'resources'); + +let fixed = 0; +for (const f of fs.readdirSync(dir).filter(f => f.endsWith('.mdx'))) { + const filepath = path.join(dir, f); + const original = fs.readFileSync(filepath, 'utf8'); + let content = original; + + // Clean excerpts that contain HTML/CSS artifacts + const excerptMatch = content.match(/^excerpt: "(.*)"$/m); + if (excerptMatch) { + let excerpt = excerptMatch[1]; + excerpt = excerpt.replace(/#block-[^\s]+ \{[^}]*\}/g, ''); + excerpt = excerpt.replace(/!\[[^\]]*\]\([^)]*\)/g, ''); + excerpt = excerpt.replace(/\[([^\]]*)\]\([^)]*\)/g, '$1'); + excerpt = excerpt.replace(/\*\*/g, ''); + excerpt = excerpt.replace(/\s+/g, ' ').trim().substring(0, 250); + if (excerpt !== excerptMatch[1]) { + content = content.replace(excerptMatch[0], `excerpt: "${excerpt}"`); + } + } + + // Remove BACK TO POSTS lines + content = content.replace(/\[?\s*\*?\*?BACK TO POSTS\s*\*?\*?\s*\]?\s*\([^)]*\)\s*(\*?\*?\s*\|?\s*\*?\*?\s*\[?\*?\*?OPEN PAGE AS PDF\*?\*?\]?\([^)]*\))?/gi, ''); + + // Remove --> artifacts + content = content.replace(/^-->\s*$/gm, ''); + + // Remove CSS block definitions + content = content.replace(/#block-[a-zA-Z0-9_-]+ \{[^}]*\}/g, ''); + + // Clean excessive blank lines + content = content.replace(/\n{3,}/g, '\n\n'); + + if (content !== original) { + fs.writeFileSync(filepath, content); + fixed++; + } +} +console.log(`Cleaned ${fixed} files`); diff --git a/scripts/download-assets.sh b/scripts/download-assets.sh new file mode 100644 index 0000000..4493a38 --- /dev/null +++ b/scripts/download-assets.sh @@ -0,0 +1,56 @@ +#!/bin/bash +# Download assets from current Squarespace site +BASE="https://images.squarespace-cdn.com/content/v1/60a43bf842d7b601064a8828" +OUT="public/images" + +# Founders +curl -sL "$BASE/207a7c93-62e4-4cce-960e-3aac9d0f326d/adam.png" -o "$OUT/founders/adam.png" +curl -sL "$BASE/1a6645b4-9e27-4b49-b8ff-c3644c358f4c/tim.png" -o "$OUT/founders/tim.png" + +# Partner logos +curl -sL "$BASE/1633901579287-HDYLZ442KFVAZWZCPSXI/codingathome.png" -o "$OUT/partners/codingathome.png" +curl -sL "$BASE/1633901627921-UKKWATKWSZF65M8PILDY/worldsciencefair.png" -o "$OUT/partners/worldsciencefair.png" +curl -sL "$BASE/1633901657858-W25D5TI13OTSG76POUDS/cisco.png" -o "$OUT/partners/cisco.png" +curl -sL "$BASE/1633901706899-JBER9BFFNRKAW6ZF0KCH/uq-logo-lockup-purple.png" -o "$OUT/partners/uq.png" +curl -sL "$BASE/1633901726291-HK73RNB7LCNZ17IXQYMC/shapelabs.png" -o "$OUT/partners/shapelabs.png" +curl -sL "$BASE/1633901745735-MR5B6UE4A89BLW9H4PLM/roborave.png" -o "$OUT/partners/roborave.png" +curl -sL "$BASE/1634585888937-VZJBKXYBI5V28XGXN8T9/robo-gals-new.png" -o "$OUT/partners/robogals.png" +curl -sL "$BASE/961ac034-e08c-4585-aeee-90cff217a3cc/Screen-Shot-2022-01-19-at-2.41.17-pm.png" -o "$OUT/partners/somerset.png" +curl -sL "$BASE/4a1c8c44-deba-49fe-bed9-100bced46984/MARS-logo.png" -o "$OUT/partners/mars.png" +curl -sL "$BASE/1633912027308-Z2PUHHVZR07R4A55Z1NJ/queensland+robotics.png" -o "$OUT/partners/queensland-robotics.png" +curl -sL "$BASE/24345bac-45df-4625-bbe9-4c2b9ddc2bbd/001.jpg" -o "$OUT/partners/nambour.jpg" +curl -sL "$BASE/2b8da32b-f29f-4fbc-a69f-62b674ff6455/HFSDesign_Logo1-ColourBlack.png" -o "$OUT/partners/hfs-design.png" +curl -sL "$BASE/42bb721d-a1de-48a5-b595-1a6ee0809d31/reddirtrobotics%2Blogo.jpg" -o "$OUT/partners/reddirtrobotics.jpg" +curl -sL "$BASE/102b1693-2145-4aea-8012-4b41f4b101f7/195909638_151774876989903_7462155829817761256_n.jpg" -o "$OUT/partners/stpeters.jpg" +curl -sL "$BASE/74593547-155c-41d6-a3ec-c9f2870043e0/1631322817046.jpeg" -o "$OUT/partners/bgs.jpeg" +curl -sL "$BASE/298bbc5f-49ee-40c1-aa0c-255bca5d6f12/GISP_black_logo.png" -o "$OUT/partners/gisp.png" + +# Award badges +curl -sL "$BASE/f2922da5-e964-497d-8e45-bfde14f9a16f/body-1-good-design-award_gold-winner_logo-jpg-ximg_-l_8_m-smart_-e1599799902729.jpg" -o "$OUT/awards/good-design.jpg" +curl -sL "$BASE/1633901132092-1CSSNZ4JPWFXQG9XDGP4/advanced-queensland.png" -o "$OUT/awards/advance-queensland.png" +curl -sL "$BASE/1633901205930-0TMN1CR2WD3UFNKMOT15/youngstarterslogo.png" -o "$OUT/awards/young-starters.png" +curl -sL "$BASE/58a43758-897b-4821-92f8-16f21b3a7bab/Australian-Made-Owned-full-colour-logo.jpg" -o "$OUT/awards/australian-made.jpg" +curl -sL "$BASE/1633901223722-ULL99PJTYXHRA7W8VQQ7/icralogo.png" -o "$OUT/awards/icra.png" +curl -sL "$BASE/1633901251644-ZCCMHUZF7QIK8NXWNKZI/blueboxlogo.png" -o "$OUT/awards/bluebox.png" +curl -sL "$BASE/b205cc03-1282-44ef-8e94-9a99037dbca5/PL.jpg" -o "$OUT/awards/pl.jpg" + +# Product/Platform images +curl -sL "$BASE/d7e06c90-5ae8-4a25-aa51-695b63542b76/platform.png" -o "$OUT/hero/platform.png" +curl -sL "$BASE/15c6cb9e-36ed-4b8f-96e6-4485ec587d77/rover-candid.png" -o "$OUT/products/rover-candid.png" +curl -sL "$BASE/a738f6d7-a969-445f-982c-71d9f80943b1/rover-big.png" -o "$OUT/products/rover-big.png" +curl -sL "$BASE/afa456f1-1da2-4e8f-9a13-44503985bf1d/driving-school-duckie-town.png" -o "$OUT/hero/driving-school.png" +curl -sL "$BASE/e3de22cd-11b8-4bf4-87c1-155d84607e84/simulator-big.png" -o "$OUT/products/simulator-big.png" +curl -sL "$BASE/1d1b50df-b357-4eb2-8e83-4a7ea36152ae/code-editor-big.png" -o "$OUT/products/code-editor-big.png" +curl -sL "$BASE/1633409192147-YZB8VCH6IQVIX6JJ00R7/class-management.png" -o "$OUT/products/class-management.png" +curl -sL "$BASE/b8018b7c-dd04-4b0e-a77f-5d648be55b85/amo-2021-logo-rgb-full-colour-clear.png" -o "$OUT/awards/australian-made-owned.png" +curl -sL "$BASE/04fae17e-865c-4f22-af38-fe8c023406a4/KeyShot+Renders.70.jpg" -o "$OUT/products/rover-render.jpg" +curl -sL "$BASE/1633397571502-7P7WRMB5N3X0WDVSV1K4/rover.png" -o "$OUT/products/rover.png" +curl -sL "$BASE/1633398402343-BCFYMKQICJQC5M34D296/rover-digger-full.png" -o "$OUT/products/rover-digger.png" +curl -sL "$BASE/1633398257202-RKGBJDDOEVTIYVGZWDG3/cords.png" -o "$OUT/products/cords.png" +curl -sL "$BASE/1633398231053-6EF4N4ZGLIG92FXJONTI/case.png" -o "$OUT/products/case.png" +curl -sL "$BASE/1633400391317-34X5T9TL6I1ASWIZYH0X/image-asset.png" -o "$OUT/products/rover-specs.png" +curl -sL "$BASE/1633988093034-A27ZE2HMSHGGDK7VDSM9/header+video+with+laptop.gif" -o "$OUT/hero/code-editor-demo.gif" +curl -sL "$BASE/514f66e4-0c76-4ca8-8451-b38d0c4b39e6/2021-12-16_16-01-19_1639630906.jpg" -o "$OUT/hero/3d-printing.jpg" +curl -sL "$BASE/1633402428790-4PHP6JHFUYICKH614XQW/from-rover-to-software.gif" -o "$OUT/hero/rover-to-software.gif" + +echo "Done downloading assets" diff --git a/scripts/fix-all-mdx.mjs b/scripts/fix-all-mdx.mjs new file mode 100644 index 0000000..c5f4662 --- /dev/null +++ b/scripts/fix-all-mdx.mjs @@ -0,0 +1,111 @@ +import fs from 'fs'; +import path from 'path'; +import { fileURLToPath } from 'url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const dir = path.join(__dirname, '..', 'content', 'resources'); + +let fixed = 0; +for (const f of fs.readdirSync(dir).filter(f => f.endsWith('.mdx'))) { + const filepath = path.join(dir, f); + const original = fs.readFileSync(filepath, 'utf8'); + + // Split frontmatter from content + const secondDash = original.indexOf('---', 4); + if (secondDash === -1) continue; + let frontmatter = original.substring(0, secondDash + 3); + let content = original.substring(secondDash + 3); + + // === Fix body content === + + // Remove BACK TO POSTS and OPEN PAGE AS PDF + content = content.replace(/\[\s*\*?\*?\s*BACK TO POSTS\s*\*?\*?\s*\]\([^)]*\)/gi, ''); + content = content.replace(/\*?\*?\s*BACK TO POSTS\s*\*?\*?/gi, ''); + content = content.replace(/\|?\s*\[?\s*\*?\*?\s*OPEN PAGE AS PDF\s*\*?\*?\s*\]?\s*\([^)]*\)/gi, ''); + + // Remove CSS block definitions + content = content.replace(/#block-[a-zA-Z0-9_-]+ \{[^}]*?\}/g, ''); + + // Remove --> artifacts + content = content.replace(/^-->\s*$/gm, ''); + + // Escape ALL < that aren't part of: + // 1. Markdown images: ![...](...) - these don't have < + // 2. iframe tags: + // 3. Already escaped: \< + // Strategy: protect safe tags, escape everything else, restore safe tags + + // Temporarily replace safe tags with placeholders + const safeTags = []; + content = content.replace(/<(\/?)iframe([^>]*)>/gi, (match) => { + safeTags.push(match); + return `__SAFE_TAG_${safeTags.length - 1}__`; + }); + content = content.replace(/<(\/?)video([^>]*)>/gi, (match) => { + safeTags.push(match); + return `__SAFE_TAG_${safeTags.length - 1}__`; + }); + content = content.replace(/]*)>/gi, (match) => { + safeTags.push(match); + return `__SAFE_TAG_${safeTags.length - 1}__`; + }); + + // Now escape all remaining < and > that aren't in image markdown + // Split by lines to handle image markdown + const lines = content.split('\n'); + for (let i = 0; i < lines.length; i++) { + const line = lines[i]; + // Skip lines that are image markdown + if (line.trim().startsWith('![')) continue; + // Skip lines that only contain safe tag placeholders + if (line.trim().match(/^__SAFE_TAG_\d+__$/)) continue; + + // Escape < and > that aren't already escaped or part of placeholders + lines[i] = line.replace(/<(?!_SAFE_TAG)/g, (match, offset) => { + // Check if already escaped + if (offset > 0 && line[offset - 1] === '\\') return match; + return '<'; + }); + lines[i] = lines[i].replace(/>(?!_)/g, (match, offset) => { + const before = lines[i].substring(0, offset); + // Don't escape if it's after a safe tag placeholder + if (before.match(/__SAFE_TAG_\d+$/)) return match; + // Don't escape if already escaped + if (offset > 0 && lines[i][offset - 1] === '\\') return match; + // Don't escape markdown blockquotes at start of line + if (before.match(/^\s*$/)) return match; + return '>'; + }); + } + content = lines.join('\n'); + + // Restore safe tags + for (let i = 0; i < safeTags.length; i++) { + content = content.replace(`__SAFE_TAG_${i}__`, safeTags[i]); + } + + // Clean excessive blank lines + content = content.replace(/\n{3,}/g, '\n\n'); + + // === Fix frontmatter excerpt === + const excerptMatch = frontmatter.match(/^excerpt: "(.*)"$/m); + if (excerptMatch) { + let excerpt = excerptMatch[1]; + excerpt = excerpt.replace(/\*?\*?BACK TO POSTS\*?\*?/gi, ''); + excerpt = excerpt.replace(/!\[[^\]]*\]\([^)]*\)/g, ''); + excerpt = excerpt.replace(/\[([^\]]*)\]\([^)]*\)/g, '$1'); + excerpt = excerpt.replace(/\*\*/g, ''); + excerpt = excerpt.replace(/#block-[^\s]+ \{[^}]*?\}/g, ''); + excerpt = excerpt.replace(/\s*\|\s*/g, ' '); + excerpt = excerpt.replace(/\s+/g, ' ').trim(); + excerpt = excerpt.substring(0, 250); + frontmatter = frontmatter.replace(excerptMatch[0], `excerpt: "${excerpt}"`); + } + + const result = frontmatter + content; + if (result !== original) { + fs.writeFileSync(filepath, result); + fixed++; + } +} +console.log(`Fixed ${fixed} files`); diff --git a/scripts/fix-bullets.mjs b/scripts/fix-bullets.mjs new file mode 100644 index 0000000..8d45560 --- /dev/null +++ b/scripts/fix-bullets.mjs @@ -0,0 +1,37 @@ +import fs from 'fs'; +import path from 'path'; +import { fileURLToPath } from 'url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const dir = path.join(__dirname, '..', 'content', 'resources'); + +let fixed = 0; +for (const f of fs.readdirSync(dir).filter(f => f.endsWith('.mdx'))) { + const filepath = path.join(dir, f); + const original = fs.readFileSync(filepath, 'utf8'); + + // Split frontmatter from content + const secondDash = original.indexOf('---', 4); + if (secondDash === -1) continue; + const frontmatter = original.substring(0, secondDash + 3); + let content = original.substring(secondDash + 3); + + // Fix broken bullet lists where "-" is on its own line followed by blank line then content + // Pattern: line with just "-", blank line, then content text + // Should become: "- content text" + content = content.replace(/^- *\n\n(.+)/gm, '- $1'); + + // Also fix numbered lists with same pattern: "1." on own line, blank, content + content = content.replace(/^(\d+)\. *\n\n(.+)/gm, '$1. $2'); + + // Clean up any resulting triple+ blank lines + content = content.replace(/\n{3,}/g, '\n\n'); + + const result = frontmatter + content; + if (result !== original) { + fs.writeFileSync(filepath, result); + fixed++;; + console.log(` Fixed: ${f}`); + } +} +console.log(`Fixed bullet lists in ${fixed} files`); diff --git a/scripts/fix-code-blocks.mjs b/scripts/fix-code-blocks.mjs new file mode 100644 index 0000000..c8b9572 --- /dev/null +++ b/scripts/fix-code-blocks.mjs @@ -0,0 +1,59 @@ +import fs from "fs"; +import path from "path"; +import { fileURLToPath } from "url"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const contentDir = path.join(__dirname, "..", "content", "resources"); + +const files = fs.readdirSync(contentDir).filter((f) => f.endsWith(".mdx")); + +let totalFixed = 0; + +for (const file of files) { + const filePath = path.join(contentDir, file); + const raw = fs.readFileSync(filePath, "utf-8"); + + // Split frontmatter from content + const fmMatch = raw.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/); + if (!fmMatch) continue; + + const frontmatter = fmMatch[1]; + const content = fmMatch[2]; + + const lines = content.split("\n"); + let insideFencedBlock = false; + let changed = false; + const result = []; + + for (let line of lines) { + // Toggle fenced code block state + if (/^```/.test(line.trimStart())) { + insideFencedBlock = !insideFencedBlock; + result.push(line); + continue; + } + + if (insideFencedBlock) { + // Inside fenced code block: unescape HTML entities + const newLine = line.replace(/</g, "<").replace(/>/g, ">"); + if (newLine !== line) changed = true; + result.push(newLine); + } else { + // Outside fenced block: fix inline code spans + const newLine = line.replace(/`[^`]+`/g, (match) => { + return match.replace(/</g, "<").replace(/>/g, ">"); + }); + if (newLine !== line) changed = true; + result.push(newLine); + } + } + + if (changed) { + const output = `---\n${frontmatter}\n---\n${result.join("\n")}`; + fs.writeFileSync(filePath, output, "utf-8"); + totalFixed++; + console.log(`Fixed: ${file}`); + } +} + +console.log(`\nDone. Fixed ${totalFixed} files.`); diff --git a/scripts/fix-mdx-jsx.mjs b/scripts/fix-mdx-jsx.mjs new file mode 100644 index 0000000..e6153cf --- /dev/null +++ b/scripts/fix-mdx-jsx.mjs @@ -0,0 +1,52 @@ +import fs from 'fs'; +import path from 'path'; +import { fileURLToPath } from 'url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const dir = path.join(__dirname, '..', 'content', 'resources'); + +// Known safe HTML/JSX tags that MDX should handle +const safeTags = new Set([ + 'iframe', 'video', 'source', 'br', 'hr', 'img', + 'div', 'span', 'p', 'a', + 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', + 'ul', 'ol', 'li', + 'strong', 'em', 'b', 'i', 'u', + 'code', 'pre', + 'blockquote', + 'table', 'tr', 'td', 'th', 'thead', 'tbody', +]); + +let fixed = 0; +for (const f of fs.readdirSync(dir).filter(f => f.endsWith('.mdx'))) { + const filepath = path.join(dir, f); + const original = fs.readFileSync(filepath, 'utf8'); + + // Split into frontmatter and content + const fmEnd = original.indexOf('---', 4); + if (fmEnd === -1) continue; + const frontmatter = original.substring(0, fmEnd + 3); + let content = original.substring(fmEnd + 3); + + // Escape angle brackets that look like HTML tags but aren't valid JSX + // Match < followed by something that's not a known safe tag or / + content = content.replace(/<(?!\/?(?:iframe|video|source|br|hr|img)\b)([^>]*?)>/g, (match, inner) => { + // Keep markdown image syntax ![...](...) - these don't match since they start with ! + // Keep valid looking JSX/HTML + const tagName = inner.split(/[\s/]/)[0].toLowerCase(); + if (safeTags.has(tagName) || tagName.startsWith('!--')) return match; + // It's a stray angle bracket - escape it + return `\\<${inner}\\>`; + }); + + // Also escape bare < that aren't part of tags (like math: x < y) + // But be careful not to double-escape + content = content.replace(/([^\\])<([^/!a-zA-Z\\])/g, '$1\\<$2'); + + const result = frontmatter + content; + if (result !== original) { + fs.writeFileSync(filepath, result); + fixed++; + } +} +console.log(`Fixed JSX issues in ${fixed} files`); diff --git a/scripts/scrape-resources.mjs b/scripts/scrape-resources.mjs new file mode 100644 index 0000000..d634b25 --- /dev/null +++ b/scripts/scrape-resources.mjs @@ -0,0 +1,280 @@ +#!/usr/bin/env node +/** + * Scrape all resources from the Squarespace site using the JSON API. + * Usage: node scripts/scrape-resources.mjs + */ + +import fs from 'fs'; +import path from 'path'; +import { fileURLToPath } from 'url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const CONTENT_DIR = path.join(__dirname, '..', 'content', 'resources'); +const IMAGE_DIR = path.join(__dirname, '..', 'public', 'images', 'resources'); + +fs.mkdirSync(CONTENT_DIR, { recursive: true }); +fs.mkdirSync(IMAGE_DIR, { recursive: true }); + +function parseResourceUrls(xml) { + const urls = []; + const regex = /(https?:\/\/micromelon\.com\.au\/resources\/[^<]+)<\/loc>/g; + let match; + while ((match = regex.exec(xml)) !== null) { + const url = match[1]; + if (url.includes('/category/') || url.includes('/tag/')) continue; + if (url === 'https://micromelon.com.au/resources') continue; + urls.push(url); + } + return urls; +} + +async function fetchPageJson(url) { + const res = await fetch(`${url}?format=json-pretty`, { + headers: { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)' }, + }); + if (!res.ok) return null; + const text = await res.text(); + if (!text.trim()) return null; + try { return JSON.parse(text); } catch { return null; } +} + +function sqsBodyToMarkdown(html) { + if (!html) return ''; + + // Step 1: Extract meaningful content from Squarespace block structure + // The body is wrapped in sqs-layout divs. We need to find the actual content blocks. + let md = html; + + // Remove Squarespace layout/grid wrapper divs but keep sqs-block-content + // First, extract all image URLs from data-src attributes (Squarespace lazy loading) + const imageSrcs = []; + const imgDataSrcRegex = /data-src="([^"]+)"/g; + let imgMatch; + while ((imgMatch = imgDataSrcRegex.exec(html)) !== null) { + const src = imgMatch[1].startsWith('//') ? `https:${imgMatch[1]}` : imgMatch[1]; + imageSrcs.push(src); + } + + // Extract video embeds (YouTube, Vimeo, etc.) + const videos = []; + const videoRegex = /data-html="([^"]*)"/g; + let videoMatch; + while ((videoMatch = videoRegex.exec(html)) !== null) { + const decoded = videoMatch[1] + .replace(/</g, '<').replace(/>/g, '>') + .replace(/&/g, '&').replace(/"/g, '"'); + const srcMatch = decoded.match(/src=["']([^"']+)["']/); + if (srcMatch) videos.push(srcMatch[1]); + } + + // Also find direct iframe embeds + const iframeRegex = /]*src=["']([^"']+)["'][^>]*>/gi; + let iframeMatch; + while ((iframeMatch = iframeRegex.exec(html)) !== null) { + if (!videos.includes(iframeMatch[1])) videos.push(iframeMatch[1]); + } + + // Now do the HTML-to-markdown conversion + // Remove all Squarespace-specific wrapper divs, keeping inner content + // Remove style blocks + md = md.replace(/]*>[\s\S]*?<\/style>/gi, ''); + + // Remove script blocks + md = md.replace(/]*>[\s\S]*?<\/script>/gi, ''); + + // Handle Squarespace image blocks - replace with clean markdown images + // Match the noscript img tags which have the actual src + md = md.replace(/