Hi, I’m Marco. I’m a rising junior at The Dalton School. For my main project, I’m making a micromouse robot– it’s a small robot that solves mazes and finds the optimal solution for traversing a physical maze. I chose this project because I really enjoy data algorithms and figuring out dynamic solutions to problems using computer science. For my starter project I chose to do the MiniPOV. I chose this because it was a good introduction to soldering and understanding parts of a circuitboard such as transistors, resistors, potentiometers, and capacitors.
These six weeks at Bluestamp have allowed me to understand myself better both as an engineer and as a problem solver. It’s allowed me to take a project that’s my own from start to finish and see it be brought to completion. I’ve also learned a lot about the project planning process. I realized that I need to do more research before I start a project or else I’ll run into a lot of problems that will impede my progress. By knowing exactly what I want to do beforehand, I hope I can mitigate (or at least prepare for) problems that will pop up as I work on future projects. It’s also allowed me to get much more comfortable in front of a camera and an audience. I’ve never had to speak to a camera or give a presentation in front of a group of strangers before, and with the milestone videos and project presentation night, I’ve grown as a public speaker and gained more confidence speaking in front of a camera. I’ve also learned how to use CAD software such as TinkerCAD in order to create things needed for my project. Bluestamp has also expanded my knowledge of electronic components and how circuit boards work. Before the program started, I had no idea what a transistor, capacitor, resistor, or potentiometer was. Overall, Bluestamp has been an amazing learning experience for me. It’s allowed me to expand my knowledge and toolset and also has allowed me to understand the process that I go through to solve problems.
For my final milestone, I combined the maze solving code with the robot. Due to my design my center of mass on my robot wasn’t exactly in the center. Additionally, I chose to use a 7.4v 450mAh battery with a high discharge rate, meaning my battery had inconsistencies in voltage as it drained if I tested my robot over a long period of time. Because of this, my robot had trouble driving straight and randomly drifted to one side or the other. This made correcting it with code difficult because the power to the motors wasn’t the same all the time.
This is what causes the drift and correction as seen in the demo video. I had to constantly correct my drift with my compass sensor, sometimes over-correcting just for the purpose of moving forward more to get to the next tile of the maze. This had its own set of problems. One big problem was that I originally purchased a compass sensor that gave inconsistent readings. I originally tried to work around the readings, but I ended up replacing the sensor I had with a BNO055 9-DOF compass sensor. Fine-tuning the compass correction with the new sensor took a lot of trial and error to make it even semi-consistent, as the robot’s drift seemed completely random. Since the compass sensor’s reading wasn’t accurate when rotating quickly, I had to pulse my motors’ power on and off in quick succession to get accurate readings as I turned. Also, I originally over-corrected for my robot’s drift– whenever I drifted 3 or 4 degrees off course, I corrected my robot’s path. This caused my battery to drain too fast and prevented my from completing a full run through the maze without getting inconsistent motor powers as the battery used up its charge. I ended up correcting more modestly, only correcting when the robot went around 10 degrees off course. This change allowed my robot to complete full runs without draining the battery while also staying on course.
Bill of Materials
3D Modeled Pieces (Sensor module, base mount)
For my second milestone, I designed and programmed the maze-mapping part of my project. My goal when designing this project was to have the robot go through the maze once blindly and record its path as it goes along, eventually reaching the end on its first run through. It would do this by following the wall until it reached the end. Then, on the second run through, the robot would use the record it had of what the maze looked like to find the shortest path to the end of the maze, then go along that optimized path. To implement this in my code, I used a data structure called a doubly linked list. A doubly linked list is a data structure made up of separate nodes with each node having a link to the next node as well as a link to the node before it.
The way I use this data structure in my code is by turning each movement that my robot does into a node with a value of the node being the direction. Each time the robot moves from a tile or makes a turn, a new node with the action that my robot has taken is put onto the linked list as a new node. When the robot runs into a dead end, it backtracks until it sees an opportunity to move in a different direction. The nodes on the linked list that contained the directions to the dead end are then removed, and each new direction that the robot moves in is added to the list. This process is repeated until the end of the maze. Then, on the second runthrough, the robot uses the directions from the linked list to follow the shortest possible path to the end of the maze. For my final milestone, I’m going to implement the code with my robot.
For my first milestone, I completed building the robot and built a cardboard maze. The design of my robot is inspired by a competition called MicroMouse– it’s a national competition where individuals build small-scale robots to complete mazes in the shortest amount of time. I built my robot from scratch in order to have control over the design from start to finish. I knew I wanted to use ultrasonic sensors to “see” how far away the walls of the maze were and wanted to use a compass sensor to detect how much I should turn, so I designed and printed a piece to hold my ultrasonic sensors and the compass sensor. I also designed and printed a base to put my arduino on top of and mount my motors to. This project was my first time CADding, so part of the process for creating the base and the sensor module was rapidly going through designs and reprinting them to see what worked best. I attached a motor shield on the arduino to allow for easier control of the motors and I also have a rocker switch on the side of the robot to control the power.
One issue I had with my design was the robot tipping. Since I originally didn’t have anything on the front of the base, my robot tipped forward as the wheels were further in the back. To fix this I added a ball caster wheel. The ball caster is a ball bearing inside a loose metal mount that causes the robot to be level while adding very little friction, thus allowing the wheels to move at full force. For my next milestone, I’m going to code the robot to complete the maze using wall following.
My starter project is the MiniPOV. It has 8 LEDs that blink rapidly and in different colors. The circuit board is made up of transistors, resistors, capacitors, a microcontroller, and a potentiometer. Resistors are used to set the brightness of the LEDs and prevent them from burning out due to too much current. Capacitors are used to keep both the input and output voltage stable when current goes through the LEDs/USBs. Transistors amplify current to allow the current from microcontroller to power 8 LEDs, as the current from the microcontroller is too weak to power the 8 LEDs on their own. A problem I had with my project was soldering the components in the right place– I soldered something incorrectly on the first day and I had to desolder it afterwards.