Paso 7: programación
Todos los archivos están en el sketchbook.zip.
Primero, aquí está el código para tus servos centrados. El problema que enfrentamos es conseguir que la posición del servo correcto. Tenga en cuenta que estos servos van de 0 a 180 grados.
Así en resumen que queremos fijar los servos a 90 y 90 para su en el centro de los servos "rango de movimiento". Entonces podemos establecer la Horizontal (eje x) y Vertical (eje y) límites. Para eso puede utilizar el eyes_servo_single_test cambio de horServo.write(); y vertServo.write();
[eyes_servo_single_test código]
#include < Servo.h >Servo horServo;
Servo vertServo;
void setup() {}
horServo.attach(8);
vertServo.attach(9);
}
void loop() {}
horServo.write(80);
vertServo.write(40);
}
[CÓDIGO DE FINAL]
Luego utilizaría eyes_full_servo_test enchufar otra vez sus valores altos y bajos para los servos así usted puede ver si tienes cualquier enlace. Construí en una tecla intermitente así que usted puede visualizar lo que paso tu sobre. Siempre puede pararlo a mitad de camino por el cable USB.
[eyes_full_servo_test código]
//==================Esta es una prueba de posición de servo rápido que hice para mi proyecto de ojo
Los servos se mueven de los postions sets para el eje X e Y
Uno conjuntos de que parpadean el LED alta 20 segundos, tiempo de pruebas.
Prueba dos establece los servos en posición 40,0 6,5 segundos, dos parpadeos.
Prueba tres establece los servos en posición 80,0 durante 7,5 segundos, tres parpadea.
Prueba cuatro establece los servos en posición 0,70 8,5 segundos, cuatro parpadeos.
Cinco conjuntos de pruebas los servos en posición 0,110 9,5 segundos, cinco parpadea.
NECESIDAD DE PULSAR RESET UNA VEZ COMPLETADA LA PRUEBA
#include < Servo.h > //servo biblioteca
Servo horServo; servo de eje x
Servo vertServo; asxis y servo
int led = 13;
void setup() {}
horServo.attach(8); pin de servo de eje x 8
vertServo.attach(9); perno de eje servo 9
pinMode (led, salida);
}
void loop() {}
//==================TEST ONE=============//
Servos en posición de descanso o centro.
horServo.write(80);
vertServo.write(40);
parpadear una vez
digitalWrite (led, alto);
Delay(20000);
digitalWrite (led, baja);
//============Test Two=================//
prueba dos parpadea dos veces
horServo.write(20); límite a la izquierda de x
vertServo.write(40);
parpadee dos veces
digitalWrite (led, alto);
Delay(500);
digitalWrite (led, baja);
Delay(500);
digitalWrite(led,HIGH);
Delay(500);
digitalWrite (led, baja);
Delay(5000);
//=================Test Three==================//
prueba tres parpadea veces tres
horServo.write(80); x tope derecho
vertServo.write(40);
parpadear tres veces
digitalWrite (led, alto);
Delay(500);
digitalWrite (led, baja);
Delay(500);
digitalWrite(led,HIGH);
Delay(500);
digitalWrite (led, baja);
Delay(500);
digitalWrite(led,HIGH);
Delay(500);
digitalWrite (led, baja);
Delay(5000);
//==================Test four==================//
Prueba cuatro parpadea cuatro veces
horServo.write(80);
vertServo.write(0); límite superior y
parpadea cuatro veces
digitalWrite (led, alto);
Delay(500);
digitalWrite (led, baja);
Delay(500);
digitalWrite(led,HIGH);
Delay(500);
digitalWrite (led, baja);
Delay(500);
digitalWrite(led,HIGH);
Delay(500);
digitalWrite (led, baja);
Delay(500);
digitalWrite(led,HIGH);
Delay(500);
digitalWrite (led, baja);
Delay(5000);
//=================Test Five===================//
Prueba cinco parpadea veces cinco
horServo.write(80);
vertServo.write(110); límite inferior de y
parpadea cinco veces
digitalWrite (led, alto);
Delay(500);
digitalWrite (led, baja);
Delay(500);
digitalWrite(led,HIGH);
Delay(500);
digitalWrite (led, baja);
Delay(500);
digitalWrite(led,HIGH);
Delay(500);
digitalWrite (led, baja);
Delay(500);
digitalWrite(led,HIGH);
Delay(500);
digitalWrite (led, baja);
Delay(500);
digitalWrite(led,HIGH);
Delay(500);
digitalWrite (led, baja);
Delay(5000);
//=====================END======================//
Servos de vuelta a reposo o centro. La prueba terminó golpe RESET o espere para siempre
horServo.write(80);
vertServo.write(40);
digitalWrite (led, alto);
{while(1)}
}
[CÓDIGO DE FINAL]
El código utiliza PI para mover los ojos en un radio. Necesita asegurarse de que tiene tus servos en el pin 8 y 9 o cambiar en el código. Una vez que estés seguro que tienes todo correctamente puede fijar los conectores EZ en su lugar.
[eyes_sketch código]
#include < math.h >
#define pi 3.14159265358979323846
#define twopi (2 * pi)
Float circleradius = 50; 50 de cada lado - no hacer más cualquiera de los valores de límite máximo
Float stepnumber = 360;
Float stepangle;
#include < Servo.h > //include biblioteca de servo para control de servo
Servo horServo; servo para el movimiento de izquierda/derecha
Servo vertServo; servo para el movimiento de arriba/abajo
randomhor de bytes; definir variable aleatoria posición horizontal
randomvert de bytes; definir variable aleatoria posición vertical
int randomdelay; definir variable aleatorio de espera
#define HLEFTLIMIT 40 //define límite izquierdo en horizontal (izquierda/derecha) servo
#define HRIGHTLIMIT 80 //define tope derecho en horizontal (izquierda/derecha) servo
#define VTOPLIMIT 70 / / define el límite superior en vertical (arriba/abajo) servo
#define VBOTLIMIT 110 //define límite inferior horizontal (arriba/abajo) servo
void setup()
{
horServo.attach(8); horizontal servo en el pin 8
vertServo.attach(9); vertical servo en el pin 9
randomSeed(analogRead(0)); Crear algunos valores aleatorios usando un pin analógico
stepangle = twopi/stepnumber;
para (int i = 0; i < stepnumber; i ++) {}
ángulo de flotador = i * stepangle;
Float x = pecado (ángulo) * circleradius;
Float y = cos (ángulo) * circleradius;
x = mapa (x, 1-circleradius, circleradius, 0, 2 * circleradius);
y = mapa (y, 1 circleradius, circleradius, 0, 2 * circleradius);
horServo.write(x); escribir en el servo horizontal
vertServo.write(y); escribir en el servo horizontal
Delay(10);
}
}
void loop()
{
randomhor = random (HLEFTLIMIT, HRIGHTLIMIT); establecer límites de
randomvert = random (VTOPLIMIT, VBOTLIMIT); establecer límites de
randomdelay = random(1000, 4000); mueve cada 1 a 4 segundos
horServo.write(randomhor); escribir en el servo horizontal
vertServo.write(randomvert); escribir en el servo vertical
Delay(randomdelay); retrasar una cantidad aleatoria de tiempo (dentro de los valores por encima de)
}
[Código de final]