Build your own Robot-01 from parts. Total bench time: about 4 hours (2 h soldering, 1 h assembly, 1 h debug). Skill level: comfortable with a soldering iron, willing to read schematics. Cost: roughly USD 35–55 depending on where you buy.
02_hardware/v3/.
Live PCB browser: hardware.html — toggle layers, see pin-out, download gerbers.
The pin map below reflects the v3 schematic (2025-07-28) — TB6612FNG H-bridge + DC motors, not servos.
Buy these. Links go to AliExpress for cheap, but Adafruit/SparkFun also stock everything.
From the v3 schematic. Full LCSC-format BOM at 02_hardware/bom_lcsc.xls (drop-in for JLCPCB / PCBWay assembly).
| Part | Qty | Ref | Notes |
|---|---|---|---|
| ESP32-C3 SuperMini | ×1 | U3 | RISC-V MCU · WiFi + BLE · USB-C native CDC. ~$2. |
| TB6612FNG dual H-bridge | ×1 | U1 | Drives 2 DC motors at up to 1.2 A continuous each. PWMA + AIN1/2 for motor A; PWMB + BIN1/2 for motor B; STBY enable. ~$1.50. |
| AMS1117-5.0 LDO regulator | ×1 | U4 | Drops battery → 5 V. ~$0.20. |
| SK12D07VG4 slide switch (SPDT) | ×1 | U2 | Power on/off. ~$0.30. |
| DC gear motor 5 V (with wheels) | ×2 | J8 + J9 | "Yellow TT motor" type. ~$2 each. Wheels usually included. |
| SG90 servo (optional, for arms) | ×0–4 | J2 / J3 / J4 / J5 | 3-pin servo headers exist on the board. Add later if you want articulation. ~$3 each. |
| TX1812 5050 addressable RGB LED (or WS2812B equivalent) | ×4 | D1, D2, D3, D4 | Onboard NeoPixel chain on GPIO 5 — daisy-chained (D1.DOUT → D2.DIN, etc). The "rich light" of 37_rich_light_move. ~$0.30 each. |
| HC-SR04 ultrasonic sensor (optional) | ×1 | J6 (4-pin) | Plug into J6. Add 22 kΩ / 10 kΩ divider on ECHO if connecting direct (5 V → 3.3 V). ~$2. |
| SSD1306 OLED 128×32 (I²C) | ×1 | BB1 | I²C addr 0x3C or 0x3D. Pull-ups R10/R11 (10 kΩ) on the PCB. ~$3. |
| Passive piezo buzzer | ×1 | bz1 / bz2 | Two footprints (8×14 mm and 12 mm) — populate one. Driven via transistor stage R7/R8/R9 — louder + protects GPIO. ~$0.50. |
| Omron B3F tactile push-button | ×1 | SW1 | User button on GPIO 0. R2 (10 kΩ) pulls high. ~$0.30. |
| Resistors 1 kΩ (LED current-limit) | ×2 | R1, R3 | For green pair (D5/D6) and blue pair (D7/D8). 0805 SMD. ~$0.05. |
| Resistors 10 kΩ (pull-ups) | ×5 | R2, R5, R6, R10, R11 | Button + I²C + STBY pull-up to 3V3. 0805 SMD. ~$0.05. |
| Resistors 4.7 kΩ | ×2 | R4, R9 | Buzzer transistor + signal divider. 0805 SMD. |
| NPN transistor (S8050 or 2N3904) | ×1 | Q1 (for buzzer) | SOT-23. Drives the piezo from a 3.3 V GPIO with more current. |
| LEDs 3 mm or 0805 (green ×2 + blue ×2) | ×4 | D5, D6, D7, D8 | Status LEDs — driven directly from GPIO 1 (green) and GPIO 10 (blue) via 1 kΩ. ~$0.05 each. |
| Capacitors 100 nF (decoupling) | ×6 | C1–C6 | Standard MCU/IC bypass. 0805 SMD. ~$0.02. |
| Capacitor 1000 µF (servo bulk, recommended) | ×1 | across 5V↔GND | Per the Jul 2025 schematic note — required if you populate servos. Stops 5 V dips during stall. |
| JST-PH battery + 18650 holder, or LiPo 3.7 V 1000 mAh | ×1 | J10/J11 | ~$5–8 depending on cell. |
| 3-pin servo headers + 2.54 mm pin headers | ×4 + ×1 | J2-J5 + J6 | For sensor/servo expansion. ~$0.20. |
| 3D-printed chassis + wheel mounts | ×1 set | 03_3d/ | STL files in the project. PLA, ~40 g. |
| M2 / M3 screws + standoffs | ~10 | — | For mounting PCB to chassis. |
| Hookup wire / heat-shrink | — | — | For motor leads + battery wires. |
02_hardware/v3/production/
to JLCPCB or PCBWay (~$5 for 5 boards) instead of perf-boarding it.
For SMD assembly, JLCPCB will populate the board for ~$15 with the LCSC BOM.
1000 µF bulk cap across 5V↔GND if you populate servos (per 2025-07-28 note).1N4148 protection diode reverse-biased on PWMA if you use J3 for servos (per 2025-06-21 note).
All connections terminate at the ESP32-C3. Power flows: battery → switch → TP4056 → board's 5 V rail → 3.3 V regulator on the C3 → sensors.
| GPIO | Wired to | Dir | Notes |
|---|---|---|---|
| 0 | SW1 push-button | IN | 10 kΩ pull-up to 3V3 (R2). JP1 jumper bridges to GPIO 20 if SW1 unused. |
| 1 | TB6612FNG AIN1 + green LEDs D5/D6 + J2 | OUT | Motor A direction bit 1. Also drives green status LED pair. |
| 2 | TB6612FNG AIN2 | OUT | Motor A direction bit 2. |
| 3 | TB6612FNG PWMA + tapped on J3 | OUT | Motor A speed PWM. Same signal also routed to J3 3-pin header so an external device can share it. JP2 selects J3's V+ pin: VCC direct or 5 V regulated. |
| 4 | Buzzer (transistor stage) | OUT | R7 base / R8 series / R9 pull-down → bz1 or bz2. |
| 5 | Onboard NeoPixel chain D1→D2→D3→D4 | OUT | 4× TX1812 5050 addressable RGB LEDs daisy-chained (WS2812-compatible). 800 kHz via RMT — the "rich light" of the project name. |
| 6 | TB6612FNG BIN1 + J4 servo header | OUT | Motor B direction bit 1. Also routed to 3-pin servo header J4. |
| 7 | TB6612FNG BIN2 | OUT | Motor B direction bit 2. |
| 8 | OLED SDA (I²C) | I/O | 10 kΩ pull-up to 3V3 (R10). |
| 9 | OLED SCL (I²C) | OUT | 10 kΩ pull-up to 3V3 (R11). Shared with BOOT button — pull-up keeps it safe at boot. |
| 10 | TB6612FNG PWMB + blue LEDs D7/D8 + J5 | OUT | Motor B speed PWM. Also drives blue status LED pair + J5 servo header. |
| 20 | J7 (2-pin) + JP1 jumper | I/O | Generic expansion. JP1 bridges to GPIO 0. |
| 21 | J6 (4-pin) | I/O | External I²C / sensor (e.g. HC-SR04). |
Live PCB layer browser + connector reference: hardware.html.
AIN1=L AIN2=L = Stop · AIN1=H AIN2=L = CW · AIN1=L AIN2=H = CCW · AIN1=H AIN2=H = Brake. Speed via PWMA 0–100 %. Same for B. STBY must be HIGH to enable the chip (R6 pulls it high; the firmware can also drive it).
JP1 bridges GPIO 0 ↔ GPIO 20 (use if you don't populate SW1).
JP2 selects: GPIO 3 → motor PWMA or GPIO 3 → J3 connector (e.g. NeoPixel strip).
Solder bridges or leave open as default.
03_3d/: chassis.stl, wheel.stl (×2), servo_horn.stl (×2).BAT+/BAT-.OUT+ → switch (SPDT, middle pin) → ESP32-C3 5V.OUT- → ESP32-C3 GND.DIN → GPIO 2. +5V → 5 V. GND → GND.+ → GPIO 3 (NOT GPIO 4 — see audit C1).− → GND.All STLs in 03_3d/. Print at 0.2 mm layer height, 20 % infill, PLA. No supports needed.
| Part | File | Qty | Print time |
|---|---|---|---|
| Main chassis | chassis.stl | ×1 | ~2 h |
| Top cover | cover.stl | ×1 | ~30 min |
| Wheel | wheel.stl | ×2 | ~20 min each |
| Servo horn | servo_horn.stl | ×2 | ~5 min each |
| OLED bezel | oled_bezel.stl | ×1 | ~10 min |
| Sensor mount | sr04_mount.stl | ×1 | ~10 min |
With the robot fully assembled, plug it into your computer via USB-C and flash the firmware.
servos: ok · neopixels: ok · oled: ok · ultrasonic: ok.Wiring or BOM unclear? Open an issue: github.com/abourdim/robot_1/issues