Dual Robotic Arms with ESP32 Bluetooth Control
Built and programmed a dual robotic arm system controlled by an Xbox controller through an ESP32, Bluepad32, and PCA9685 PWM servo drivers.
- Role
- Electronics integration and C++/Arduino control logic
- Actuation
- MG995 and MS90 servos driven through PCA9685 boards
- Input
- Bluetooth Xbox controller mapping through Bluepad32
System Design
The system uses an ESP32 microcontroller, an ESP32 breakout board, PCA9685 PWM servo drivers, 3D-printed NatV2 robotic arm parts, 6203 bearings, MG995 servos for larger joints, MS90 servos for smaller joints, and an Xbox controller for input. The material cost, not including donated servos, was about $90.
Controls and Firmware
I wrote the control logic in C++ using the Arduino IDE. Bluepad32 handles Xbox controller pairing and input, while the Adafruit PWM servo driver library sends servo commands through the PCA9685. I calibrated min/max ranges for each joint, added serial debugging, and adjusted the control mapping to make the arms easier to operate.
- Trigger toggles open and close the left and right claws.
- Joystick axes control arm rotation, extension, and claw rotation depending on toggle state.
- A/B/X/Y buttons switch which arm axes are active.
Assembly and Testing
The team compared several arm designs, selected a larger dual-arm design, printed the parts at the makerspace, and assembled the arms with bearings, fasteners, servos, and wire extensions. During testing, I tuned servo ranges and controller behavior to reduce binding and make motion more predictable.
Result
Both arms responded to Bluetooth controller input and demonstrated gripping, lifting, and multi-joint movement. The project shows embedded control, PWM servo driving, mechanical assembly, calibration, and practical debugging of a high-servo-count system.