MirrorBallBot, an open-source ball-balancing robot from a maker using the GitHub handle AndreaFavero71, looks at its platform through a mirror rather than from above. The camera sits to the side and points at a mirror inclined at 27 degrees beneath the platform. The author says that, for the same camera and robot height, this widens the field of view by 58%, which allows a larger platform without a taller robot.
Three NEMA17 stepper motors tilt the circular platform to keep the ball centred. The workload is split between two kinds of hardware. A Raspberry Pi 4 handles vision, PID control and the touchscreen interface, and acts as the I2C master. It finds the ball by HSV thresholding, and the author reports that this loop runs at over 110 frames per second. The Pi then sends speed and step-count commands over a custom I2C protocol to three RP2040-Zero boards running MicroPython. Each board loads those commands into its PIO buffer and generates the step pulses in hardware, while the platform itself is actuated at roughly 17 to 25 Hz.
Three TMC2209 drivers run the motors and provide sensorless homing through StallGuard, so no limit switches are needed. On the 7-inch DSI touchscreen, users can start auto-balance, drag a finger to steer the ball, run preset paths such as circle and infinity, or record and replay their own. Live PID tuning and automatic ball colour calibration are also built in.
Builders can pick a wooden base or a fully 3D-printable version with a smaller footprint. The build also calls for a custom PCB, laser-cut acrylic parts and a PiCamera 3 Wide, and the reference manual lists more than 250 pads to solder. The repository includes STL and STEP files, the source code, and two PDF manuals of about 50 and 170 pages.
Code is mostly GPL-3.0, apart from one RP2040 file derived from unlicensed upstream code and included with credit. CAD files, models and documentation use CC BY-NC-SA 4.0, which restricts commercial use. The author thanks PCBWay for sponsoring the PCB and Elecrow for the display.