3 Simple Ways to
Share What You Make

With Instructables you can share what you make with the world — and tap into an ever-growing community of creative experts.

PhotosPhotos

Share one or more photos of a project, recipe, or whatever you've made, quickly and easily.

Step by StepStep-By-Step

Share your step-by-step photos with text instructions of what you made so others can do it too!

VideoVideo

Share your how-to video. You'll need your embed code from a video site such as YouTube.

Arduino Wireless Animatronic Hand

Step 6CODE!!!

CODE!!!

The Very first thing you want to do is make sure your shield or xbee's are unplugged from the arduino. Or make sure the correct jumpers are the in the right place (in my case). I have written this code and if you do use it want credit.

This is the code for the sending Arduino:

int Finger1 = 0;
int Finger2 = 1;
int Finger3 = 2;
int Finger4 = 3;
int Finger5 = 4;

void setup()
{
Serial.begin(9600);
}

void loop()
{
byte servoValue1;
byte servoValue2;
byte servoValue3;
byte servoValue4;
byte servoValue5;

int FingerV1 = analogRead(Finger1);
int FingerV2 = analogRead(Finger2);
int FingerV3 = analogRead(Finger3);
int FingerV4 = analogRead(Finger4);
int FingerV5 = analogRead(Finger5);

if (FingerV1 < 200) FingerV1 = 200;
else if (FingerV1 > 460) FingerV1 = 460;
if (FingerV2 < 200) FingerV2 = 200;
else if (FingerV2 > 460) FingerV2 = 460;
if (FingerV3 < 200) FingerV3 = 200;
else if (FingerV3 > 460) FingerV3 = 460;
if (FingerV4 < 200) FingerV4 = 200;
else if (FingerV4 > 460) FingerV4 = 460;
if (FingerV5 < 200) FingerV5 = 200;
else if (FingerV5 > 460) FingerV5 = 460;

byte servoVal1 = map(FingerV1,460, 200, 255, 0);
byte servoVal2 = map(FingerV2,460, 200, 255, 0);
byte servoVal3 = map(FingerV3,460, 200, 255, 0);
byte servoVal4 = map(FingerV4,460, 200, 255, 0);
byte servoVal5 = map(FingerV5,460, 200, 255, 0);

Serial.print(servoVal1);
Serial.print(servoVal2);
Serial.print(servoVal3);
Serial.print(servoVal4);
Serial.print(servoVal5);


delay(100);
}



Here is the receiving:

#include

Servo myservo1; // create servo object to control a servo
Servo myservo2;
Servo myservo3;
Servo myservo4;
Servo myservo5;

void setup()
{
Serial.begin(9600);

myservo1.attach(2); // attaches the servo on pin 9 to the servo object
myservo2.attach(3);
myservo3.attach(4);
myservo4.attach(5);
myservo5.attach(6);
}

void loop()
{
if(Serial.available() >=5)
{
byte servoAng1 = Serial.read();
byte servoAng2 = Serial.read();
byte servoAng3 = Serial.read();
byte servoAng4 = Serial.read();
byte servoAng5 = Serial.read();


// Send the servo to the position read...  (note: you get to make this happen)
myservo1.write(servoAng1);
myservo2.write(servoAng2);
myservo3.write(servoAng3);
myservo4.write(servoAng4);
myservo5.write(servoAng5);
}
}


« Previous StepDownload PDFView All StepsNext Step »
6 comments
Apr 1, 2011. 8:21 AMchsairam_7 says:
why did'nt you map it to 1024 analog values and 180 servo angles; would'nt that be more effective? I made a similar hand months ago and it was pretty cool
Mar 31, 2011. 5:21 AMzachrattner says:
Cool project. You can clean up that chunk of if's by using the constrain function: arduino.cc/en/Reference/Constrain
Mar 5, 2011. 4:13 AMBombbunny says:
What program can I use to open up the xbee recieve and send files?
Dec 22, 2010. 12:40 PMmaewert says:
Very neat!

I see there is no blocking of data being transmitted. I mean within the stream there is no indication where the stream starts. Does this sometimes get confused as to which finger is which, especially if the receiving arduino is powered up after the transmitting arduino? If so then you may want to send a blocking character like '$' before the first finger is transmitted and then the reciever can look for the symbol to remain in sync with the transmitter.

Cool device. I'll have to try this ;-)

Best Wishes.

Pro

Get More Out of Instructables

Already have an Account?

close

All Steps Viewing
View all steps of an Instructable on the same page when you're a Pro Member.

Upgrade to Pro today!
28
Followers
2
Author:njkl44