Introduction: DIY Prosthetic Hand & Forearm (Voice Controlled)
Do you live with only one hand, or ever feel two just isn't enough? Well now you can make another! This project combines two very cool things: an arduino voice recognition shield and an open-source 3D printed robotics project called InMoov. Basically what I've done is modify the InMoov hand/forearm to be usable as a prosthetic (or additional appendage) and add a VR (voice recognition) shield to receive verbal commands and then make corresponding motions with the hand. The advantage of voice control is that it doesn't require muscles and is more flexible to different physical conditions (also hands free!). My program includes 15 general hand gestures and actions for everyday living! When I was looking into myoelectric arms kept thinking that the functionality wasn't worth the thousands of dollars. While mine isn't as fancy as some it's remarkable what you can create with desktop 3D printers, an arduino, and servos! I think the coolest part is the customization: the printed parts can be scaled to make an accurate prosthetic for anyone. Although this project can look intimidating, the entire time taken (if you work on the electronics while parts are printing) is about 14 hours! See it in action! (If embed doesn't work try the link HERE)
Step 1: Parts
Parts: (Cost will be about ~120 dollars)
5 x Servo Motors (either a HK15298 or an MG995 variant - anything with these size specs will work)
14 x 2.5mm (or 3mm) bolts (20mm long)
1 x 8mm bolt (55mm long)
1 x 8mm bolt (80mm long)
1 x 8mm bolt (60mm long)
1 x 9V Batteries and Connector
6 - 7.4V Battery and Charger (this drives the 5 servos, so be sure it has high current output ~2-3 Amps. I used this)
Fishing Line (any will do, but for more strength buy Spiderwire or Spectra fiber fishing wire so it won't strech)
Super Glue (I used 'krazy glue' because I printed in PLA, for ABS use acetone)
Step 2: Printing the Hand
This project uses a previously designed robotic hand that is part of an open-source robotics project called InMoov. For my purposes I only used the hand/forearm part of his design, the files and complete assembly instructions (these are REALLY helpful) can be found HERE and HERE. (NOTE: These parts are for a right hand, to build a left just look in the same places and download all the same version parts with the word 'left' in the name.)
Since there are already detailed instructions on how to build this I won't go into great detail, but he has a bunch of parts in his files so I will go over which ones you HAVE to print:
From his first thingiverse post you will need to print the following parts (I use the same names as his files have):
Fingers: Auriculaire3.stl, Index3.stl, Majeure3.stl, ringfinger3.stl, thumb5.stl
Palm: WristsmallV3.stl, WristlargeV3.stl
Half Forearm: robpart2V2.stl, robpart5V2.stl
Now from his other thingiverse post you will need these remaining parts:
Motor Mounts/Pieces: RobServoBedV4.stl, RobCableFrontV1.stl, RobCableBackV2.stl
Other Half Forearm: (These are just covers so for functionality they aren't needed) robpart3V3.stl, robpart4V3.stl
For printing the parts I used a Makerbot Rep 2 and built all the parts with 2 shells and 15% infill with no support on any of the prints (he already has built in supports). I used standard definition prints for the fingers and 'low' resolution prints for the arm/wrist pieces.
Step 3: Building the Hand
The build process of InMoov is already documented HERE and HERE. I won't go into too much detail, just a brief overview. If you are confused feel free to leave a comment.
1. Assemble joints. Take the various screws for the hand and use them to assemble. You may need to use a drill to enlarge or fix printed holes for the finger joints and hand pieces. Use the larger bolts to attach the two pieces for the fingers, thumb, and wrist. Make sure the pieces attached with screws are able to bend easily, some sanding may be required for smooth fit. All the pieces should be able to flex with little resistance.
2. Glue the joints you just assembled together (except for fingertips). Make sure the bends are all oriented the same direction so the finger will curl. Let dry.
3. Take fishing line (leave plenty of excess length) and pull it through the fingers, one string running above all the hinge joints in the fingers and another below all the hinges. Bring these strings down through the channels in the hands and out into the wrist piece. Double knot these strings at the tip of the fingers so they don't slip through the two small holes. Test the finger flexibility by pulling one string while holding the other taught. The fingers should bend and then straighten with ease.
4. Glue on fingertips. Leave all the lower arm pieces except for the wrist piece that you can screw the bottom of the hand into as well as the motor mount pieces for now. You can also clip off the extra lengths of the finger bolts.
Step 4: Servo Setup
First I'd like to talk about the two servo options, the HK15298 is an awesome servo (almost double the torque) but has a restricted range of motion and that can stop your fingers from having full range of motion. With that in mind (I used four HK15298s and mine works great but it took a lot of adjustments) I recommend the GM995s because for this project you don't need that much torque and they are cheaper while providing a better range of motion. On to building!
The servo setup is pretty simple you take your five servos and mount them onto the bracket. Check my picture and his if you are confused, there are three on one side, and two on the other. There are slits in the mounts for the motor wire to be pulled through so it's not bent. You can then screw down the motors once you have them in place. My motors were a bit taller than his for some reason, so I used little rubber spacers that came with the motors between the bottom of the motor mount holes and the motor bracket. The screws used to mount should have been supplied with the motors. Now take the two other motor bracket pieces. One should be flat except for two rectangular protrusions with six holes through the top. Take this piece and push the two rectangular protrusions into the corresponding holes on the front of the motor bracket. Secure with glue or a screw. Lastly, take the remaining motor bracket piece (completely flat with a notch cut out of the bottom) and put it on top of the motor bracket in line with the wall separating the two rows of motors. Secure with a screw.
Step 5: Wiring
I recommend breadboarding your circuit (although it's incredibly simple) before you solder wires together. Basically the entire circuit consists of hooking each servo motor up to a ground, power, and signal wire. The ground wires all combine and go to both the black (-) wire of your 6V - 7.4V battery and one of the ground inputs on your arduino (MAKE SURE TO DO THIS!!! Caused me some confusion when I forgot). The power lines all go to the red (+) wire of your battery. The signal wires should go to the following arduino digital pins: 3, 5, 6, 9, 10. Now we are going to test the motors with a simple arduino program. The code is attached to this step in a TXT file, so just copy paste it into a new arduino sketch and upload it to the arduino. If you have or don't have the EasyVR shield attached it won't make a difference. If you have never used arduino check out this tutorial. The code just rotates each motor individually and will go through all of them.
If you orient the bracket holding all the servos so that the side with two servos is pointing towards you then the orientation of which servo goes to which finger is as follows: the left of the two servos closest to you is the pinky, then going clockwise around the bracket they are the ring finger servo, middle finger servo, index finger servo, and thumb servo. I had each finger hooked up to the digital pins as follows: pinky to 3, ring figer to 5, middle finger to 6, index finger to 9, and thumb to 10. Now if you rerun the motor test program it will cycle the motors from pinky to thumb and repeat.
Step 6: Finishing Assembly
Now it is time to grab the fishing line from your wrist piece and pull it down through to the servo bracket. Make sure to pull each pair of strings for a finger free from the others before pushing them through their guide hole(s) (these are the six holes in the piece you added to the front of the servo bracket). Now you will need to grab the five servo horns that you printed before. If you look on the sides of the disk you see two holes where you can push the fishing line in and then it will come out of two holes on the top side near the center mounting holes. Once you have pulled the strings through these holes you can tie them in a knot to make sure they don't slip out and then feel free to screw this piece down to its appropriate servo to keep it out of the way. You may have to do some drilling to make sure the screw that came with your servo fits through them. Repeat this for all five fingers (the pinky and thumb lines actually have to go through two guide holes, one in the front of the servo bracket and one in the middle of the bracket).
Step 7: Gluing the Arm
If any of this is confusing refer to the assembly instructions for InMoov that I linked to in the 'Building the Hand' step. Next we will be gluing together the rest of the arm. First take your servo bracket and the arm piece called RobPart5V2. You will need to use wire cutters or scissors to remove a small piece of this printed part as I am doing in the picture. Once that piece is removed you can set the servo bracket on top of the RobPart5V2 it should align with a small L shaped groove on the left side (make sure servo bracket is still oriented with two servos on the side closest to you and RobPart5V2 has the end with the piece you clipped off pointing away from you). You can glue the servo bracket down to the three support beams underneath it.
Next you can now take the two forearm pieces you have (see my picture) and glue them together over the strings running from the wrist to the motors. Once this dries go ahead and glue them into the wrist and lower forearm piece holding the servo bed. Leave the last top forearm piece off! You should now have what my pictures look like.
Step 8: Calibrating the Fingers
Now we are ready to tension the fishing lines through the arm to make sure that when the servos are moved it draws the line and moves the fingers. To do this I loosened the screw holding the servo horn to the servo just a bit so it was still attached, but the screw head was raised off the screw horn. Next I pulled on the two ends of fishing line protruding from their respective holes in the top of the servo horn and pulled them tight. the finger should remain straight and resist bending one way or another. While still holding the strings tight, wrap them around under the head of the screw holding the servo horn in. Tighten the screw so that it pinches down on the tight fishing line, holding it in place. I'd leave the excess fishing line to make adjustments later (you can just tape it down to the top of the servo horn). Repeat this for each finger. Now you can run the motor test program again and it should flex each finger individually.
You can now glue on the last top piece of the forearm. I left mine off though because I was constantly adjusting and trying different things with it.
Step 9: Grip!
For some added grasping ability you will want to get your hands on some sugru. You will need about 1-2 packets depending on how much you want to use. First lightly sand the sections of the hand you wish to add the sugru to. Next open your packet and roll out a bunch of pea sized balls. Take one of the balls and squish it onto a section of the finger you sanded. Slowly smooth it out around the area you wish to add grip to. Leave overnight to dry and you have completed the building!
Step 10: EasyVR Board Software
First I just have to say this board is really cool. I had a few issues working with it, but once I fixed those it has been incredibly fun to play around with! There are a few steps that need to be taken to get the easyVR board up and running.
1. Firstly you need to download a specific arduino IDE, it is a really old version called Arduino 0023. Scroll down the downloads page to 'Previous IDE Versions' and you can find it. I know this seems weird but when I used the newer arduino IDE it wouldn't let me compile and kept throwing the error I have in a picture above. Feel free to try and figure it out for me!
2. Now you need to download and install the EasyVR arduino library. If you are unsure on how to install a new arduino library, then check this lovely arduino tutorial.
3. Next you will need to download the EasyVR Commander program that lets you add and train new commands. Install this like you would any normal program, it is independent of arduino.
You now have all the software set up!
Step 11: EasyVR Test
Grab your EasyVR shield and your arduino uno. Pop the EasyVR shield onto the arduino uno, be careful not to bend any pins. Take the EasyVR microphone and if it isn't connected already locate the pins that say 'Mic' and plug it in. Now that you have the correct software installed and prepped go ahead and open a new arduino sketch in the old 0023 IDE. In the upper left click 'File' and go down to 'Examples' hover your mouse over 'EasyVR' and in the options that pop out select 'EasyVRBridge'. Upload this program to your arduino by clicking the upload button. Your EasyVR is now ready to be trained so go ahead and open the EasyVR Commander program. In here you can add/train commands to your fancy. In order to use my full code you will need to add certain commands in a certain order. Click on the first 'Group' over on the left hand side. There should currently be no commands in it. Go ahead and click 'Add Command' in the tool bar near the top of the program window. Do this for each of the programs I will list below, be sure to type the same names in the same order! Optional: You can also train another trigger command, do it the same way as the commands but just click in the 'TRIGGER' group and train the word 'JILL'.
Next you will have to train the EasyVR to know your voice for these commands. Click on the first command 'TEST' and then in the toolbar near the top of the window select the 'Train Command' button and a window will prompt you to click 'Phase 1' and then speak the word clearly into the microphone. My advice is just say the words normally about six inches from the mic, sometimes I'd find myself over-pronouncing words and when I actually tried to use them I wouldn't say MOUSSSSSEEEE, I'd just say mouse. After 'Phase 1' it'll prompt you for 'Phase 2' and then after that the word should be successfully trained. Repeat for each command. After the training you can click the 'Test Commands' button in the toolbar and it'll prompt you to say a word on your list and then highlight the corresponding word. Scary! Big brother may be listening...
Step 12: The Program
I have attached my final program to this step in a TXT file, so like the motor test just download it, copy/paste it into arduino, and upload it. When you then run the program you will first have to say a trigger word, in this case I trained mine to respond to 'JILL' but the default 'ROBOT' command will also work and doesn't need to be trained in so go ahead and try that. For debugging purposes you can open up the serial monitor window in the arduino program and when you say a word the board will write out which one you said to make it easier to see. The program indicates it is listening by when the little green light on the EasyVR board is on. You will occasionally see it flicker off and that is because it listens in intervals of ~5 seconds to make it easier to decipher commands. So as long as it is green say a command it should be able to pick up what you have said. If you have your motors all hooked up then go ahead and try out a couple commands from the list on the previous page. Good luck, hope it all works well :)
Step 13: Prosthetic Modifications
Right now you have a functional voice controlled robotic arm. To turn this into a working prosthetic there are a few more measures that must be taken. To modify it so it can be worn will take two more printed parts that I have attached to this page. The file 'robcap3V1' is the end cap designed for the InMoov project and the file 'robcapAddition' is a piece I have designed that will allow the arm to be fixed to a person. I printed them both out on 'low' resolution with 2 shells and 10% infill. Once you have them, take your glue and fix the 'robcapAddition' onto the 'robcap3V1' as shown in the picture. Feed the servo wires through both parts. Now glue or screw 'robcap3V1 into the end of the forearm.
Next we will need to mount the components (arduino, 9V, motor battery) onto the outside of the arm so that it will be completely mobile. Unfortunately in the InMoov forearm design there isn't enough empty space to mount all of these things (unless the bicep part is built) so we will use wire ties (or zip ties) to affix it all onto the outside. Hold your components up to the back of the arm and with a marker make dots. Drill out these dots so you can feed through the wire/zip ties. Once drilled go ahead and mount the components. Although it isn't as pretty, it is functional and gives easy access to the vital components so you can change batteries or wires as needed.
Looking at the 'robcapAddition' part you will probably want to add some padding on the inside. I found craft or packing foam to work well. I haven't been able to test this fit with anyone that uses prosthetics so I haven't had much feedback on the fit. Near the end of the 'robcapAddition' part you will see four slits. These are to mount 1" straps so they can be wrapped around the arm to help keep the prosthetic from slipping. Unfortunately I don't know anyone that could test this for me so I don't have much advice to give, just tweak the setup for you specific needs. Hope this helps!
Step 14: Final Thoughts
I think the InMoov project is just too cool and was very excited to be able to use it for something. Hopefully you all enjoyed this and at least got a few new ideas. I eventually want to expand this project by using different methods other than voice for control and having a more functional arm (wrist/elbow movement) these parts exist for the InMoov project, I just haven't implemented them yet. If you have any other ideas feel free to elaborate! Unfortunately I am leaving for college next week and will have to put projects aside for a while (winter break?). This project isn't supposed to be a replacement for advanced prosthetics but merely the concept and testing of a DIY version using cheap and available parts. Thanks all for a wonderful summer of 'ibles! Hope you enjoy it :)