Trådlös Animatronic Hand (3 / 5 steg)
Steg 3: Programmet
För robotic hand
(Arduino):
#include
Servo
ServoThumb, ServoIndex,
ServoMiddle, ServoAnnular, ServoPinky;
byte startkit;
int tumme = 0;
heltal Index = 0;
int mitten = 0;
int ringformig = 0;
int Pinky = 0;
void setup()
{
Serial.BEGIN(9600);
ServoThumb.attach(9);
Delay(300);
ServoIndex.attach(8);
Delay(300);
ServoMiddle.attach(7);
Delay(300);
ServoAnnular.attach(6);
Delay(300);
ServoPinky.attach(5);
Delay(300);
Serial.println ("redo att ta emot.");
}
void loop()
{
IF(Serial.available()) {
Startkit = Serial.read();
Tumme = Serial.read();
Index = Serial.read();
Mitten = Serial.read();
Ringformig = Serial.read();
Pinky = Serial.read();
om (startkit == "<') {
IF(thumb!=255)
ServoThumb.write(Thumb);
IF(index!=255)
ServoIndex.write(Index);
IF(Middle!=255)
ServoMiddle.write(Middle);
IF(Annular!=255)
ServoAnnular.write(Annular);
IF(Pinky!=255)
ServoPinky.write(Pinky);
}
}
Delay(30);
}
För flex sensor handskar
(lilypad arduino):
int ResThumb = A4; Variabler av analog Läs form flex sensorerna ansluten till de analoga stiften på Arduino LilyPad
int ResIndex = A3;
int ResMiddle = A2;
int ResAnnular = A1;
int ResPinky = A0;
int OpenedThumb = 0; Variabler av värdena när handen helt öppnas
int OpenedIndex = 0; Detta behövs för en kontinuerlig kalibrering
int OpenedMiddle = 0;
int OpenedAnnular = 0;
int OpenedPinky = 0;
int ClosedThumb; Variabler av värden när handen är helt stängd
int ClosedIndex; Vi kan inte sätta den till noll efter att minimivärdet nått
int ClosedMiddle; i analog Läs aldrig når noll. Vi ska tilldela värdet på
int ClosedAnnular; en första analog läsa, då programmet i slingan kommer att
int ClosedPinky; automatiskt assing lägre värden
int tumme = 0; Variabler av värden att skicka
heltal index = 0;
int mitten = 0;
int ringformig = 0;
int pinky = 0;
void setup()
{
Serial.BEGIN(9600); Aktivera seriell kommunikation, är XBee serie 1 förprogrammerade på 9600 baud/s
pinMode (ResThumb, indata); Variabler av sensorn anges som indata
pinMode (ResIndex, indata);
pinMode (ResMiddle, indata);
pinMode (ResAnnular, indata);
pinMode (ResPinky, indata);
ClosedThumb = analogRead(ResThumb);
ClosedIndex = analogRead(ResIndex);
ClosedMiddle = analogRead(ResMiddle);
ClosedAnnular = analogRead(ResAnnular);
ClosedPinky = analogRead(ResPinky);
}
void loop()
{
tumme = analogRead(ResThumb);
index = analogRead(ResIndex);
mittersta = analogRead(ResMiddle);
Ringformig = analogRead(ResAnnular);
Pinky = analogRead(ResPinky);
IF(thumb > OpenedThumb) / / kalibrering läsa och ställa in de maximala värdena. Detta måste du helt öppna handen några gånger
OpenedThumb = tumme;
IF(index > OpenedIndex)
OpenedIndex = index.
IF(Middle > OpenedMiddle)
OpenedMiddle = mitten;
IF(Annular > OpenedAnnular)
OpenedAnnular = ringformig;
IF(Pinky > OpenedPinky)
OpenedPinky = pinky;
IF(thumb < ClosedThumb) / / kalibrering läsa och ställa in lägsta värden. Detta behöver du att helt stänga handen några gånger
ClosedThumb = tumme;
IF(index < ClosedIndex)
ClosedIndex = index.
IF(Middle < ClosedMiddle)
ClosedMiddle = mitten;
IF(Annular < ClosedAnnular)
ClosedAnnular = ringformig;
IF(Pinky < ClosedPinky)
ClosedPinky = pinky;
tumme = karta (tumme, ClosedThumb, OpenedThumb, 0,180); Den analoga läsa måste vara mystiken i värden mellan 0 och 180 ska användas av servomotorer.
index = karta (index, ClosedIndex, OpenedIndex, 0,180). Lägsta och högsta värdena från kalibreringarna används korrekt ange den analoga läser.
mittersta = karta (mitten, ClosedMiddle, OpenedMiddle, 0,180);
Ringformig = map(annular,ClosedAnnular,OpenedAnnular,0,180);
Pinky = karta (pinky, ClosedPinky, OpenedPinky, 0,180);
Serial.write("<"); Detta tecken representerar början av paketet med de fem värdena
Serial.write(thumb); Värdena som skickas via Tx PIN-koden (den digitala pin 1)
Serial.write(index);
Serial.write(Middle);
Serial.write(Annular);
Serial.write(Pinky);
Delay(30);
}