6-Axis Servo Arm: Proof of Concept

Timeline: December 2024 Context: Personal project Alejo Restrepo

In December 2024 I built a 6-axis robot arm out of hobby servos, 3D-printed parts and an Arduino UNO. It was a proof of concept for the stepper-driven arm I built the following spring.

Servos keep the electronics simple. Each joint is one motor with a PWM line to the Arduino, no drivers and no limit switches, and the motor holds whatever angle it is given.

Testing the servos on the Arduino before assembly.

The servo horn on its own is not rigid enough, so I designed a 3D-printed housing for each motor to reduce the inaccuracy. The rest of the body is printed as well.

3D-printed servo housing with the motor mounted inside
3D-printed housing for one of the servos.
Printing the body.

First test with the base mounted: jogging the rotation joint from the serial monitor.

Rotation joint jogging test.

Servos only know their own 0–180° range, so I had to center each motor. I sent 120°, 90° and 60° to joint 1 and checked that the link actually ended up at that angle.

Joint 1 angle test: 120°, 90°, 60°.

I also used this setup to check that my kinematics code was outputting the correct joint angles. The Arduino computes the joint angles for a target, maps them onto the servo range and prints them to the serial monitor; if one of them falls outside 0–180° the target is reported as not reachable. To compare, I entered the same target in Maximilian Beck's robot GUI, which solves the inverse kinematics for a given robot geometry and shows the resulting pose.

Joint angles from the Arduino next to the same pose in the robot GUI. Thanks to Maximilian Beck for the GUI.

After assembly the motors had to be centered again, and one servo cable broke. Replacing the cable was faster than disassembling the joint.

Centering the motors again and replacing a servo cable.

The finished arm is in the video at the top.

What came after

The arm worked as a proof of concept, but servos have no absolute position reference and only 180° of range per joint. For the next version I switched to NEMA steppers with a limit switch on every joint, which became the gesture-controlled arm.

The full video is on YouTube.