INDICE
- Ordenadores
- Arduino
- Cómo crear movimientos de barrido con el Arduino
Libro Relacionado
Arduino Para Dummies
Por John Nussey
Puedes crear movimientos de barrido en un servomotor con el Arduino. Un servomotor barre de 0º a 179º y luego de nuevo, de forma similar al movimiento de un viejo reloj rotativo.
El boceto del barrido
Necesitas:
- Un Arduino Uno
- Un servo
- Alambres de salto
El cableado para un servo es extremadamente simple porque viene con un enchufe de tres clavijas. Para conectarlo a tu Arduino, simplemente usa cables de salto entre los pines de Arduino y los sockets de los servos directamente o usa un conjunto de pines de encabezado para conectar el socket a tu protoboard. El servo tiene un juego de tres enchufes con cables conectados a ellos, generalmente rojos, negros y blancos.
Todos los cálculos y lecturas para mover el motor se hacen en el circuito dentro del propio servo, así que todo lo que se necesita es potencia y una señal del Arduino. El rojo está conectado a 5V en el Arduino para alimentar el motor y el circuito dentro de él; el negro está conectado a GND para conectar a tierra el servo; y el blanco está conectado al pin 9 para controlar el movimiento del servos.
Los colores de estos cables pueden variar, así que siempre revise la hoja de datos o cualquier documentación disponible para su motor específico. Otros colores comunes son el rojo (5V), el marrón (GND) y el amarillo (señal).
Complete el circuito como se describe y abra el sketch de barrido seleccionando File→Examples→Servo→Sweep. El boceto del barrido es el siguiente:
// Este código de ejemplo está en el dominio público.#include <Servo.h>Servo myservo; // create servo object to control a servo // a maximum of eight servo objects can be createdint pos = 0; // variable to store the servo positionvoid setup(){ myservo.attach(9); // conecta el servo en el pin 9 al bucle del servo objeto}void loop(){ for(pos = 0; pos < 180; pos += 1) // va de 0 grados a 180 grados { // en pasos de 1 grado myservo.write(pos); // tell servo to go to position in // variable `pos' delay(15); // espera 15ms para que el servo alcance // la posición } for(pos = 180; pos>=1; pos-=1) // va de 180 grados a 0 grados { myservo.write(pos); // tell servo to go to position in // variable `pos' delay(15); // espera 15ms para que el servo alcance // la posición }}}.
Una vez que haya encontrado el sketch, pulse el botón Compilar para comprobar el código. El compilador debe, como siempre, resaltar cualquier error gramatical en rojo en el área de mensajes cuando se descubren.
Si el sketch se compila correctamente, haga clic en Cargar para cargar el sketch a su foro. Cuando el sketch haya terminado de subir, su motor debe empezar a girar hacia atrás y hacia adelante a través de 180 grados, haciendo un baile sobre la mesa.
Si no pasa nada, debe volver a comprobar el cableado:
- Asegúrese de que está utilizando el pin 9 para la línea de datos (blanco/amarillo).
- Comprueba que tienes los otros servo cables conectados a los pines correctos.
El desglose del boceto del barrido
Al principio de este sketch se incluye una biblioteca. Esta es la biblioteca de servos y te ayudará a sacar mucho provecho de tu servo con muy poco código complejo.
#include <Servo.h>
La siguiente línea hace un objeto servo. La biblioteca sabe cómo usar los servos pero necesita que le des a cada uno un nombre para que pueda hablar con cada servo. En este caso, el nuevo objeto Servo se llama myservo.
Usar un nombre es similar a nombrar tus variables; es decir, pueden ser cualquier nombre siempre y cuando sean consistentes en todo tu código y no uses ningún nombre que esté reservado por el lenguaje Arduino, como int o delay.
Servo myservo; // crear un objeto servo para controlar un servo // se pueden crear un máximo de ocho objetos servo
La última línea de las declaraciones es una variable para almacenar la posición del servo.
int pos = 0; // variable para almacenar la posición del servo
En la configuración, el único elemento a configurar es el número de pin del pin de Arduino que se está comunicando con el servo. En este caso, está usando el pin 9, pero podría ser cualquier pin PWM.
void setup(){ myservo.attach(9); // conecta el servo en el pin 9 al objeto servo}
El bucle realiza dos acciones simples, y ambas son para bucles. El primero para el bucle aumenta gradualmente la variable pos de 0 a 180. Debido a la biblioteca, puede escribir valores en grados en lugar de los valores normales de 0 a 255 utilizados para el control PWM. Con cada bucle, el valor se incrementa en 1 y se envía al servo utilizando una función específica de la biblioteca de servo,
Después de que el bucle actualiza el valor, se produce un pequeño retardo de 15 milisegundos mientras el servo alcanza su nueva ubicación. A diferencia de otras salidas, después de que un servo es actualizado, comienza a moverse a su nueva posición en lugar de necesitar que se le diga constantemente.
void loop(){ for(pos = 0; pos < 180; pos += 1) // va de 0 grados a 180 grados { // en pasos de 1 grado myservo.write(pos); // dile al servo que vaya a la posición en // variable `pos' delay(15); // espera 15ms para que el servo alcance // la posición }.
El segundo para el lazo hace lo mismo en la dirección opuesta, devolviendo el servo a su posición inicial.
for(pos = 180; pos>=1; pos-=1) // va de 180 grados a 0 grados { myservo.write(pos); // decirle al servo que vaya a la posición en // variable `pos' delay(15); // espera 15ms para que el servo alcance // la posición }}.
Este es el ejemplo más simple de servo, y es una buena idea probar si el servo está funcionando correctamente.