Close

Robotic Hand Prototype

A project log for Solar Powered Robotic Arm and Hand

To create a robotic arm and hand, controlled by a user input, and powered by a solar collector.

Robotic Arm&HandRobotic Arm&Hand 06/13/2014 at 03:110 Comments

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:

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