Bionic Arms

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. This project explores biomechanics, CAD modeling, and the power of accessible technology—all for under $50. The design demonstrates how determination and the right tools can create functional assistive devices without the typical five-figure cost of commercial prosthetics.

Quick Specs
  • Actuation: 2 servo motors (MG995 + MG90S)
  • DOF: 5 active joints (fingers + thumb)
  • Controller: Arduino Uno
  • Power: 5V USB/external supply
  • Materials: PLA + fishing line + elastic
Designed for repeatable grasping with accessible components.
Bionic arm assembly
Bionic arm assembly

Mechanical Design

The bionic arm uses a tendon-driven system with fishing line connecting each finger to a central MG995 servo motor. The thumb operates independently via an MG90S servo for precise opposition movements. Elastic return springs maintain finger extension when not actuated, creating a natural resting position. The linkage design translates servo rotation into coordinated finger flexion, enabling both precision grip and power grasp capabilities.

Assembly Process

Gluing process
Gluing process

Finger Assembly

Finger assembly
Finger assembly
Finger assembly
Finger assembly
Finger assembly
Finger assembly
Finger assembly
Finger assembly

Each finger requires elastic return springs to maintain extension when not actuated. The elastic string runs through holes at each joint, creating a natural resting position. Without these return springs, fingers would remain in awkward positions rather than returning to an open, ready-to-grasp configuration.


Electronics & Control

Control Path

Push button → Arduino Uno → Servo drivers → MG995 (fingers) + MG90S (thumb) → Tendon linkages → Finger flexion. Feedback from button state prevents over-travel.

Thumb Assembly

Thumb assembly
Thumb assembly
Thumb assembly
Thumb assembly

Tendon System

Stringing process
Stringing process
Stringing process
Stringing process

Main Servo Installation

MG995 installation
MG995 installation

Materials & Fabrication

All structural components are 3D-printed using PLA filament for cost-effectiveness and ease of modification. The tendon system uses fishing line for durability and low friction, while elastic return springs maintain finger extension. The design prioritizes accessibility—using common materials and tools that anyone can obtain for under $50 total cost.

Required Components

Download Bionic Arm STL Files

Note: Mirror STLs for right arm assembly



Problems and How I Overcame Them

What I'd Build Next at Penn/MIT

I want to iterate this bionic hand into a modular research platform—swappable end-effectors, better sensing (force/position), and safer actuation with closed-loop control. I'm excited to collaborate on rapid CAD-to-prototype cycles and human-in-the-loop testing to turn practical ideas into reliable assistive hardware.


Arduino Code

Right Arm Code
#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;
}
View Complete Code Repository