Skip to content

Desktop Robot

An expressive ESP32-S3 desktop companion robot with an LCD face, touch-to-pair phone control, differential drive, and piezo sound.

  • Home
  • Open source
  • arduino
  • 3D printable

Suggested by Robotheca, created by @Nicolassalazar-pro (opens in a new tab), from github.com/Nicolassalazar-pro/desktop-robot (opens in a new tab). Pinned to commit bcd3b0b (opens in a new tab).

Photo and 3D model

This repository has no photo of the robot yet.

3D preview converted from github.com/Nicolassalazar-pro/desktop-robot at bcd3b0b, under CERN-OHL-S-2.0. View the original files from GitHub (51.0 MB) (opens in a new tab)

What it can do

Written by Robotheca from the project's documents.

  • Shows expressive eye faces with 16 moods, gaze direction, blinking, and idle wandering on a 240x280 LCD.
  • Drives on two continuous-rotation servos in a differential-drive configuration with closed-loop gyro turns and heading hold.
  • Plays mood-linked generated melodies and direct tones through a piezo buzzer.
  • Reacts to capacitive touch and pull-down gestures, including a temporary Wi-Fi softAP pairing screen with QR codes.
  • Accepts phone control over a token-gated WebSocket after joining its temporary WPA2 softAP.
  • Detects bumps, shakes, and being lifted from accelerometer signatures, and fails safe through drive leases and timers.
  • Accepts serial CLI commands over native USB for status, moods, calibration, heading, and bench measurements.
  • Has a sleep, wake, and power-button shutdown sequence with a Garage startup animation.

Bill of materials

This repository has no parts list Robotheca can read yet.

Build guide

The guide appears here as you scroll.

Guide by @Nicolassalazar-pro (README.md), under CERN-OHL-S-2.0 (hardware) and MIT (software).

More guides

Wiring and electronics

Notes written by Robotheca from the project's documents.

Main parts

  • ESP32-S3R8 controller (Waveshare ESP32-S3-Touch-LCD-1.69 board) with 8 MB PSRAM and 16 MB flash.
  • ST7789V2 240x280 IPS LCD driven over SPI.
  • CST816T capacitive touch controller on shared I2C.
  • QMI8658C 6-axis IMU for heading, bump, shake, and lift sensing.
  • Two MG90D continuous-rotation servos for differential drive.
  • Passive piezo buzzer for sound.
  • LiPo battery with latched board power and a separate external 5 V servo supply rail, with a buck-boost enable.

Connections

  • Touch and IMU share an I2C bus.
  • The LCD is connected over SPI at 40 MHz with a 20 px row offset.
  • Servo control pulses are generated per servo with calibrated pulse curves, and the servos are powered from the external 5 V rail.
  • The buck-boost enable (SYS_EN) must be driven HIGH early in setup() or the board can lose power.
  • Full pin assignments and power design are documented in HARDWARE.md, which is not included in the provided documents.