3D Printed Robotic Hand With Bluetooth Control

by TechMartian in Workshop > 3D Printing

27860 Views, 56 Favorites, 0 Comments

3D Printed Robotic Hand With Bluetooth Control

IMG_2700.jpg
IMG_2705.jpg
IMG_2699.jpg
IMG_2707.jpg
3D Printed Hand

Need a hand? This is a fully 3D Printed and actuated robotic hand and arm which can be applied to a multitude of use cases like as a prosthetic hand, or just a third 'hand.' It is also fully actuated using 5 servo motors for controlling each individual fingers.

Each of these fingers are controllable by any sensors that can be interfaced with an Arduino, such as the MyoWare EMG sensors, or in this case with Bluetooth using the built-in Bluetooth Low Energy functionality of the Arduino 101.

I was inspired to make this project for two reasons:

1. Enabling the Future's "Build a Hand" initiative which aim to make cheaper 3D printed prosthetics that is mainly aimed towards children who will grow up and need to get fitted to a new hand as they grow which gets very expensive.

2. The application of an animatronic hand in virtual reality environments for tactile and haptic feedback.

Now, you can make your own robotic hand that's ready to lend everything it has at your aide (well, it is just a hand), so that you don't have to go around borrowing hands from other people.

3D Print Materials

IMG_2359.jpg
IMG_2360.jpg
IMG_2364.jpg
IMG_2686.jpg
Screen Shot 2017-08-31 at 10.32.13 PM.png
Screen Shot 2017-08-31 at 11.04.27 PM.png
Screen Shot 2017-09-01 at 1.14.56 AM.png
Screen Shot 2017-09-01 at 2.44.35 AM.png
Screen Shot 2017-09-01 at 12.19.49 AM.png
Screen Shot 2017-09-01 at 12.51.49 AM.png
Screen Shot 2017-09-01 at 2.47.36 AM.png
Screen Shot 2017-09-01 at 2.47.29 AM.png
Screen Shot 2017-09-01 at 2.49.36 AM.png
Screen Shot 2017-09-01 at 2.50.53 AM.png
  • Print one copy of each stl part.

All the structural components of this robot hand are custom made through 3D printing. I am providing the 3D printable models below so you can print it with your own 3D printer or from a local 3D print-shop.

This was designed in Autodesk's Fusion 360 and you can find the parts here:

http://autode.sk/2wryFMW

http://autode.sk/2wruMYi

http://autode.sk/2wsmz6u

http://autode.sk/2ws93Q7

http://autode.sk/2vOCCcJ

http://autode.sk/2vwDGqp

http://autode.sk/2wsfwe0

http://autode.sk/2vwFYWE

Mounting Thumb Joint Motor

IMG_2361.jpg
IMG_2362.jpg
IMG_2363.jpg
  • Glue the servo horn to the thumb base joint
  • Connect servo horn onto Servo motor and glue it in place with super glue.

Give it some time to dry, the longer you wait the stronger the bond is (within a 24 hour period)

Connecting the Fingers

IMG_2375.JPG
IMG_2373.jpg
IMG_2374.jpg
IMG_2376.jpg
IMG_2378.jpg
IMG_2377.jpg

Chain link the fingers with a nylon or fishing wire. The one I have is a bit thicker than fishing wire since Home Depot did not have any thin ones.

  • Attach base joint to the anterior ligaments by threading a the wire one of the base holes, looping through the top and threading it back out of the other base hole.
  • Leave about 5cm of wire on both ends of the base holes before cutting it.
  • Thread another wire through the top hole. This will be the posterior ligament which will stabilize finger to complete the push-pull pair.
  • Extend the fishing line from your palm to your elbow to have enough line for the servo mount.

Attaching the Tension Wire

IMG_2383.jpg
IMG_2384.jpg
  • Insert the base joints of each finger into corresponding slots in the 3d printed palm.
  • Tie a knot between the two slots for the base joint. Then, further secure it by adding a bead of glue over the holes and knot so that the wire does not slip

I found it easier to temporarily glue the base joints of each finger onto the palm piece with hot glue which is easily removable.

Attaching the Thumb

IMG_2386.jpg
IMG_2385.jpg
  • Like the fingers, thread a nylon wire through one of the base holes of the thumb joint attached to the servo motor through to the two distal joints of the thumb.
  • Loop it through the top hole then back around and out the second base hole of the thumb joint.
  • Tie a knot at the base hole and secure it with some hot glue with a hot glue gun.

Mounting the Servo Holder

IMG_2379.jpg
IMG_2380.jpg
  • Install servo holder assembly into the arm structural component using 4-40 machine screws. There are 4 screw-down points designed in the CAD model.

Gluing the Wrist

IMG_2382.jpg
IMG_2381.jpg
  • Glue the wrist onto the base of the palm. Apply sufficient amount of pressure to ensure a secure attachment.
  • Add a thin layer of glue around the wrist to secure it further.

Gluing the Arm

IMG_2387.jpg
  • Attach the arm to the wrist with the lock cap using a hot glue gun.

Connecting Tension Wire to Servo

IMG_2693.jpg
IMG_2688.jpg
IMG_2690.jpg
IMG_2694.jpg
IMG_2696.jpg
IMG_2698.jpg
  • Wrap the tension wire around the 3d printed servo mount part.
  • Screw or Glue the Servo horn onto the circular mount with a hot glue gun.

Mounting the Elbow

IMG_2700.jpg
  • Attach the assemble hand-wrist complex to the elbow base to complete the structural assembly of 3D printed parts.

Wiring

IMG_2702.jpg
IMG_2701.jpg
IMG_2703.jpg
IMG_2704.jpg

Follow the table below for a full concise guide on wiring each of the servo motors to the Arduino:

Servo Servo Wire Arduino Pin Breadboard Pin
ThumbBrownGND*Ground Rail
ThumbRed5V*Power Rail
ThumbOrange2-
IndexBrown-Ground Rail
IndexRed-Power Rail
IndexOrange3-
MiddleBrown-Ground Rail
MiddleRed-Power Rail
MiddleOrange4-
RingBrown-Ground Rail
RingRed-Power Rail
RingOrange5-
PinkyBrown-Ground Rail
PinkyRed-Power Rail
PinkyOrange6-

* I decided to use a small portion of the breadboard -- the power and ground rails -- which snaps off of the breadboard easily and added some tape on the bottom to prevent accidental short circuits.

** Optionally, instead of getting power from the Arduino you can attach a small Rx LiPo Battery (so it can supply the needed current) to power the ground rails instead such that you may power all 5 servos at a time.

Demo Program

Screen Shot 2017-08-31 at 10.26.59 PM.png

This is demo program that moves each of the fingers to it's full extent:

#include <Servo.h>
Servo thumb;
Servo index1;
Servo middle;
Servo ring;
Servo pinky;
void setup() {
    thumb.attach(2);
    index1.attach(3);
    middle.attach(4);
    ring.attach(5);
    pinky.attach(6);
}
void loop() {
  for (int i = 0; i<180; i++){
    //thumb.write(i);
    index1.write(i);
    middle.write(i);
    ring.write(i);
    pinky.write(i); 
    delay(10);
  }
  delay(1000);
  //thumb.write(0);
  index1.write(0);
  middle.write(0);
  ring.write(0);
  pinky.write(0);
}

Adding Bluetooth Functionality

Screen Shot 2017-09-11 at 10.24.06 PM.png
Screen Shot 2017-09-11 at 10.24.08 PM.png
  • Copy the following code to the Arduino 101:
#define BLYNK_PRINT Serial<br>
#include <BlynkSimpleCurieBLE.h>
#include <CurieBLE.h>
#include <Servo.h>
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "30c0d37503f84aaf8f01483cbb14f20e";
BLEPeripheral  blePeripheral;
Servo thumb;
Servo index1;
Servo middle;
Servo ring;
Servo pinky;
BLYNK_WRITE(V1)
{
  thumb.write(param.asInt());
}
BLYNK_WRITE(V2)
{
  index1.write(param.asInt());
}
BLYNK_WRITE(V3)
{
  middle.write(param.asInt());
}
BLYNK_WRITE(V4)
{
  ring.write(param.asInt());
}
BLYNK_WRITE(V5)
{
  pinky.write(param.asInt());
}
void setup()
{
  // Debug console
  Serial.begin(9600);
  delay(1000);
  blePeripheral.setLocalName("Tech Martian");
  blePeripheral.setDeviceName("Tech Martian");
  blePeripheral.setAppearance(384);
  Blynk.begin(blePeripheral, auth);
  blePeripheral.begin();
  Serial.println("Waiting for connections...");
   thumb.attach(2);
   index1.attach(3);
   middle.attach(4);
   ring.attach(5);
   pinky.attach(6);
}
void loop()
{
  blePeripheral.poll();
  Blynk.run();
}
  • Change the name of your device, I named mine "Tech Martian."

Setting Up the Bluetooth App

Screenshot_20170911-210639.png
Screenshot_20170911-211111.png
Screenshot_20170911-211140.png
  • Download the Blynk App
  • Select Create a New Project and name your project appropriately.
  • Choose the Arduino 101 as your device and BLE (Bluetooth Low Energy) as the connection type.

Assigning Auth Token

Screen Shot 2017-09-11 at 10.37.03 PM.png
  • On the line 10 of the code change "your auth token" to the auth token that was sent to your email by creating a project on Blynk that was done on the previous step.

Making the Bluetooth App

Screenshot_20170911-211154.png
Screenshot_20170911-211235.png
Screenshot_20170911-211243.png
  • Drag and drop the following widgets onto the Scene though the widget side bar by swiping from the right edge of your screen.
    • BLE
    • 5 Vertical Sliders

Assigning the Sliders

Screenshot_20170911-211314.png
Screenshot_20170911-211307.png
Screenshot_20170911-211346.png
Screenshot_20170911-211455.png
  • Select the vertical slider widget.
  • Name each of the vertical slider according to each of the five fingers -- thumb, index, middle, ring, and pinky.
  • Change the angle of each of the slider from 0 to 180, as it corresponds to the angle range of a servo motor.
  • Assign a virtual pin to each of the sliders from V1 to V5 from the thumb to the pinky finger, respectively.

Testing

Screenshot_20170911-211505.png
UNADJUSTEDNONRAW_thumb_b3f.jpg
Screenshot_20170911-211522.png
IMG_2697.jpg
3D Printed Hand
  • Select the BLE icon and connect to the Arduino 101 BLE Device which you will recognize as the name you assigned your Arduino 101.
  • Change the slider values and this will actuated each of the fingers of the robotic hand.

Enjoy!