Robotic Hand
- This tutorial outlines the steps to construct a "robotic hand", using everyday supplies and Arduino Servo Motors.
- Viewers learn how to connect each of the 5 fingers of the hand to a servo motor, so that the hand can function.
Supplies
- Arduino Servo Motor (5 pieces)
- Styrofoam
- Jumper Wires
- Fishline or Wire
- Glue Gun
- Utility Knife
- Needle
Constructing the Robotic Hand
- First, use a utility knife to cut 5 different finger-length pieces of Styrofoam, representing the 5 fingers of a hand.
- Next, cut each Styrofoam finger into 3 subparts, where each subpart represents one jointed segment of a finger.
- After that, use sandpaper to shape and smooth the sides of every cut piece.
- Then, using a needle, "drill" a small hole longitudinally through the center of each finger segment piece.
- Next, for each finger, connect its 3 finger segments together, by starting at the fingertip and threading a string through each segment length-wise. (Remember to leave a small space between finger segments so that they bend easily.)
- After that, use the needle to "drill" a small channel into the hand where each finger will be mounted. (Make the channel go into the hand 2-3cm before coming out through the back side of the hand.)
- Then, one finger at a time, mount the finger to the hand by passing its string through the channel in the hand and out through the back side of the hand.
- If needed, make the entire hand assembly look more lifelike by further shaping and trimming each finger.
Connecting the Forearm Servos & Power Source
- First, cut out a rectangular piece of Styrofoam that represents the "forearm" that the hand will attach to.
- Then, hot-glue 5 servo motors to the forearm, aligned them neatly in a row.
- Next, connect each of the 5 loose finger strings to the closest forearm servo motor. (Make sure that when you tie off each finger string to the servo, the finger is in its most-bent position, so that the hand later functions properly).
- After that, for each servo, connect its jumper wire to the Arduino, as follows:
- Plug all red wires of the jumper to the power input (VCC) on the Arduino.
- Plug all brown wires of the jumper to the ground input (GND) on the Arduino.
- Plug each orange wire of the jumper to it's individual signal port (of your choosing) on the Arduino.
Programming the Robotic Hand to Function
- First, copy and paste the code from this pastebin into the Arduino app.
- Next, edit/change the code so that the servos for the fingers are linked to the ports you chose earlier.
- Then, upload the code to the Arduino.
Done!
Key Learnings - Problems That Were Encountered
Robot Construction:
- Problem #1: Some fingers were not moving far enough when their servos were activated.
- Why? All the metal "guides" (which were cut from paperclips) were pushed too far into the Styrofoam, and were preventing the fishing lines from moving freely.
- Solution: Some guides were removed entirely, and some were pulled further out. This fixed the problem.
- Problem #2: The hand was bending when the fishing lines were pulled by hand or by the servos.
- Why? The Styrofoam of the palm of the hand had a hairline crack half-way across it, which caused the palm to bend when tension was put on the fishing lines by the servos. This damage happened in an accident during the project and nobody noticed the thin crack was there.
- Solution: A second piece of Styrofoam was cut and glued to the underside of the hand which gave it more support and prevented the crack from expanding any further. This fixed the problem.
- Problem #3: Even after Problem #2 was fixed, the thumb and little finger were still not moving well when activated by their servo.
- Why? These fingers were attached at an angle to the palm, not straight-on to the palm and inline with their servo, so the pull and release from the servo was not powerful enough to pull the fishing line through the Styrofoam at the angle.
- Solution: The thumb and little finger were re-strung and mounted at an angle that was more inline and straight-on to the servo. This mostly fixed the problem.
- Problem #4: After fixing Problem #3, the thumb still didn't move quite as well as the other fingers.
- Why? The new position of the thumb (more straight-on to the servo) meant that the Styrofoam of the thumb was scraping along the side of the finger and palm next to it, causing a lot of friction, so the thumb moved, but just not as well as the other fingers.
- Solution: This problem was intentionally not fixed since there was no time left to work on it. The idea that I had was that a new Styrofoam base could have been cut and glued to the current base underneath the servos (but wider than the current base). Then, two additional Styrofoam pieces could be glued on top of the new base, effectively making the servo base area much wider. Then, the thumb servo itself could have been moved and repositioned to be more inline with the thumb fishing line, rather than repositioning the thumb itself. So this would have helped the thumb be aligned better to the servo (fixing Problem #3), and as well would have greatly reduced the friction that was happening (Problem #4).
- Problem #5: The fishing line on the fingertip-end of some fingers was coming undone.
- Why? These lines only had single knots plus glue, which wasn't strong enough (especially after an accident where the project robot was damaged).
- Solution: All fingers were re-threaded with new fishing line, with double/triple knots at the fingertip-ends and Gorilla Glue on top, which is stronger than craft glue. This fixed the problem.
Programming:
- The computer that the programming was done on did not have the latest drivers to connect to Arduino, so new drivers had to be downloaded.
- When in the Arduino app, had to remember that the Old Boot Loader had to be selected in order to upload code to Arduino later.
- In the demo program that was written, FOR loops were used, one for each finger that was being moved. ARRAYS were considered but were not used, because we needed to be able to move each servo a different amount, so using an array would have been too overly complicated for doing this. FOR loops were much more simple and easy for the team to read and understand.
Project Team:
- Problem: The programming and testing phase of the project was greatly impacted because the robot was stored in one student's locker at school, and the person could not be reached for 2 days.
- Solution: Always store the robot and all materials in a communal place, so that all project team members can access it as-needed regardless of who is at school.