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.

// CANONICAL HARDWARE The full schematic, PCB layout, and gerbers live in 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.
📋 1 — Bill of Materials

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).

PartQtyRefNotes
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.
≈ USD 35–55 total (more with optional servos / sensor)
// FAB IT, DON'T HAND-WIRE IT The board is dense — 6 ICs + 30+ passives. Send the gerbers from 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.
// ADD THESE PER SCHEMATIC NOTES1000 µ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).
🛠️ 2 — Tools you'll need
🔥
Soldering iron
25–40 W, fine tip
🪡
Solder
0.5 mm leaded or lead-free
✂️
Wire strippers
For 24 AWG
🔧
Small screwdriver
Phillips PH00 + flathead
🔬
Multimeter
Continuity + voltage
🖨️
3D printer (optional)
Or use a print service
🔥
Heat gun / lighter
For heat-shrink
💻
Computer + USB-C cable
For flashing firmware
// NICE-TO-HAVE Helping hands / PCB vise · solder fume extractor · flux paste · spare 0.1″ headers (for prototyping) · breadboard (test wiring before soldering).
🔌 3 — Wiring diagram & pin map

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.

ESP32-C3 Super Mini GPIO 0 GPIO 1 GPIO 2 GPIO 3 GPIO 4 GPIO 5 GPIO 6 GPIO 7 Servo L SG90 360° Servo R SG90 360° NeoPixel ×4 WS2812B Buzzer passive piezo HC-SR04 trig+echo OLED I²C SDA + SCL 3.7 V LiPo 600 mAh TP4056 USB-C charge

Pin map (v3 schematic)

GPIOWired toDirNotes
0SW1 push-buttonIN10 kΩ pull-up to 3V3 (R2). JP1 jumper bridges to GPIO 20 if SW1 unused.
1TB6612FNG AIN1 + green LEDs D5/D6 + J2OUTMotor A direction bit 1. Also drives green status LED pair.
2TB6612FNG AIN2OUTMotor A direction bit 2.
3TB6612FNG PWMA + tapped on J3OUTMotor 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.
4Buzzer (transistor stage)OUTR7 base / R8 series / R9 pull-down → bz1 or bz2.
5Onboard NeoPixel chain D1→D2→D3→D4OUTTX1812 5050 addressable RGB LEDs daisy-chained (WS2812-compatible). 800 kHz via RMT — the "rich light" of the project name.
6TB6612FNG BIN1 + J4 servo headerOUTMotor B direction bit 1. Also routed to 3-pin servo header J4.
7TB6612FNG BIN2OUTMotor B direction bit 2.
8OLED SDA (I²C)I/O10 kΩ pull-up to 3V3 (R10).
9OLED SCL (I²C)OUT10 kΩ pull-up to 3V3 (R11). Shared with BOOT button — pull-up keeps it safe at boot.
10TB6612FNG PWMB + blue LEDs D7/D8 + J5OUTMotor B speed PWM. Also drives blue status LED pair + J5 servo header.
20J7 (2-pin) + JP1 jumperI/OGeneric expansion. JP1 bridges to GPIO 0.
21J6 (4-pin)I/OExternal I²C / sensor (e.g. HC-SR04).

Live PCB layer browser + connector reference: hardware.html.

// MOTOR DRIVER TRUTH TABLE (TB6612FNG, motor A) 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).
// JUMPER OPTIONS 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.
// AUDIT CROSS-REFS The audit page items C1 (buzzer/battery), H1 (OLED/LED), H2 (OLED/BOOT) were drafted before the v3 schematic. The board's pull-up + transistor design resolves those concerns in hardware. Re-verify firmware against this pin map — see audit.
🛠️ 4 — Assembly — step by step

1Print the chassis~3 h print

  • Pull STL files from 03_3d/: chassis.stl, wheel.stl (×2), servo_horn.stl (×2).
  • Slicer settings: 0.2 mm layer, 20% infill, no supports needed for chassis.
  • PLA in any color. ~30 g total filament.

2Modify servos for continuous rotation~10 min

  • If you bought continuous-rotation versions (recommended), skip this step.
  • Otherwise: open the SG90, snip the position-feedback potentiometer's middle wire, replace with a 5 kΩ resistor divider (or buy the right kind).

3Mount servos & wheels~10 min

  • Press-fit the servos into the chassis side-cavities. Hold with 2× M2 screws each.
  • Attach the printed servo horns to the servo output shafts. Snap on the wheels.
  • Spin them by hand — should rotate freely with no rubbing.

4Solder the power chain~30 min

  • Battery JST-PH → TP4056 BAT+/BAT-.
  • TP4056 OUT+ → switch (SPDT, middle pin) → ESP32-C3 5V.
  • TP4056 OUT- → ESP32-C3 GND.
  • Test before connecting anything else: switch ON → multimeter on C3's 3V3 pin should read 3.30 ± 0.05 V.

5Wire the servos~15 min

  • Servo L: signal → GPIO 0, V+ → 5 V, GND → GND.
  • Servo R: signal → GPIO 1, V+ → 5 V, GND → GND.
  • SG90 servos draw a stall current spike (~600 mA each). If your battery dips below 3.5 V on stall, add a 470 µF cap across the 5 V rail.

6Wire the NeoPixels~10 min

  • NeoPixel DIN → GPIO 2. +5V → 5 V. GND → GND.
  • If using a strip cut to 4 LEDs, the data line goes to DIN (the input pad with the arrow pointing into the chip).
  • Add a 300–500 Ω resistor in series with DIN if your LEDs flicker.

7Wire the buzzer~5 min

  • Buzzer + → GPIO 3 (NOT GPIO 4 — see audit C1).
  • Buzzer → GND.
  • If it's loud-loud, add a 100 Ω series resistor.

8Wire the ultrasonic sensor~15 min

  • HC-SR04 VCC → 5 V. GND → GND.
  • TRIG → GPIO 5 (direct, 3.3 V is enough to trigger).
  • ECHO → 10 kΩ → GPIO 6 → 22 kΩ → GND. (Voltage divider drops 5 V to ~3.4 V.)

9Wire the OLED~10 min

  • VCC → 3.3 V (NOT 5 V — kills the screen).
  • GND → GND.
  • SDA → GPIO 8.
  • SCL → GPIO 9 + 10 kΩ pull-up to 3.3 V (BOOT button shares this pin — pull-up keeps it inactive at boot).

10Final fit-check~10 min

  • Slot the C3 board into the chassis, wires routed through the channels.
  • OLED on top, NeoPixels at the front, ultrasonic eye centered.
  • Battery sits in the middle pocket, TP4056 and switch on the side.
  • Snap the top cover on.
📐 5 — 3D-printed parts list

All STLs in 03_3d/. Print at 0.2 mm layer height, 20 % infill, PLA. No supports needed.

PartFileQtyPrint time
Main chassischassis.stl×1~2 h
Top covercover.stl×1~30 min
Wheelwheel.stl×2~20 min each
Servo hornservo_horn.stl×2~5 min each
OLED bezeloled_bezel.stl×1~10 min
Sensor mountsr04_mount.stl×1~10 min
// ALTERNATIVE No printer? Order from JLCPCB/PCBWay (≈ USD 6–10) or use a local makerspace. Order all 6 parts at once to save shipping.
⚡ 6 — First firmware flash

With the robot fully assembled, plug it into your computer via USB-C and flash the firmware.

  1. Visit flash.html (this tool, in your browser).
  2. Click Connect & install. Pick the USB JTAG/Serial port. Wait ~30 s.
  3. Switch the robot ON. You should hear the boot tune and see the rainbow LED sweep.
  4. Visit monitor.html, click Connect, baud rate 115200. Watch the boot logs.
  5. Verify each subsystem reports OK: servos: ok · neopixels: ok · oled: ok · ultrasonic: ok.
  6. Open RemoteXY on your phone, pair, drive. See user-guide.html for end-user controls.
// IT WORKS Your robot is alive. From here, see start-here.html for firmware customization and user-guide.html for everyday use.
// IT DOESN'T WORK See Mission 09 in start-here for the BOOT/RESET trick. Or check the audit page for known issues.

Wiring or BOM unclear? Open an issue: github.com/abourdim/robot_1/issues