Project Overview
A custom-designed, 3D-printed RC car — including the wheels — built around the Seeed Studio XIAO ESP32-C3. The chassis was modelled from scratch in Fusion 360 and printed in PLA: first on a Creality Ender-3 S1 Pro, then on a Creality K1C after bed-levelling and heated-bed problems on the Ender. Drive is handled by a DC 130 dual-shaft motor (3V–6V, 12,000 RPM, direct drive) controlled via a TB6612FNG H-bridge module, while steering uses an MG90 9 g metal-gear micro servo for Ackermann-style front-wheel control.
Wireless control runs over ESP-NOW between two ESP32-C3 boards — one on the car (receiver) and one on a breadboard transmitter: an ESP32-C3 SuperMini with two KY-023 analog joystick modules. Motor speed is controlled with LEDC PWM and joystick dead zones to keep low-speed movement stable.
The XIAO's built-in LiPo connector and onboard 3.3 V regulator eliminates the need for an external buck converter — the 3.7 V battery connects directly to the XIAO, motor module, and servo. A custom PCB to replace the protoboard wiring is in progress: the schematic is drawn in KiCad, and the board layout is the next step.
CAD Design & 3D Printing
The full chassis was designed parametrically in Fusion 360 as a multi-body assembly: main body, front steering knuckles, wheel mounts, motor bracket, servo bracket, and the wheels themselves — all 3D printed. Every component was designed to fit the micro servo and the DC 130 motor directly.
Electronics & PCB Design
The electronics stack is built around the XIAO ESP32-C3 paired with a TB6612FNG H-bridge module. Supporting circuitry sits on a small protoboard: a power switch, red LED indicator, electrolytic capacitor for motor voltage spike suppression, and battery and motor connectors. A 100 nF ceramic capacitor is soldered across the motor terminals for brush noise suppression. A custom PCB replacing all of this is in progress in KiCad — the schematic was started in EasyEDA before being migrated to KiCad — targeting JLCPCB manufacture in the coming weeks.
| TB6612FNG Pin | ESP32-C3 GPIO | Function |
|---|---|---|
| PWMB | D10 | Motor speed control (PWM / LEDC) |
| BIN1 | D4 | Motor direction bit 1 |
| BIN2 | D5 | Motor direction bit 2 |
| STBY | 3.3 V | Standby — pulled high to enable driver |
| VM | 3.7 V LiPo | Motor power supply (direct from LiPo, no regulation) |
| VCC | 3.3 V | Logic power — from XIAO's onboard 3.3 V regulator |
| Servo Signal | D7 | PWM steering (MG90 metal-gear micro servo) |
Written in Arduino C++ using the ESP-NOW API and the LEDC driver directly. The receiver auto-calibrates joystick centres on power-up (averages the first 60 readings) and requires the throttle to sit at centre briefly before arming — preventing a motor spin on connect. Motor PWM runs at 20 kHz on an 11-bit timer; servo outputs 50 Hz with pulse width constrained to 1000–2000 µs. A 400 ms failsafe cuts the motor if packets stop arriving.




