Paso 3: El programa
La mano robótica
(Arduino):
#include
Servo
ServoThumb, ServoIndex,
ServoMiddle, ServoAnnular, ServoPinky;
startPackage de bytes;
int pulgar = 0;
int Index = 0;
int medio = 0;
int anular = 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 ("listo para recibir.");
}
void loop()
{
{if(serial.Available())}
startPackage = Serial.read();
Pulgar = Serial.read();
Índice = Serial.read();
Media = Serial.read();
Anular = Serial.read();
Meñique = Serial.read();
Si (startPackage == ' <') {}
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);
}
Para los guantes de sensor flex
(lilypad arduino):
int ResThumb = A4; Variables de la forma de lectura analógica los flex de sensores conexión a las clavijas analógicas del Arduino LilyPad
int ResIndex = A3;
int ResMiddle = A2;
int ResAnnular = A1;
int ResPinky = A0;
int OpenedThumb = 0; Variables de los valores cuando la mano se abre completamente
int OpenedIndex = 0; Esto es necesario para una calibración continua
int OpenedMiddle = 0;
int OpenedAnnular = 0;
int OpenedPinky = 0;
int ClosedThumb; Variables de los valores de la mano completamente cerrada
int ClosedIndex; No podemos ponerlo a cero desde que alcanza el valor mínimo
int ClosedMiddle; en la analógica no leer nunca llega a cero. Asignaremos el valor de
int ClosedAnnular; un análogo de la primera lectura, entonces el programa en el circuito
int ClosedPinky; automáticamente los valores más bajos de assing
pulgar de int = 0; Variables de los valores para enviar
Índice de int = 0;
int medio = 0;
anular de int = 0;
pinky de int = 0;
void setup()
{
Serial.Begin(9600); Activar comunicación serial, XBee serie 1 están pre-programados a 9600 baudios/s
pinMode (ResThumb, entrada); Las variables del sensor se establecen como entrada
pinMode (ResIndex, entrada);
pinMode (ResMiddle, entrada);
pinMode (ResAnnular, entrada);
pinMode (ResPinky, entrada);
ClosedThumb = analogRead(ResThumb);
ClosedIndex = analogRead(ResIndex);
ClosedMiddle = analogRead(ResMiddle);
ClosedAnnular = analogRead(ResAnnular);
ClosedPinky = analogRead(ResPinky);
}
void loop()
{
pulgar = analogRead(ResThumb);
Índice = analogRead(ResIndex);
media = analogRead(ResMiddle);
anular = analogRead(ResAnnular);
meñique = analogRead(ResPinky);
if(Thumb > OpenedThumb) / / calibración lectura y ajuste de los valores máximos. Esto debe abrir completamente su mano varias veces
OpenedThumb = pulgar;
if(index > OpenedIndex)
OpenedIndex = índice;
if(Middle > OpenedMiddle)
OpenedMiddle = medio;
if(Annular > OpenedAnnular)
OpenedAnnular = anular;
if(Pinky > OpenedPinky)
OpenedPinky = pinky;
if(Thumb < ClosedThumb) / / calibración de la lectura y establecer los valores mínimos. Hay que cerrar la mano unas cuantas veces
ClosedThumb = pulgar;
if(index < ClosedIndex)
ClosedIndex = índice;
if(Middle < ClosedMiddle)
ClosedMiddle = medio;
if(Annular < ClosedAnnular)
ClosedAnnular = anular;
if(Pinky < ClosedPinky)
ClosedPinky = pinky;
pulgar = mapa (pulgar, ClosedThumb, OpenedThumb, 0,180); El análogo leer tiene que ser readaptado en valores entre 0 y 180 para ser utilizado por los servomotores.
Índice = mapa (índice, ClosedIndex, OpenedIndex, 0,180); Los valores mínimos y máximos de las calibraciones se utilizan para establecer correctamente la lectura analógica.
media = mapa (centro, ClosedMiddle, OpenedMiddle, 0,180);
anular = map(annular,ClosedAnnular,OpenedAnnular,0,180);
meñique = mapa (pinky, ClosedPinky, OpenedPinky, 0,180);
Serial.Write("<"); Este personaje representa el inicio del paquete de los cinco valores
Serial.Write(Thumb); Los valores se envían vía el pin Tx (el pin digital 1)
Serial.Write(index);
Serial.Write(Middle);
Serial.Write(Annular);
Serial.Write(Pinky);
Delay(30);
}