Niños PuppyDuino 0,31 (2 / 7 paso)

Paso 2: Vamos a mover algunos cola - control de motor Servo

¿Qué es un servo?

El motor de servo estándar hobby no va redondo y redondo. En su lugar va hacia adelante y hacia atrás que es perfecto para aviones de radio controlada manejo y meneando las colas de perro robótico. El fin del negocio de un servo es más como un pequeño brazo eléctrico que puede colocarse rápidamente y con precisión a través de unos 180 grados. Puede que necesite comprobar la especificación de su servo en el paquete o una hoja de datos del fabricante, para determinar hasta qué punto vuestra gira.

Gracias a la biblioteca de Servo en el IDE de Arduino no tenemos que entender cómo funciona internamente, basta decir el servo cuántos grados para girar y obedece. Dile tu servo para ir a 0 y se coloque el brazo hasta las agujas del reloj como puede girar. Si nos dice 180 el brazo mueve 180 grados hacia la izquierda de cero. Si lo decimos es 135 posición el brazo 135 grados hacia la izquierda de cero. Todas las medidas están a la izquierda del cero.

OK - vamos a experimentar!

Cinta el motor servo a la superficie de trabajo con el engranaje estriado apuntando hacia arriba. Deslice uno de los brazos poco sobre la marcha. Conectarlo a Arduino como se muestra en el diagrama. Rojo a 5V, negro (o marrón) a la tierra y el cable restante (generalmente blanco o naranja), al pin 9.

Subir el código a tu Arduino y verlo ir. Trate de cambiar los números en el programa a ver que pasa. NO no exceda la máxima rotación de su SERVO - 0 a 180 es generalmente seguro.

tailTest1.ino

 /*tailTest1.ino your servo needs to connect to 5V to red wire, ground black wire pin 9 to control wire (white, yellow or orange) */ #include <Servo.h> // this imports the Servo library Servo servo; //create Servo void setup() { servo.attach(9); //control wire attaches to pin 9 } void loop() { // just some random moves to show servo working servo.write(0); delay(1000); servo.write(180); delay(1000); servo.write(135); delay(1000); servo.write(180); delay(1000); servo.write(135); delay(1000); servo.write(180); delay(1000); servo.write(135); delay(1000); servo.write(45); delay(1000); servo.write(0); delay(1000); } 

Movimiento suave

Si has visto el brazo del servo mueva hacia atrás y hacia adelante varias veces luego volver a la posición cero (una y otra vez). Cool, pero de una wag desigual incluso para un perro robot. Vamos a suavizar menean hacia fuera un poco girando 1 grado a la vez con una pequeña pausa 10 milisegundos entre movimientos.

tailTest2.ino

 /*tailTest2.ino your servo needs to connect to 5V to red wire, ground black wire pin 9 to control wire (or PWM pin of your choice) */ #include <Servo.h> //this imports the Servo library Servo servo; //create a Servo int i; //counting variable int right = 135; //right extent of wag int left = 180; //left extent of wag void setup() { servo.attach(9); } void loop() { // sweep right to left one degree at at time for(i = right; i<=left; i++) { servo.write(i); delay(10); } // sweep left to right one degree at at time for(i = left; i >= right; i--) { servo.write(i); delay(10); } } 

¡ BINGO! Ahora tenemos un suave meneo que dice perro feliz.

Escuela de obediencia

OK, ahora que PuppyDuino sabe como menear su cola vamos a entrenar a wag en comando. Te agregamos el circuito botón opcional que se muestra en el diagrama y subir el dibujo a continuación. La cola debe menear cuando el botón se presiona y que aún cuando no se presiona. (Si nosotros podemos hacer su wag en respuesta a una pulsación de botón que somos un salto, salto y un salto de corta distancia haciendo su wag en respuesta a un sensor de caricias.)

tailTest3.ino

 /*tailTest3.ino your servo needs to connect to 5V to red wire, ground black wire pin 9 to control wire servo tail wags only when button pressed */ #include <Servo.h> //this imports the Servo library Servo servo; //create a Servo int i; //counting variable int right = 135; //right extent of wag int left = 180; //left extent of wag int button = 8; //button input on pin 8 void setup() { servo.attach(9); pinMode(button,INPUT_PULLUP); //HIGH unless grounded } void loop() { // check if button pressed (if pin goes LOW) if(digitalRead(button) == LOW) { // sweep right to left one degree at at time for(i = right; i <= left; i++) { servo.write(i); delay(10); } // sweep left to right one degree at at time for(i = left; i >= right; i--) { servo.write(i); delay(10); } } delay(300); } 

OK - vamos a quitar ese circuito de botón. Hemos terminado con él.

Artículos Relacionados