Zombo the Robot
Zombo runs on an Adafruit ESP32-S3 Feather. We chose this because it is a powerful microcontroller with WI-FI and Bluetooth radios so that we have some flexibility for features and communications later. It supports several serial protocols and has a flexible GPIO system, but it will primarily communicate with most peripherals over an I2C bus. This is a widely used protocol and simplifies the interface to the peripherals.
Zombo is composed of the following subsystems.
- Display - Provides command feedback and status
- Command - Uses voice recognition to accept command inputs.
- Navigation - Uses ultra-sonic distance sensor for collision avoidance.
- Motors - Two drive wheels and one caster provide locomotion.
- Command - Uses voice recognition to accept command inputs.
- LED - It's not a robot without LEDs. We wil use the addressable NeoPixels.
- Diagnostics - Monitor Robot health including battery monitor and wireless signal strength
- Power - Power will be supplied with a battery. There are several voltage requirements. The microcontroller Feather and the Feather Wings runs on 3.3 VDC, The motors run on 4-6 VDC, and the LEDs use 5 VDC.
Bold addresses are non-default.
Since the ultrasonic sensor doesn't play nice on the I2C bus1 it will get it's own dedicated bus.
Device | Bus | Address | Available Range | Sub-system |
---|---|---|---|---|
OLED Display FeatherWing | Main | 0x3C | 0x3C-0x3D | Display |
DC Motor + Stepper FeatherWing | Main | 0x61 | 0x60-0x7F | Motors |
NeoDriver | Main | 0x60 | 0x60-0x67 | LED |
Voice Recognition | Main | 0x64 | Fixed | Command |
Ultrasonic Distance Sensor | Distance | 0x57 | Fixed | Navigation |
Feather ESP32-S3 onboard batter moniotor | Main | 0x36 | Fixed | Diagnostics |
Setup Python virtual environment
python -m venv venv
. venv/bin/activate
Install Python modules
pip install -r requirements.txt
Install CircuitPython modules
circup install -r circuitpython-requirements.txt
Note: circup
downloads and stores copies of the packages in ~/.local/share/circup/
or whatever the output of python -m site --user-base
returns.
screen /dev/ttyACM0 115200
Footnotes
-
We noticed that while this sensor does work with I2C it's not very 'friendly' - it doesn't like to share the I2C bus, we think it gets confused by other commands and can lock up the bus.