Introduction: 3D Printed Motorized Hand

About: Biomedical Engineer from University of South Florida. I am enthusiastic about designing and builting new devices.

This instructable was created in fulfillment of the project requirement of the Makecourse at the University of South Florida (www.makecourse.com). The goal of this project was to build a 3D printed prosthetic hand and control it using an Arduino

Step 1: CAD Designing

You will have to learn a CAD software like Solidworks or Autodesk Fusion 360 to design the parts to be 3D printed. The material used for 3D printing was PLA, however you can also used ABS. Find the stl files attached for all the parts.

Step 2: Components

You will need an Arduino UNO for this project.Three MG996R servo motors are used for different hand movements. Attached is the data sheet for the same. These are high torque servo motors with a stall torque of 9.4 kgf·cm (4.8 V ), 11 kgf·cm (6 V). The servo motors are controlled via a bluetooth app "Bluetooth Electronics" and a bluetooth communication module HC-05. To attach two servo motors on the 3D printed hand you will need the D shaft and shaft coupler to be attached on the metal gear of the servo motors. To power the Arduino a 9V battery or a power bank can be used.

Step 3: Schematic Diagram

This attached PDF shows the schematic diagram of the circuit. The three servo motors are connected to three PWM pins of the Arduino. The servo motors are powered by the arduino from the 5V supply.The HC-05 module is powered by the arduino at 3.3V and the RX and TX pins are connected to TX and RX pins of the arduino respectively. The Arduino is powered by a 9V battery. The bluetooth app sends command to the Arduino via the HC-05 module. Once the command it received by the Arduino it drives the servo motors according to the button pressed on the bluetooth app.

Step 4: Arduino Code

/******************************************
  PURPOSE: To control a 3D printed Hand using Bluetooth app and servo motors
  Created by : Varun Shah
  DATE:  11/14/2018
*******************************************/
#include  //Arduino standard library
#define servopin 9 //this defines pin 9 as the pin used for the servo control for fingers and thumb of the hand
#define wrist 10   //this defines pin 9 as the pin used for the servo control for flexion and extension of the wrist 
#define rotate 11  //this defines pin 9 as the pin used for the servo control for rotation of the wrist
Servo myservo;     // instantiate a Servo object named 'myservo' 
Servo myservo1;    // instantiate a Servo object named 'myservo1' 
Servo myservo2;    // instantiate a Servo object named 'myservo2' 
char data_in;      //data received from serial link
void setup() {
Serial.begin(9600);
myservo.attach(servopin);  // attaches the servo on pin 9 to the servo object 
myservo1.attach(wrist);    // attaches the servo on pin 10 to the servo object
myservo2.attach(rotate);  // attaches the servo on pin 11 to the servo object
myservo.write(0);
myservo1.write(90);
myservo2.write(
}
void loop() {
    if (Serial.available()){
    data_in=Serial.read();  //Get next character 
    
    if(data_in=='G'){ //Button Pressed--> bluetooth app sends an ASCII value G to arduino
     myservo.read(); // Reads the current position of the servo motor
     myservo.write(myservo.read()+5); //Rotates the servo motor to gradually move the fingers to the grabbing position 
    }
    
    if(data_in=='R'){ //Button Pressed--> bluetooth app sends an ASCII value R to arduino
     myservo.write(0);  // Servo motor rotates to 0 degrees to release the grabbed object
    }
    if(data_in=='F'){ //Button Pressed-->bluetooth app sends an ASCII value F to arduino
      myservo1.read(); //Reads the current position of the servo motor
      myservo1.write(myservo1.read()+5);// Servo motor rotates gradually to flex the wrist
    }
    
    if(data_in=='E'){ //Button Pressed-->bluetooth app sends an ASCII value E to arduino
      myservo1.read(); //Reads the current position of the servo motor
      myservo1.write(myservo1.read()-5);// Servo motor rotates gradually to extend the wrist
    }
    
    if(data_in=='C'){ //Button Pressed-->bluetooth app sends an ASCII value C to arduino
      myservo2.read(); //Reads the current position of the servo motor
      myservo2.write(myservo2.read()+5);// Servo motor rotates gradually to rotate the wrist clockwise
    }
    
    if(data_in=='A'){ //Button Pressed-->bluetooth app sends an ASCII value A to arduino
      myservo2.read(); ////Reads the current position of the servo motor
      myservo2.write(myservo2.read()-5);// Servo motor rotates gradually to rotate the wrist anti-clockwise
    }
  }
}

Step 5: Final Video