This instructable was created in fulfillment of a project requirement of the Makecourse at the University of South Florida (www.makecourse.com). It is a single degree of freedom 3D printed hand that is controlled wirelessly with a glove. The fingers of the hand are moved by five servos in the forearm. The servos are powered by a 4.8V battery and signaled by an Arduino Uno and Xbee in the base. The glove has a flex sensor or variable resistor sewn to each finger which is powered by an Arduino Nano and Xbee in a 3D printed box attached to the wrist of the glove.
Step 1: Gather the Parts and Materials
The links provided below are for reference only and I suggest shopping around for the best prices currently available.
- 1 x Arduino Uno
- 1 x Arduino Nano
- 2 x Series 1 Xbee radio modules(802.15.4)
- 1 x Arduino wireless shield
- 1 x Parralax usb xbee adapter board
- 1 x 4.8V 2200mah battery pack
- 2 x 5V Pocket Juice 2000mah battery pack
- 5 x Towerpro MG91 Servos
- 5 x 4.5 in flex sensors
- 5 x 10kOhm resistors
- 1 x SparkFun solderable bread board
- 1 x 4pack 10mm Standoff RadioShack #276-1381
- 18 x 2mm x 10mm screws
- 4 x #8 3/4inch wood screws
- 3 x 1/4x20 socket cap bolts
- 3 x 1/4x20 lock nuts
- 20lb test or greater monofilament or fluorocarbon fishing line
- 1 x pair Mechanix gloves or similar
- 1 x Velcro elastic strap available at Walmart
- Access to a 3D Printer
- Assorted heat shrink(optional)
- Lots of 22 gauge jumper wires, red bull and patience
Step 2: Print the Parts!
- I recommend an infill of at least 15% and a printer with resolution of 0.1mm.
- You will need 2 of the index finger as the ring and index are the same.
- You will need 5 of the servo wheels.
- The degree to which you have to sand things will vary on the supports which will depend on the orientation of the parts when you print them. For example print the guide with the holes for the string vertically to minimize supports inside the guide. Try to orient the fingers and hand to minimize supports at hinge points.
- Glove_ Component Box.STL
- Servo Wheel.STL
Step 3: Xbee Setup
There are numerous tutorials on this subject but they vary greatly because the Xbees can be configured in many different ways depending on application. The steps that follow are the basics required for this application.
- First download XCTU from here.
- Install an Xbee onto the Parallax USB board and connect it to your computer.
- Open the XCTU software. Click the Add Device Icon and when the your radio module is discovered accept the default settings and continue.
- The settings for this radio will now be visible on the right. Set the PAN ID to any 4 digit hex number you choose. Ex.1234. Then click the write icon to the left to update the module. Write this down as it will need to be input exactly the same in the other radio module.
- Next write down the serial number high and serial number low for this module the serial number high should be 13A200 and the serial number low varies for each module. We will input these into the other module in a later step.
- Next scroll down to the serial interfacing tab and change data rate from the default 9600 to 19200 and click the write icon to the left to update the module.
- Next click the x on the bottom of the radio module icon to remove the radio from the list.
- Remove the first Xbee from the Parallax USB board and install the other Xbee module on the board and discover the module as before by clicking the add device icon. Accept the default settings and continue when the module is discovered.
- Enter the PAN ID that you chose in the other Xbee and click the write icon to update the module.
- Next input the serial number high and low in to the destination address high and low for this radio. These are the values you wrote down from the other radio. When you have entered them click the write icon to update the module.
- Write down the serial number high and low for this radio as we will need to input this into the other radio.
- Scroll down to the serial interfacing tab and change data rate from 9600 to 19200 and click the write icon to update the module.
- Next click the x on the bottom of the radio module icon to remove the radio from the list.
- Remove the Xbee from the Parallax USB board and install the first
Xbee module on the board again discover the module as before by clicking the add device icon. Accept the settings (note the data rate should now be 19200 for this module) and continue when the module is discovered.
- Now enter the serial number high and low from the other radio in the destination address high and low for this module and click the write icon to update the module.
- Click the x on the bottom of the radio module icon to remove the radio from the list and disconnect the board from the computer.
Step 4: Wire the Glove!
- Solder two different color wires to each flex sensor (in the Fritzing and the picture I used yellow and orange).
- Apply heat shrink to the wires of the flex sensor at the base. This is optional but highly recommended as the base of the flex sensors are prone to break.
- Install the 5 x 10kOhm resistors by referencing the Fritzing diagram on the Sparkfun solderable breadboard.
- Install 5 white jumper wires by referencing the Fritzing diagram making sure to leave one hole between each resistor and wire as this is where the Arduino Nano will sit on the board.
- Place the Nano lining the five resistors up with analog pins A3-A7 of the Nano. Check for clearance of the wires running underneath the Nano. When you are satisfied temporarily remove the Nano and solder the resistors and wires to the board.
- Install the Nano back on the board and solder pins A3-A7 of the Nano to the board.
- Install a jumper from the reference pin of the Nano to the positive rail of the board this is yellow in the Fritzing.
- Install a black jumper wire from the ground pin of the Nano to the negative rail of the board.
- Install a red jumper wire from the 5V pin of the Nano to the positive rail of the board.
- Solder these 3 jumpers in place.
- Install the each flex sensor of the glove to the board by attaching the orange wire to the negative rail of the board and the other to the corresponding white jumper. The thumb will be wired to pin A3 this is the jumper closest to the Nano. Next will be the index wired to pin A4 of the Nano and so on.
- Solder all the flex sensor wires in place.
- Lastly there are four connections from the Xbee to the Nano 3.3V, ground, Data In and Data Out these are clearly labeled on the Parralax USB board. We cannot wire these yet as we need to configure the radios and cannot have the serial lines of the Xbee attached to the Nano to do this.
Step 5: Make the Glove!
- Thread a needle with 2feet of black string and tie several knots at the end.
- Pierce the tip of the flex sensor in the clear portion where there is no resistor with a needle making sure your knot is large enough not to pass through the flex sensor.
- Place the end of the flex sensor approximately 1/4 inch from the tip of the glove finger. Sew the flex sensor on by looping around the flex sensor every 1/4 inch passing through the finger of the glove on either side of the flex sensor with each pass. Do not pierce the flex sensor while looping around it. The only place the string passes through the flex sensor is at the tip in the clear portion that does not contain the resistor.
- When you reach the base of the flex sensor tie a knot.
- Secure the knots on both ends of the flex sensors with a small amount of glue.
- Repeat this procedure for each finger.
Step 6: Attach the Xbee to the Glove
- We need four connections from the Xbee to the Nano 3.3V,
ground, Data In and Data Out these are clearly labeled on the Parralax USB board.
- Install a wire from Data Out of the Xbee board to the recieve(RX) pin of the Nano as shown in the Fritzing and solder in place.
- Install a wire from Data In of the Xbee board to the transmit (RX) pin of the Nano as shown in the Fritzing and solder in place.
- Install a wire from 3.3V of the Xbee board to the 3.3V pin of the Nano and a wire from ground to ground as shown in the Fritzing and solder in place.
- Install a 10mm spacer to the front hole of the Parallax Xbee USB board using one of the screws which come with the spacers.
- Install the Parallax board to the breadboard using another screw go through the corner of the Sparkfun breadboard from the bottom and tighten.
- Solder the four pins(TX,RX,3.3V,Ground) of the Nano to the Sparkfun board.
Step 7: Assemble the Glove Box
- Sew the box to the top of the glove at the edge of the wrist through the 2 holes in the bottom of the box.
- Feed the free end of the strap through one of the slots in the bottom of the box and back out the other slot. Pull through until the clip is approximately a half inch from the box and feed the free end through the clip.
- Drill 2 holes with a 3/32inch drill bit in the left side of the sparkfun board where the posts in the bottom of the box are.
- Drill the 2 posts in the bottom of the box with a 1/16inch drill bit.
- Attach the board to the bottom of the box with 2 x 2mm screws.
Step 8: Upload the Code!
The code attached is fully commented however here is a brief overview.
Transmitting glove Nano code:
- Easy transfer library is included which handles putting the data into arrays and has a checksum for the data on the receiving side. Compliments of Bill Porter. More experienced programmers may want to put the data into arrays and define some kind of checksum as I did. However, it is hard to compete with this libraries ease of use.
- Struct function of easy transfer library is used to define the variables which will later be assigned angle values to be transmitted.
- Flex variables are declared which will contain the analog read of the voltage from the flex sensors and are assigned to pins of the Nano.
- Opened and Closed variables are declared which will be assigned to minimum and maximum values obtained from the flex sensors. This will be used in the map function to define the range of finger travel. This is a clever code adapted from another Instructable author Gabry295.
- Conditional statements are used to ensure Opened and Closed variables represent minimum and maximum values for the range of flex sensor voltage readings.
- Map function is used to assign the flex sensor value to a 0-180 degree angle for the servos and sent to the Uno.
Receiving hand Uno code:
- Servo and Easy transfer libraries are included.
- Servo objects are defined for each finger.
Struct function of easy transfer library is used to declare the variables which were previously defined in the Nano sketch.
- Pins of the Uno are assigned to servo pin variables assigned as outputs and attached to respective finger objects of the servo class.
- The data is then received using the receiveData function of the Easy transfer library and the write function of the servo library is used to assign the angle to the finger objects.
Uploading the Code:
Download the Easy Transfer library zip file.
Add the zip library from inside the Arduino IDE by selecting "Sketch" then "Include Library" and "Add Zip Library" as shown.
You can also manually add the library. To install the library, first quit the Arduino application. Then uncompress the ZIP file containing the library. Drag the Easy Transfer folder or save into your libraries folder. Under Windows, it will likely be called "My Documents\Arduino\libraries". For Mac users, it will likely be called "Documents/Arduino/libraries". On Linux, it will be the "libraries" folder in your sketchbook.
- Open the Arduino IDE and copy and paste the Uno_Hand code into a blank sketch. Using the Arduino IDE upload the Uno_Hand code into the Uno.The Xbee shield will need to be removed from the Uno temporarily for upload.
Open the Arduino IDE and copy and paste the Nano_Glove code into a blank sketch. Using the Arduino IDE upload the Nano_Glove code into the Nano. The Xbee will need to be temporarily removed from the Parralax board for upload to the Nano.
Step 9: Assemble the Hand!
- This will by far be the most time consuming part of the build. As with any 3D printed part removing of supports and some sanding to smooth things out will be required.
- Tie 2 pieces of line to the holes in the upper tip of each finger(1 extension, 1 retraction). Make sure you have enough line to reach from the tip of the finger down to the servo in the forearm. Keep in mind the middle finger will require more line.
- Assemble each finger by carefully snapping them together at the hinges. Do not be afraid to sand the hinge points until things slip together. Take your time. Remember patience.
- Once all the fingers are assembled set them aside.
- Grab the forearm, hand and some glue. I used gorilla glue. Place a thin even coat of glue on the pins and the mating face of both the forearm and hand then slide the hand and forearm together. Place them upright to dry and set aside.
- When your hand and forearm are dry install each finger on the hand by carefully snapping them together at the hinges. Do not be afraid to sand the hinge points until things slip together. Take your time.
- Feed the lines from each finger through the holes in the guide block. The thumb strings will go through the hole farthest from the thumb(top left servo cavity). The pinky strings will go through the hole farthest from the pinky(top right servo cavity). The middle finger strings go in the middle hole. The index and ring finger strings go in the holes directly below each respective finger.
- Place the guide over the four studs in the forearm but do not push it down yet.
- Place a servo in each cavity of the guide and route the servo wires in the slots in the forearm then press the servos into the forearm(this will be snug).
- Press the guide firmly down over the posts and attach the guide to the forearm using four screws at the corners.
- Attach the lid of the base to the bottom of the forearm using 3 x 1/4x20 bolts and nuts.
- Secure the Uno to the bottom of the box using 4 x 2mm screws.
- Install the Xbee on the wireless shield and install the shield onto the Uno.
- Place a breadboard in the box next to the Uno.
- Wire the servos to the breadboard and Arduino wireless shield as shown in the Fritzing diagram.
- Wire the 4.8V battery to the positive and negative rails of the breadboard and orient the battery so that the wires lay flat. When you are satisfied temporarily disconnect the battery.
Step 10: Assemble Servo Wheels
- There are 3 black servo horns that come with each servo. We will be using the horns with 4 arms to attach the servo wheel.
- Using a pair of diagonal side cutters snip the 2 long arms of a servo horn so there are two holes remaining on each side.
- Temporarily Install the servo wheel on the servo horn aligning the holes in the servo wheel with the inner hole of the shorter arm of the servo horn. I recommend inserting a piece of fishing line through the servo wheel and servo horn on each side to ensure they are aligned.
- Mark the outer two holes of the long arms of the servo horn onto the servo wheel and drill through these holes into the servo wheel with a 1/16inch drill bit.
- Install 2 x 2mm screws attaching the servo wheel to the bottom of the servo horn. Leave these screws loose as we will be installing the them on the servos attaching the finger line into the holes later. Remove the two small pieces of fishing line.
- Repeat this procedure for 3 more servo wheels and horns.
- The fifth servo wheel will be installed on the top of the servo horn for clearance. This one is for the index finger.
Step 11: Test the Servos!
- Lift the hand off the base and connect the 4.8V battery to the breadboard and lower the hand back onto the base.
- Plug in one of the pocket juice batteries to the Arduino Uno through the hole in the base with a USB cable.
- Strap the glove on and plug in the other pocket juice battery to the Arduino Nano.
- After a few seconds the hand servos should respond to control glove movements.
- Fully open and close the glove a few times and ensure that each finger servo moves with the corresponding glove movement. Remember the thumb servo is farthest from the thumb at the top left with the palm of the hand facing you and the pinky is the top right with the palm facing you. The other servos attach to the finger directly above them.
- If you notice a problem now the easiest way to fix it is by swapping the servo wires on the Uno in the base.
- When you are satisfied with the servo function open the glove all the way and ensure the servos turn all the way to one side.
- Install the servo wheels on the servos and align one of the side holes in the servo wheel with the guide hole in the servo cavity. Remember the servo wheel that is on top of the horn is for the index finger. Install the servo horn retaining screw that came with the servos loosely.
- Insert the extension line for each finger through the hole in the side of the servo wheel that is farthest from the guide hole(bottom of the assembly) and out through the servo horn hole. Pull this line tight until the finger extends straight up and secure temporarily with hot glue. Repeat for each finger.
Insert the retracting line for each finger though the hole in the side of the servo wheel that is closest to the guide hole(top of the assembly) and out through the servo horn hole. Pull tight and secure temporarily with hot glue.
You are finally ready to articulate those digits!
Plug in batteries to both hand and glove and cycle through the movements. You can now add a little tension to a servo line by heating the hot glue and pulling to tension it. Or you can adjust the wheel forward or backward a few teeth until the desired finger travel is achieved.
When you are satisfied tie knots of your choice at each line and secure with a little hot glue.