Bionic Arm

by David Rabinow in Circuits > Arduino

60 Views, 1 Favorites, 0 Comments

Bionic Arm

arm-min-2.png

Driven by the desire to help others in need, I designed and 3D printed a fully articulated prosthetic arm to challenge myself in engineering, design, and real-world problem-solving. Along the way, I dove into biomechanics, CAD modeling, and the power of accessible technology.

The total cost? Just around $50. You heard that right—not five figures. Just some work, the right tools and determination, anyone can build their own. This can be for someone needing an arm or merely for the engineering challenge.

Supplies

What you will need

  1. The 3-d printed parts (stls provided)
  2. Fishing string (for the motor to close the fingers)
  3. Wire
  4. 1 Arduino Uno
  5. 2 servo motors — one MUST BE MG995, THE OTHER MG90S
  6. 1 Push button
  7. stretchy/elastic string

Basic tools such as a hot glue gun, tape etc. which I'm assuming you have

Pieces to 3-D Print

YOU NEED TO 3-D PRINT ALL OF THESE PIECES MINIMUM 30% INFILL TO MAXIMIZE LONGEVITY

NO SUPPORTS NEEDED

Gluing

step1 gluing.jpg

After you have 3-d printed all of the parts begin by gluing front of forearm.stl to main forearm.stl

Fingers

finger with desired string.jpg
finger threaded.jpg
zoom up of threaded hand.jpg
entire threaded hand.jpg

STRING ALL THE FINGERS INCLUDING THE THUMB. You need to have some sort of paracord, or a type of elastic stretchy string. This string will help the fingers return to their default position. If you do not have the string the fingers will be left down or in an awkward position but not upright.

  1. Cut a piece that's around double the length of each finger
  2. bend the string over and then feed it through the two holes at the top of each finger through the finger all the way into the hand
  3. once the string is poking out of the back of the hand you can make a double knot before cutting off the excess.

The Thumb

servo in thumb.jpg
servo wires.jpg

Add the correct attachment for the servo motor and then screw it into the servo motor itself. Put a bead of hot glue in the hand where the servo is supposed to go. Then, push the MG90S servo into the hand. While doing this, make sure the wires for the servo come out of the back in the cutout wire section.

Stringing

string2.jpg
string1.jpg

Cut the fishing string into five 1.5 foot strip pieces. String the fishing string through each of the fingers and the hand. Make sure to tie a knot at the top of the finger, to prevent the string from coming out.

MG995 Installation/ Attaching Strings to the Motor

glues servo.jpg

Hot glue the MG995 servo motor to the servo motor mount you printed. (MG995 servo holder.stl) Once you've done this glue the motor mount to the main forearm.stl. Wait 8-10 minutes for the hot glue to dry before attaching the servo arm strings. All you want to do is take all the strings together and wrap them around the servo arm a few times, tie a knot and then you should be all done.

Wiring to the Arduino

  1. Signal wire on the thumb servo (MG90S) --> PIN 11
  2. Negative/gnd wire on the thumb servo (MG90S) --> GND
  3. Positive wire on the thumb servo (MG90S) --> 5V
  4. Signal wire on the string servo (MG995) --> PIN 9
  5. Negative/gnd wire on the string servo (MG995) --> GND
  6. Positive wire on the string servo (MG995) --> 5V

PUSH BUTTON

  1. One side --> PIN 13
  2. Other side GND

CODE FOR THE LEFT ARM

Screenshot 2025-04-18 004945.png
Screenshot 2025-04-18 004932.png

COPY AND PASTE THE FOLLOWING CODE INTO THE ARDUINO APP:

#include <Servo.h>


#define BTN_PIN_RIGHT 13 // New button pin for the right side

#define SERVO3_PIN 11 // New servo pin for servo3

#define SERVO4_PIN 9 // New servo pin for servo4


Servo servo3;

Servo servo4;

int buttonStateRight = 0;

int lastButtonStateRight = 0;

bool servosActivatedRight = false;


void setup() {

servo3.attach(SERVO3_PIN);

servo4.attach(SERVO4_PIN);

pinMode(BTN_PIN_RIGHT, INPUT_PULLUP);

servo3.write(0); // Set initial position of servo3 to 0 degrees

servo4.write(180); // Set initial position of servo4 to 180 degrees

}



void loop() {

buttonStateRight = digitalRead(BTN_PIN_RIGHT);


if (buttonStateRight == HIGH && lastButtonStateRight == LOW) {

// Button is pressed

if (!servosActivatedRight) {

servo3.write(14); // Move servo3 to 100 degrees

servo4.write(60); // Move servo4 to 60 degrees

servosActivatedRight = true;

} else {

servo3.write(180); // Return servo3 to 30 degrees

servo4.write(180); // Return servo4 to 180 degrees

servosActivatedRight = false;

}

}


lastButtonStateRight = buttonStateRight;

}

CODE FOR THE RIGHT ARM: NOTE PINS ARE DIFFERENT!!!

Screenshot 2025-04-18 005159.png
Screenshot 2025-04-18 005152.png

#include <Servo.h>


#define BTN_PIN 7

#define SERVO1_PIN 3

#define SERVO2_PIN 5


Servo servo1;

Servo servo2;

int buttonState = 0;

int lastButtonState = 0;

bool servosActivated = false;


void setup() {

servo1.attach(SERVO1_PIN);

servo2.attach(SERVO2_PIN);

pinMode(BTN_PIN, INPUT_PULLUP);

servo1.write(0); // Set initial position of servo1 to 15 degrees

servo2.write(180); // Set initial position of servo2 to 90 degrees

}


void loop() {

buttonState = digitalRead(BTN_PIN);


if (buttonState == HIGH && lastButtonState == LOW) {

// Button is pressed

if (!servosActivated) {

servo1.write(100); // Set servo1 to 90 degrees

servo2.write(60); // Set servo2 to 180 degrees

servosActivated = true;

} else {

servo1.write(-30); // Return servo1 to 15 degrees

servo2.write(180); // Return servo2 to 90 degrees

servosActivated = false;

}

}


lastButtonState = buttonState;

}

NOTE IF YOU WANT TO MAKE THE RIGHT ARM YOU CAN JUST MIRROR THE STL FILES

Downloads