Introduction: DIY Robotic Hand Controlled by a Glove and Arduino

Picture of DIY Robotic Hand Controlled by a Glove and Arduino

This project idea came to me when I was sitting on a bed in a hotel room while on vacation. I thought: "It'd be really neat to have a robotic hand that I can control with my own hand!" Upon returning home, I embarked upon a journey to design and create the project. I hope you enjoy!

Update: First Prize winner in the Instructables 2013 Microcontroller Contest!

The basic components of the hand and glove are the hand itself, the servos, the Arduino, the glove, and the flex sensors. The glove is mounted with flex sensors: variable resistors that change their resistance value when bent. They're attached to one side of a voltage divider with resistors of a constant value on the other side. The Arduino reads the voltage change when the sensors are bent and triggers the servos to move a proportional amount. The servos pull strings that act as tendons, allowing the fingers to move. Here's a video of it in action (

http://m.youtube.com/watch?v=qMtHEOxHDGo):

The hand itself comes from an open-source, 3D-printable download. It's part of a project called InMoov: http://inmoov.blogspot.com (http://www.inmoov.fr)


This guide will show you all the steps required to build your own robotic hand and control glove!

Step 1: Gather the Materials

Picture of Gather the Materials

In total, this project will cost about $100-150, depending on where you get the parts. Here is the materials list:

5x MG946R Servos (or equivalent - MG995 or MG996 should work too. I've had a bit of trouble with the range of motion, so servos that support a higher degree of rotation would be better) - I got mine from hobbyking.com, but for a less expensive option I'd go with eBay (they come directly from China, so shipping may take longer).

5x 4.5 inch flex sensors - I got mine here: http://microcontrollershop.com/product_info.php?products_id=3802
1x Arduino Uno or equivalent (they're also much cheaper on eBay)
5x 22k resistors
1x 6.0-7.2V battery (for the servos) - I used this: http://www.all-battery.com/Tenergy7.2V3000mAhRCCarNiMHBatteryPackwithCharger-91103.aspx

1x small breadboard
1x Standard Tamiya battery connector - something like this: http://www.batteryspace.com/Connector/Adaptor-Standard-Female-Tamiya-with-14-AWG-Silicon-wire.aspx

Breadboard jumpers/hookup wire
1x small blank PCB - I used something like this, only square (RadioShack has since removed the original product, but this should work as well): http://www.radioshack.com/radioshack-printed-circuit-board/2760170.html


1x glove (I used a right-hand glove - should be sturdy and fit well)
1x 8mm diameter 55mm length bolt
1x 8mm diameter 60mm length bolt
1x 8mm diameter 80mm length bolt
14x 3mm diameter about 20mm length screws
20x 4mm diameter screws (any length between 7mm and 30mm is fine)
Approx. 5 meters of string (should have a high-ish breaking strength) - I used this: http://www.amazon.com/gp/product/B004YWKPCS/ref=oh_details_o01_s00_i00?ie=UTF8&psc=1

Hot glue
Super glue (C.A. glue)
Sandpaper (I used ~220 grit) - a Dremel tool with a sanding head would also work
Needle and thread

A power drill
A soldering iron
Access to a 3D printer

...And you're ready to start!

Step 2: Print the Hand

Picture of Print the Hand

The hand is part of an open-source project called InMoov. It's a 3D-printable robot, and this is just the hand and forearm assembly. From this page on Thingiverse (http://www.thingiverse.com/thing:17773), download and print the following parts:
robpart1.stl*
robpart4V2.stl
robpart5V2.stl
Auriculaire3.stl
Index3.stl
Majeure3.stl
ringfinger3.stl
WristsmallV3.stl
thumb5.stl
Wristlarge.stl

*some of the parts seem to have been removed, so I've attached the files below.

And from this page (http://www.thingiverse.com/thing:65274):
RobCableFrontV1.stl
RobRingV3.stl (note - I had to drill these a bit myself to get them to fit my servos)
RobCableBackV2.stl
RobServoBedV4.stl

robpart3V3.stl
robpart4V3.stl
(these two are covers for the forearm - they're not necessary for functionality)

In total, the parts take about 13-15 hours to print depending on the printing resolution you use. I used a MakerBot Replicator 2X - I'd recommend printing the finger parts in standard or high resolution to avoid unwanted friction. I also included rafts with all the parts, as they make the prints more consistent, especially when using ABS plastic.

Step 3: Making the Sensor Circuit

Picture of Making the Sensor Circuit

The flex sensors require a circuit in order for them to be compatible with Arduino. It's a voltage divider: the flex sensors are variable resistors, and when paired with resistors of a static value, a change in resistance (in this case bending the sensor) can be sensed through the change in voltage between the resistors. This can be measured by the Arduino through its analog inputs. The schematic is attached (red is positive voltage, black is negative, and blue goes to the Arduino). The resistors in the photo are 22K. I color-coded the physical wires in the same way as the schematic so you can see more easily.

The main GND (ground) wire, which is connected to all the individual GND wires from the sensors, gets plugged into the Arduino's GND. The +5V from the Arduino goes to the main positive voltage wire, and each blue wire gets plugged into a separate analog input pin.

I soldered the circuit onto a small PCB from RadioShack, one that could be easily mounted onto the glove. I was able to solder the wires to the sensors relatively easily also, and used heat shrink to make sure there were no shorts. I then wrapped the area where the wires are connected to the sensors with electrical tape to stabilize the sensors. Near the bottom, where the leads are attached, the sensors are a bit weaker and the tape ensures that they won't bend too far and won't get damaged.

Step 4: Sew the Glove

Picture of Sew the Glove

Now it's time to mount the sensors and their circuit onto the glove. First, drill a tiny hole in the plastic of the sensors (at the top, once the resistive material has ended). Be sure not to hit the resistive material! Then, put on the glove and pull it tightly to your hand. On each finger, with a pencil or pen, make small lines over the tops of each joint/knuckle. This will tell you where to sew the sensors. Sew each sensor tip to the area of each finger just above your fingernails (use the hole you just drilled). Then, loop the thread around each sensor above both joints in each finger. Once each sensor is in place and slides under the loops of thread nicely, sew the PCB onto the wrist part of the glove tightly.

REMEMBER: for each step in this process, be sure you're not sewing the fingers of the glove closed. That's quite a hassle.

Step 5: Assemble the Hand

Picture of Assemble the Hand

I'm not going to go into detail about this step, as it is explained very thoroughly on the InMoov website (under the sections "Assembly Sketches" and "Assembly Help"):
http://www.inmoov.fr/assembly-sketchs/

When assembling the fingers, make sure the parts are oriented correctly before gluing. Also, make sure to re-drill the holes on the finger parts so the 3mm screws will act as hinge pins without causing friction. I kept the screws in with a dab of hot glue on the outside of the fingers. There's probably a more elegant way to do this, but for a functional solution hot glue is fine.

Wait before you install the strings into the hand; you want to make sure the servos are working first.

Step 6: Test the Servos

Picture of Test the Servos

At this point, the servos should already be mounted into the forearm (see the Assembly Sketches link from previous step). To connect them to the power supply and Arduino, I used a small solderless breadboard. Connect each positive wire of the servo (usually red) to one of the rails on the breadboard, and the negative wire (usually black or brown) to another rail. IMPORTANT: remember to connect the negative rail on the breadboard to the Arduino's other GND: all the GNDs in a circuit need to be connected for it to work.

Upload the program to the Arduino (the text file is attached - "Hand.rtf") and make sure all the connections to the glove and servos are correct. Put on the glove and turn on the Arduino. The servos should rotate based on how much your fingers are bent. If this is the case, it's working! If you're more experienced with Arduino and know how to test the input values of your particular sensors, you can adjust the range in the program so it works best for you. I assume all the sensors are practically identical, but if they aren't, this might help.

If the servos aren't working properly, make sure all the connections are correct (when I was making this, I originally forgot to connect the GND of the Arduino to the GND of the battery and all the servos, which caused problems. Fixing this allowed it to work). Make sure to get this working before you move on!

If you're still experiencing problems, check the comments section of this article for previously-asked questions, as I've answered many already. If that doesn't help, message me directly on Instructables and I'll respond as quickly as possible.

Step 7: Add the Strings

Picture of Add the Strings

Adding the strings is by far the hardest and most tedious part of this project. The InMoov website (linked in an earlier step) has instructions for this step; it's simple in concept, but difficult to actually execute. Keep in mind that threading the fingers takes patience. The one difference between my installation and InMoov's is that I used hot glue to attach the strings to the servos, while InMoov used knots. To me, hot glue is more adjustable when calibrating each finger because it can be easily melted and re-hardened.

To calibrate each servo ring so it flexes and relaxes its finger when you want it to based on the input, first plug in your Arduino and servo battery and run the program. Put on the glove and flex the finger that corresponds to the servo you're working on. Adjust the servo pulley so one hole is closest possible to the fingers and pull the "relax" string of that finger as tightly as you can without bending the finger. Put it through the closest hole of the ring and glue it in place. Then, straighten your finger and pull and secure the other string into the other hole. Repeat this process with each finger. It's important to make each string taut.

I know that last part is a bit hard to understand, but remember: when in doubt, do what works for you. InMoov's instructions didn't work for me at that point, so I developed my own solution. That's the best part of making things, in my opinion: figuring a problem out on your own.

Luckily, this is the last step... So after this, you're done!

Step 8: Recap

Picture of Recap

Although more complicated and precise (and expensive) versions of this concept have been developed, this is a fun project with many potential applications. Interactive robot control of this level, I think, has many uses in industrial manufacturing, medical research, and anything you want to be able to do with precision that is unsafe to touch. I may eventually put rubber on the palm to give it gripping traction. Also, an interesting modification would be to make it wireless (that is, you wouldn't need a wired connection between the glove and hand). There is a lot of room for improvement, and I'll continue to work on this until I'm satisfied with its design and functionality.

The thing I really love about Arduino is that it allows you to do something like this: by just putting your hand in a glove, you can be so easily connected with the quickly growing robotic and technological side of our modern society. It allows for so many creative, new interfaces between the human world we know and the digital one that we can still improve.

Thank you for looking, and good luck with building yours!

Also, I'd like to thank the user Mizchief100 for the instructions on assembling the hand. This is his variation, check it out:
https://www.instructables.com/id/Voice-Controlled-Prosthetic-Hand-Forearm/

Comments

bigshf (author)2013-10-03

This is awesome! You really gave me motive enough to study the whole Arduino technology. Thanks a lot mate and .. Congratulations!

Raphango (author)2013-10-02

Pretty wow dude!
Congratulations!

vishnu palakkad made it! (author)2017-08-16

this is awesome,i had made it for school science exhibition

What is the cost

mcl0011 (author)2017-08-23

Hey, love the project and want to use it in a cosplay of mine. Can you describe exactly what kind of motion this has, and how precise the fingers are? Also, from the pictures here and videos of InMoov, it appears to have wrist articulation, could this be modified to include that?

jeseem212 (author)2017-07-31

Can I solder the flex sensor

lizam22 (author)2017-02-22

I did exactly what you wrote in your directions, but for some reason it doesn't work. The arduino is on, and the code is uploaded to it, but there is nothing in the "serial monitor" and the servos don't move. (This is my work, but I don't have the hand attached to the servos yet, and i've only connected 4 flex sensors)

dschurman (author)lizam222017-02-22

I'm not familiar with that type of prototyping board (the blue one where the servos are connected to the batteries), are you sure the connections in it run the way you want them to? The configurations and wiring and everything looks okay though.

lizam22 (author)dschurman2017-02-22

I doubled checked again the connections, and now the servos work, but they just turn randomly; they don't respond to the flex sensors. I think my connections are correct, and the code that I am using is the code that I copied from the file that you attached.

Lucskywalk75 (author)lizam222017-02-28

Hi there, I use those same breadboards (the blue one with the red and black wires). By that picture, it doesn't look like anything is connected, each column is separately shorted. And the big divider in the middle of the board separates and insulates the two sides. Essentially even though you have like 10 wires plugged into the breadboard, they are all insulated. Try testing how the board works using a multimeter or a basic battery/LED combination and map out the connectings.

lizam22 (author)Lucskywalk752017-02-28

I actually got it to work. Now it's all good. Oh and the connect in the small breadboard are correct because my problem was with the sensors.

ScientistJ2 (author)lizam222017-07-25

Can you send me the code? The one I am trying will not work

lizam22 (author)ScientistJ22017-07-25

Hey, your code is not working because each sensor has different resisatances ( most go from 30 to 50) but for example my seonsors had much higher numbers. Use a digital multimeter to find the two numbers ( for each of the flex sensors ) and repalace them in the code. Hope this helped.

swapnil99 (author)lizam222017-03-01

I need code if u have the code plz mail me ---swapnilnagre999@gmail.com

ScientistJ2 (author)lizam222017-07-25

Where did you get the code?

EnsarA23 (author)lizam222017-04-03

If you want, we can chat online through gmail or some other source....

EnsarA23 (author)lizam222017-04-03

I can help you out... I've built one my self.

ShabazK2 (author)2017-06-16

Anyone plz send me the aurdiuno code at shabazkhann@gmail.com plz

ScientistJ2 (author)ShabazK22017-07-25

did he ever email you

AbigailC22 (author)2016-11-28

As you bend your fingers, is there any feedback given to your hand? For example, does it vibrate or indicate in some way that the robotic hand is moving as well? And if not, would there only need to be a change in code to have that vibration feedback or is there another motor or sensor that must be added to the glove?

Thank you in advance.

dschurman (author)AbigailC222016-11-28

Unfortunately, the flex sensors are only sensors and can't be programmed to move, so you would need an extra piece of physical hardware.

wingerr (author)dschurman2017-06-23

What kind of resolution is there for the control? Is the limitation from the sensor or from the servo output?

haya99 (author)2017-04-26

I have a big problem and the problem is my Arduino's won't communicate together :(

Armsky (author)2017-04-13

Nice work !
But i have some trouble with codes.
Can you email me ? Help me please...thanks

ArsalanA21 (author)2017-04-09

Dear OP, i still dont fully understand how you are supposed to attach the wire to the fingers. Could you mabey send me an email with some more details about this step?

arsalananwari@live.nl

abdealim (author)2017-04-08

Thanx a lot mate. i am in process of building one, will let u know how it goes.

cmayfield2 (author)2017-03-02

is this technology or engineering?

JonathanC234 made it! (author)2017-01-17

Thank you for the inscrutable. I ended up using the same concept for one of my courses at UNT with the exception of using the TivaLaunchpad from Texas Instruments. The Launchpad uses peripherals which makes the code a bit longer than Arduino but I am more thank willing to share the code for the public if anybody is interested.

lizam22 (author)JonathanC2342017-02-25

Hey, which resistor did u use? I am using a 20k resistor ( it has 5 lines on it) and for some reason my flex sensors don't respond to the arduino and the code. I have a feeling that it doesn't work because of the resistor.

JonathanC234 (author)lizam222017-02-25

The best thing to do is take a multi-meter to the flex sensor and see what is the max and min value of the resistor in Ohms. Then look up a voltage divider circuit much like the posters circuit above. I believe my flex sensor ranged from 10k to 20k where I used a 10k for the voltage divider.

lizam22 (author)JonathanC2342017-02-27

Thanks. I used the multi-meter and now it all works. It turned out that my numbers were too big. yay.

dschurman (author)lizam222017-02-25

The resistor value shouldn't be a huge factor anyway (but I used 22k). If the circuit isn't working, it's more likely a problem not everything being wired in the right place.

RamG18 (author)JonathanC2342017-02-13

could i get the code to look at? for launchpad?

JonathanC234 (author)RamG182017-02-25

https://github.com/jec0317/Final_Hand_Project

If you have issues just email me at

jonathan.coley22@gmail.com

StaceyY7 (author)JonathanC2342017-02-14

need code plzzzzz

JonathanC234 (author)StaceyY72017-02-25

https://github.com/jec0317/Final_Hand_Project

StaceyY7 (author)2017-02-14

thank you your a science fair safer

elianna12 (author)2017-02-08

Can you email me please? Luiseachherrera1@icloud.com

im doing this project for a competition with my group and i feel like we're gonna need your help. Please and thank you

bada5 (author)2017-01-23

how can i buy it?and what will be the price?

JonathanC234 made it! (author)2017-01-17

Thank you for the inscrutable. I ended up using the same concept for one of my courses at UNT with the exception of using the TivaLaunchpad from Texas Instruments. The Launchpad uses peripherals which makes the code a bit longer than Arduino but I am more thank willing to share the code for the public if anybody is interested.

mohammad.gh95 (author)2015-11-07

first off all thank you dschurman for this nice project , I am working on the same project but i have problem with servos , i have tried servo (Tower Sg90 9g Servo) and it was working very well but when i tried to power servo mg996 it just rotated by it self like sweeping without any control,how i can solve this problem thanks in advance .

AbdulH104 (author)mohammad.gh952016-11-06

hi bro..can you help me and provide a data about this in pdf or other..pls

iabdulhanan@gmail.com

Mitendra saini (author)AbdulH1042016-12-11

If u get than please send to me
Pushpendersaini93@icloud .com

usama2000 (author)mohammad.gh952015-11-16

Sorry For Interruption But the same has happened to me you have to do two things
first you have to use a battery which can power all servos easily
second you have to give arduino separate power

dschurman (author)mohammad.gh952015-11-09

Hmm, I'm not sure what could be causing that. Are you sure you reconnected everything in the right way? Otherwise, checking online might help you more than I can. Sorry.

slamer made it! (author)2016-09-18

I made a glove using the long flex sensors from Adafruit. I hot glued 1/4 inch heat shrink to some work gloves and slide the sensors into the heat shrink. I read the sensors with an arduino uno and send servo position commands the 3d printed gand. It was actually very easy to do.

AbdulH104 (author)slamer2016-11-06

hi slamer can you provide data about this project please....?

slamer (author)AbdulH1042016-11-07

What kind of data are you asking for?

Mitendra saini (author)slamer2016-12-11

I need data code fir arduino

slamer (author)slamer2016-09-18

Here is the video
https://youtu.be/vgytoMCJ-Ns

About This Instructable

402,492views

1,145favorites

License:

Bio: I'm just a student who likes making things. And what's the point of making something if you're the only one who knows ...
More by dschurman:DIY LED Illuminated Trekking Pole FlashlightDIY "Anything" Staples Easy Button (voice recording)DIY Robotic Hand Controlled by a Glove and Arduino
Add instructable to: