
A single servo curls a three-jointed finger through a routed tendon, recreating a full finger curl from one input. The mechanism was modeled in SolidWorks and carried through to a full set of fabrication drawings.
A human finger has three joints but no muscle of its own; a single muscle in the forearm pulls a tendon that flexes all three at once. Reproducing that behavior with one actuator is a problem of underactuation: there are more joints than motors, so the way the joints move together has to be built into the mechanism rather than commanded joint by joint.
The objective was a natural curl from base to tip from a single servo, with three articulated joints and one source of motion.
The finger is built from three rigid segments joined by a pin joint at each knuckle. A tendon string runs from the servo horn, through a series of guides and pulleys, to the fingertip; as the servo pulls the cable, rising tension draws the segments inward and the finger curls from the base joint outward. The path the tendon takes through the guides sets the order and proportion in which the joints close.
Since one servo drives the entire chain, every joint shares the same torque budget, and friction or interference at any knuckle would stall the whole curl. The segment geometry and joint clearances were therefore resolved in SolidWorks before fabrication, so the linkage articulates freely through its full range without binding.
The SolidWorks model was treated as a deliverable in its own right. A complete drawing package was produced from it: toleranced part drawings and an assembly drawing with a bill of materials.
Everything is dimensioned so the mechanism can be reproduced from the documentation alone, and so tolerances hold across the mating parts and the tendon path.
An Arduino drives the servo in C++, with commanded positions mapped to a set of discrete grip angles. This turns a continuous servo command into a small number of repeatable grip states, so the finger returns to the same poses on demand rather than being driven by hand.

#include <Servo.h>
Servo servoindex; // index-finger servo
int pos = 0; // current servo position
void setup() {
servoindex.attach(3); // servo signal on digital pin 3
}
// ---- Discrete grip states: one commanded angle each ----
void handOpen() { servoindex.write(0); } // fully extended
void handRest() { servoindex.write(90); } // relaxed mid-curl
void handClose() { servoindex.write(180); } // full curl
// ---- Sweep the extremes for a smooth grab-and-release ----
void grab() {
for (pos = 0; pos <= 180; pos += 2) { // curl in
servoindex.write(pos); delay(50);
}
for (pos = 180; pos >= 0; pos -= 1) { // release out
servoindex.write(pos); delay(25);
}
}
void loop() {
handOpen(); delay(5000);
grab();
handClose(); delay(5000);
handRest(); delay(1000);
}