

Marvin PS
robot model controlled by ESP32
- Size
- 67 × 45 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 20
- Nets
- 42
- Pads
- 113
- Tracks, vias
- 358, 87
- Pours
- 1
- Routed
- Yes
- KiCad
- KiCad 9.0 (file 20241229)
- Created
- 7 Nov 2025
- Updated
- 9 Feb 2026
Overview
Marvin PS is an open-source printed circuit board by lhm0, from the lhm0/marvin_robot repository on GitHub. It is a 2-layer board of 67 × 45 mm with 20 parts on 42 nets, routed with 358 tracks and 87 vias.
It is built around the TPS63070RNM, 74HC595 and ULN2803A. Its parts include 5 ICs, 3 capacitors, 3 resistors, 3 connectors and 1 diode. It belongs with the robots and motor control boards of this library.
Main components
3TPS63070RNM
QFN152-V to 16-V Buck-Boost Converter With 3.6-A Switch CurrentTexas InstrumentsUncategorised74HC595
SOP-16-40℃~+85℃ 1 100ns@5V,50pF 10MHz 2V~6V 74HC 8 Serial-to-Serial or Parallel Tri-State SOP-16 Shift Registers ROHSGRShift RegistersULN2803A
SOP-18-300mil-40℃~+85℃ 0.93mA 100uA 15pF 20uA 30V 500mA 50V 8 SOP-18-300mil Darlington Transistor Arrays ROHSUMWDarlington Transistor Arrays
README
README.mdESP32-Based 3D-Printed Toy Robot
WiFi-Controlled Robot with Animated Face, Audio, and Modular Architecture

This repository contains all development data for an ESP32-based, fully 3D-printed toy robot featuring an animated face, sound output, and WiFi control.
The project combines mechanical design, electronics, and embedded software in a modular and replication-friendly architecture. It was designed for hobbyists, education, and non-commercial use, with a strong focus on availability of components and ease of assembly.
📌 Project Overview
The robot features:
- An expressive animated face using multiple displays
- Servo-driven head and arms
- A wheeled base driven by stepper motors
- Audio input and output
- WiFi connectivity with a browser-based control interface
- Battery-powered operation with USB-C charging
All mechanical parts are fully 3D-printed and were designed using Autodesk Fusion.
The electronics are organized on two custom two-layer PCBs, avoiding SMD components to simplify manual assembly.
🤖 Key Features
- ESP32 D1 mini as main controller
- Dual 0.71” round LCD displays for animated eyes
- 0.96” OLED display for mouth animations
- MG90S servos for head rotation and arm movement
- 28BYJ-48 (5V) stepper motors for platform movement
- MPU6050 tilt and motion sensor
- INMP441 microphone (clap detection, noise level)
- MAX98357A audio amplifier with miniature speaker
- Rechargeable Li-ion battery with USB-C charging
- WiFi-based web interface for remote control
- FreeRTOS-based firmware written in C++
🧩 System Architecture
The robot is built around a two-module electronic architecture:
Head Module (PCB 1)
- ESP32 D1 mini
- Eye and mouth displays
- MPU6050 motion sensor
- Microphone and audio amplifier
- Speaker output
Body Module (PCB 2)
- Stepper motor drivers
- Battery charging controller (TP4056)
- Buck-boost converter (TPS63070, 5 V output)
- Power distribution and on/off control
Both modules are connected via a 10-pin ribbon cable.
🧠 Software Overview
The firmware is written in C++ and based on FreeRTOS.
It handles:
- Concurrent control of motors, servos, displays, and audio
- Sensor acquisition (motion, microphone)
- WiFi networking and web server
- Animation logic and behavior control
The software is built using:
- Visual Studio Code
- PlatformIO
See SYSTEM_OVERVIEW.md in the repository for detailed software documentation.
🛠 Repository Structure
marvin_robot
├─ documentation
│ ├─ datasheets
│ └─ images
│ ├─ electronics
│ ├─ eye_images
│ ├─ mechanics
│ └─ software
├─ electronics
│ ├─ marvin_MCU
│ │ ├─ marvin_MCU-backups
│ │ └─ production
│ │ └─ backups
│ └─ marvin_PS
│ ├─ marvin_PS-backups
│ └─ production
│ └─ backups
├─ mechanics
│ └─ stl_files
│ ├─ base
│ ├─ body
│ ├─ head
│ └─ legs
└─ software🖨 3D Printing Notes
- All mechanical parts were designed in Autodesk Fusion
- STL files are provided for all parts
- 3MF files (for Bambu Lab printers) include:
- Optimized print settings
- Required support structures
- Automatic pauses for inserting M2/M3 nuts
🔌 Electronics & Assembly
- Uses widely available breakout boards
- Only through-hole components
- No SMD soldering required
- Assembly order matters due to double-sided PCBs
⚡ Power & Safety
- Powered by two parallel 18650 Li-ion cells
- Charging via USB-C
- Charging and protection handled by TP4056
⚠️ Li-ion safety:
Handle batteries with care. Avoid short circuits, mechanical damage, and overheating.
📜 License
This project is open source for:
- Private use
- Education
- Learning and experimentation
❌ Commercial use is not permitted.
🙌 Credits & Tools
- Mechanical design: Autodesk Fusion
- Electronics design: KiCad
- Firmware: ESP32 + FreeRTOS
- Development environment: VS Code + PlatformIO
Happy building! 🤖✨
Parts
20| Qty | Value | Footprint | References |
|---|---|---|---|
| 2 | 100k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R5, R8 |
| 2 | 100nF | Capacitor_THT:C_Rect_L10.0mm_W2.5mm_P7.50mm_MKS4 | C2, C3 |
| 2 | 28BYJ_48 | Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical | M1, M2 |
| 1 | 10 pin IDC connector | Connector_IDC:IDC-Header_2x05_P2.54mm_Vertical | J3 |
| 1 | 1k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R1 |
| 1 | 4017 | Package_DIP:DIP-16_W7.62mm | U7 |
| 1 | 470µF | my_footprints:CP_Radial_D10.0mm_P5.00mm_slim_silkscreen | C1 |
| 1 | 74HC595 | Package_DIP:DIP-16_W7.62mm | U1 |
| 1 | LED | LED_THT:LED_D3.0mm | D1 |
| 1 | SW_MEC_5G | my_footprints:OmronTaster | SW1 |
| 1 | TPS63070 | my_footprints:TPS63070_breakout | U4 |
| 1 | ULN2803A | Package_DIP:DIP-18_W7.62mm | U2 |
| 1 | VBUS input | my_footprints:connector_2pin | J2 |
| 1 | battery | Connector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_Vertical | J1 |
| 1 | charging control | my_footprints:TP4056_breakout | U3 |
| 1 | servo left | my_footprints:Jumper_3pin | M3 |
| 1 | servo right | my_footprints:Jumper_3pin | M4 |
More from lhm0/marvin_robot
2- 2 layers54 × 78.8 mm

- 2 layers78.4 × 40.8 mm

Similar boards
- 4 layers86.3 × 67.8 mm

- 2 layers100 × 100 mm

V2.2 Mechanical Seven Segment Controller
OverInvented/Flippy
The code needed to build a mechanical 7-segment display that uses electromagnets to display characters
53 parts65 - 2 layers28 × 36 mm

- 2 layers100 × 100 mm

- 2 layers110 × 31.5 mm

- 2 layers66.7 × 61.7 mm

Vday
niteshkadyan/Hearty-LED-Necklace-Badge
Kicad project files and Android app for the Hearty LED wearable necklace cum badge
179 parts10MIT - 2 layers100 × 100 mm

Flipdot brose
julianschick/flipdot-brose
Microcontroller code (ESP32) and Circuit Design for controlling Brose Flipdot Modules.
185 parts5MIT - 2 layers73 × 94 mm

8FilPilotes Base
LudovicLemarinel/EspHomeAutomation
Home Automation based on ESP8266 and MQTT
75 parts3
Questions
How big is the Marvin PS PCB?
It measures 67 × 45 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Marvin PS use?
20 parts, built around the TPS63070RNM, 74HC595 and ULN2803A. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the Marvin PS KiCad files?
From the lhm0/marvin_robot repository on GitHub, at the commit this page was made from: the board is electronics/marvin_PS/marvin_PS.kicad_pcb and its schematic electronics/28BYJ_48_test/28BYJ_48_test.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Marvin PS design in my own project?
Its repository states no licence, so its author keeps all rights: ask lhm0 before reusing the design.