We assembled the ACEBOTT QD022 4-DOF arm kit following the manufacturer's video (Instruction 1). The parts list is in components section.
The USB-C hub and power supply for the UNO Q didn't arrive until later in the day, so the organizers told teams to prototype on their laptops in the meantime.
After assembly we measured the arm, because our inverse kinematics needs exact dimensions:
- Shoulder to elbow: 78 mm
- Elbow to gripper: 50 mm
- Table to shoulder pivot: 40 mm
The arm has three positioning joints (base, shoulder, elbow) plus a gripper, with no wrist.
We then wrote ESP32 joystick firmware (teleop_test.ino) to prove the hardware worked before adding autonomy:
- Joystick centring and deadzone: On boot, the firmware averages 50 readings per axis to find each stick's resting position, so the arm doesn't drift.
- Speed limit: Every joint moves at a capped rate. We first used 90°/s, but the arm was jerky, so we lowered it to 30°/s.
- Pose memory: When the arm stops moving for 1 second, the pose is saved to flash. On the next boot the arm eases back from there instead of snapping.
- Freeze button: Pressing the J1 button freezes all motion. This became the basis for our manual-override kill switch.
- End-stop warning: The firmware warns when a joint sits at 0° or 180°, where the servos buzz and heat up.
Problems we hit:
Buttons with no pull-up. ESP32 pins GPIO34/35/36/39 are input-only and have no internal pull-up resistor. Our joystick buttons read correctly only because the modules supply their own.
Reset on connect. The ESP32 resets whenever the serial port opens, so the Python side waits 2 seconds before sending any command.
Late supplies. Delays cost every team time on Day 1. The organizers let us take the arm home overnight, and implemented the changes based on updated requirements.



Arya Patel
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.