Gallery

BMo - The Modular Robot

Completed: 17 March, 2023

BMo is a modular robot consisting of three distinct modules, the brain (BMo), motor (MMo), and hinge (HMo) modules. By connecting these modules in a different configurations, BMo can transform into several different robots. A few configurations include a Differential Drive, Four-Wheel Car,2 Degrees of Freedom Manipulator, and Mobile Manipulator robots. BMo was inspired by the modular robotics kits I had as a child, and was a challenge to myself to do a very intensive hardware project with almost zero experience.

Mechanical Design

Each module is constructed using 2D shapes developed in Computer Aided Design software like OnShape. Pieces are lasercut and press-fit together. Modules attach using magnetic pogo pins that pass information through whenthey are connected. Dowels were also added in a triangle formation to prevent a shear force from disconnecting the modules.

Each module serves a different purpose. The brain sends out commands to any connected module, while the motor and hinge modules respond to the broadcasted message. By creating something general, each module can have different parts attached to it to create something unique.

Electrical Design

Each module operates according to the circuit diagram depicted above. Inside every module is Adafruit's Feather RP2040, a small circuit board with a Raspberry Pi RP2040 microcontroller. These were programmed to send command signals using I2C communication because it is a simple two-write communication protocol. In addition to the command signals, a shared ground is sent through the magnetic pogo pins whenever they are connected. Every module contains a small Lithium Polymer battery to eliminate the need for sending power.

Wireless communication was added on using Adafruit's ESP32 Feather and the ESP32 NOW wireless protocol. This utilizes peer-to-peer connections to send information to a specific board.

Software

To send, receive, and interpret commands, every board was programmed using the Arduino code libraries. I2C communication was established using the Wire library and servo commands were sent using the Servo library. A user can enter pre-programmed commands into a serial interface which is then wirelessly sent to the brain module. For more details about the software, checkout my accompanying github repository.