I now have a fully working prototype for the hand! Now I will be expanding this project to an arm and a much more "finished look".
This is a great project as it can be applied to bionic implants for the handicapped, controls in hostile environments, and many other robotics applications.
FIRST PROTOTYPE
I began by building a Robotic Hand by using an Arduino Mega and servo motors with movement freedom of 180 degrees. Using an Arduino, I was able operate servo motors that responded to resistance change measured from a flex resistor imbedded in a glove. The servo motors would turn a specified distance based on the amount of resistance the flex resistor gave off, which in turn pulls on a series of strings connected to our animatronic hand. Then each servo motor pulls on one of five strings for each of the five fingers in the animatronic hand.
Main Materials:
{1} Arduino MEGA 2560 X 1
{2} Flexible Variable Resistors X 5
{3} 22k ohm Resistors X 5
{4} 22 AWG Wire X 1 Roll
{5} Servo Motors X 5
{6} Bread Board (840 point) X 1
{7} 4.8v Voltage Source (4xAA battery holder
Other:
- 1)Glove
- 2)Fishing Wire
PROTOTYPE SCHEMATIC AND ARDUINO CODE
#include <Servo.h>
Servo thumb;
Servo index;
Servo middle;
Servo ring;
Servo pinkey; // create servo object to control a servo
int flexPinkey = A0;
int flexRing = A2;
int flexMiddle = A4;
int flexIndex = A6;
int flexThumb = A8; //Sets positions for flex sensors (potentiometers)
int valPinkey;
int valRing;
int valMiddle;
int valIndex;
int valThumb; // creates variables for amount of resistance
void setup()
{
pinkey.attach(28); //attaches servos! :D
ring.attach(30);
middle.attach(31);
index.attach(26);
thumb.attach(32);
}
void loop()
{
valPinkey = analogRead(flexPinkey); // reads the value of the potentiometer, scales it to use it with the
valPinkey = map(valPinkey, 0, 800, 0, 179); // servo(value between 0 and 180 degrees), sets ratio between values,
pinkey.write(valPinkey); // sets the servo position according to the ratioed/scaled values,
delay(15); // and waits for the servo to get there.
valRing = analogRead(flexRing);
valRing = map(valRing, 0,850, 0, 179);
ring.write(valRing);
delay(15);
valMiddle = analogRead(flexMiddle);
valMiddle = map(valMiddle, 0, 800, 0, 179);
middle.write(valMiddle);
delay(15);
valIndex = analogRead(flexIndex);
valIndex = map(valIndex, 0, 800, 0, 179);
index.write(valIndex);
delay(15);
valThumb = analogRead(flexThumb);
valThumb = map(valThumb, 0, 800, 0, 179);
thumb.write(valThumb);
delay(15);
}
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.