ASL Talking Robot Hand
Have you ever tried to learn the sign language alphabet? If so I am sure you have found it disheartening not having a physical hand to look at. Videos are great but they can’t give the 3D immersive and interactable experience. Therefore, I made that experience for myself with an ASL alphabet hand.
Using a Raspberry Pi 4B, Servo Motors, and so many iterations of 3D printing and design I present the Sign Language Hand. You start the application, enter any word or phrase you want and the robotic hand will spell it out letter by letter, giving a pause and saying it outloud to help you learn. Then after the word is complete the robot will say the entire word or phrase utilizing TTS. It's been helping me learn and hopefully it will help you as well.
Supplies
- Raspberry Pi 4B (4GB)
- 4x MG995
- High Torque Continous Rotation Servo
- I would instead get another MG995 if I were to make this again. I didn't have on on hand unfortunately. (Will require you to edit hand file)
- 1/8th inch machine screws
- Many jumper wires
- 1/4th inch baltic birch
- PLA filiment
- Rubber Bands
- Super Glue
- 20lb + rated string or fishing line
- Tubing for 3d printer
- 6V power supply
- Speaker with aux in or monitor with sound.
Setting Up the Raspberry Pi
To set up the Raspberry Pi for use with the microcontrollers I installed Blinka. I have linked the adafruit guide that helped me set it all up.
Here it is: Setting up Blinka
Prototyping
It took a very long time, and many iterations in order to get the hand to work, so I figuried I would include some of the process for your encouragement. After each iteration I found it helped to write notes to aid in the design process. The final version is the one you see in the video.
Printing the Fingers
I have included the stls to make the print the fingers yourselves. For my project, in order to be safe, I printed 6 of each.
TIP: If you are using full supports, a precision screwdriver is excellent for removing the supports in the hole for the string.
Assembling the Fingers
To assemble the fingers follow these steps:
- Cut toothpicks to size and put into the joints
- Glue the end caps onto the toothpicks
- Once dried, superglue bottom rubberband holder
- Next superglue top rubberband holder
- Finally, superglue middle rubber band holder.
TIP: Prepoke a hole into the rubberband to help throw it onto the point
Printing the Hand
I have included the stls that I used for the hand. These will work for the 4x 180 servo and 1x continous.
NOTE: I reccomend editing the files to reverse the placement of the hand servo so that you can have a 180 servo instead of continous. This is what I would do if I were making a v2.
Printing the Servo Holders
You will need four of these, along with four holders for the tubing.
Cutting the Box and Servo Pieces
For cutting out all of these, I reccomend 1/4th inch baltic birch. Additionally, I made my front panel 1/4th inch acrylic.
TIP: Add in a lazercut hole for the string tubing and the hand base to fit in on the top of the box (one with all four sides with finger slots)
Attaching the Servos
To attach the servos, I just lined them up and drilled holes slightly smaller than the 3d printed ones. If you are doing this yourself feel free to add in lazer cut holes. These are all attached with 1/8th inch screws.
Next to attach the arms I found that drilling halfway into them so that the wood clamps around ther servo works very well. These are also attached by (typically manufacturer included) machine screws.
Putting It All Together
The last couple steps are to slot in the servo, slot the fingers into their spots, slot in the led, and hotgluing the tubing to the hand front. Lastly, you can run the stringing.
TIP: If the fingers aren't quite fitting, use a heatgun to coax it.
Wiring
Here are some of the key mappings for this project.
- Servo A data -> 2
- Servo B data -> 3
- Servo C data -> 4
- Servo D data -> 17
- Servo Hand data -> 27
- Led -> 22
Addtionally, make sure to bridge the grounds between the Pi and the external 6V power supply.
Coding
Before we get into the code make sure you have the following set up:
- Make sure that you have piper TTS working and set up with a voice model you like downloaded.
- Make sure all the alphabet letters are in a directory called alphabet
Ok, onto the cool parts of the code:
- We controll all of the fingers by having a dictionarry mapping to an array of position constants. This allows us to easily control the spelling of any word
- We make sure to use a thread pool so that one thread can proccess the TTS while the other, main, thread is handling the spelling
- We make sure to reset the hand in the end because we need to have the continous rotation servo correctly positioned
Tip: No servo is the same, adjust min and max pulse accordingly
Imprvements: If you go through the improvements of using a 180 degree servo for the thumb, you will no longer need the resetting of the hand or the annoying global tracker variable. Instead, it will be controlled like any ther finger.
Enjoy!
I hope you enjoy this instuctable and if you make it let me know!