Instead of spending the Fall 2021 semester teaching Micromouse, I developed a completely new robot and curriculum. The main problems I wanted to solve were twofold. First was the recurring issue with having students learn C++ from scratch. Second was improving mass manufacturability in case the course had to go remote again or for scalability. Considering the budget of the class, I also had to keep things under $40 per robot. Luckily, the release of the Pi Pico, which can run CircuitPython and only costs $4, made this entire project feasible.


The design ended up being pretty straightforward. I took inspiration from competition-winning mice and used the PCB as the chassis. The biggest electrical change I made was switching from ToF sensors to a differential IR sensor pair. To minimize the BOM, I removed things like decoupling capacitors and series/pull-down resistors on MOSFET gates. I used the simplest IR sensor circuit and even multiplexed them among the Pico’s 3 ADC pins without additional parts. With all the changes, the entire BOM except for motors could now be sourced from US distributors, relieving the issue of having to order parts months in advance. Since the schematic and layout will continue to evolve, I won’t attach any pictures here.

I finished the first iteration (MMv3) during the summer. Since I had the board area and pins available, I also added a 1-Wire EEPROM and LSM9DS1. Not realizing the EEPROM I bought only worked at overdrive speeds, I spent one too many hours modifying CircuitPython in non-portable ways to get the support added.

Once school started, I completed the next iteration (MMv3.1) which turned the design into something more complete. My favorite part was not needing a 9V cable and finally having a power switch.

After having my officers assemble the previous design, I made several changes focused on manufacturability for what was supposed to be the final iteration (MMv3.2). Since I am a terrible leader when it comes to motivating other people, I ended up spending winter break assembling MMv3.2 and rewriting all of the labs around it.

As fate would have it, I made a slight mistake in the IR detector circuit. The reason I had to use such large pull-up resistors was that I had the photodiode in forward bias. In reverse bias, the current becomes much more predictable and larger, enabling smaller resistors. As has been a theme with reusing circuits I designed a decade ago, I used this circuit in my coil gun where I had IR sensitivity issues. Well, I finally had the iteration (MMv3.3) the Spring 2022 class would use.


When it came to running the course, everything went pretty well. It took me almost a decade to go from through-hole soldering to SMD soldering, so I made sure students got exposure to reflow soldering and industry manufacturing methods early. For their first time, the reflow results were surprisingly good and consistent. However, due to using $6 soldering irons, the hand soldering portions were not so great. After 3 lab sessions, office hours, much debugging, and many destroyed traces, all of the students had something working.

For firmware development, the familiarity of Python and having running new code be as simple as uploading a file to a flash drive made things run very smoothly. Definitely an improvement over Arduino, albeit with a performance hit.

There’s a laundry list of updates to make for the next iteration of the class, but I would consider MMv3 a success. My time at Berkeley has come to an end, but perhaps future generations can push the class towards actual maze-solving and even competing.