Introduction: 3D Printed Motorized Hand
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.
Attachments
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.
Attachments
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 } } }