Asómate a la ventana, servo
Es algo más sencillo pero que igual a alguien le viene bien. Bueno, sencillo sencillo… lo voy a hacer sencillo 😉
Una vez te hablé de lo que son los motores paso a paso. A mi personalmente me gustan mucho porque tienes mucho control del movimiento contando los pasos que da el motor. Pero nunca he hablado de los servos y eso que se utilizan mucho entre los novatillos… Así que allá voy, ¿Te vienes? (Aunque sea a hacerme compañía…)
Qué es eso de los servos…
Los servos son motores eléctricos. Están los paso a paso que ya conoces pero también están los continuos. Simplemente son esos que al alimentarlos van girando continuamente, sin pasos ni nada, simplemente se mueven.
Los servos son un poco distintos, son como los continuos pero se mueven siguiendo un ángulo. Al darle un ángulo, el motor se mueve esos ángulos y para. No sé si sabes como van los ángulos pero una circunferencia tiene 360 grados.
La circunferencia ocupa todo el espectro, ocupa todo el espacio, es una vuelta completa. Entonces si quieres media vuelta moverás 180º, si quieres un cuarto solamente 90º y si quieres cuarto y mitad (tres cuartos de vuelta) utilizarás 270º. El “problema” de los servos es que solamente pueden moverse entre 0º y 180º por lo que eso de moverse cuarto y mitad va a estar complicado. Aunque hay servos raros que pueden moverse los 360º.
Solamente podrás moverte hasta la mitad, pero puede ser muy interesante para ciertos proyectos como una barrera de párking en miniatura 😉 . La parte positiva de estos servos es que son muy precisos al moverse y tienen mucha fuerza (lo que llaman par los entendidos). ¿Qué pasa con esto? Que cuando un motor tiene mucha fuerza, el movimiento es lento. O al menos relativamente lento, puedes ver cómo se mueve en el siguiente vídeo:
Si te fijas en el movimiento, va de derecha al centro y de izquierda al centro. Son 180º pero están repartidos de manera que realmente el servo está en 90º y se mueve a 0º o a 180º. El servo del vídeo es el más típico. Seguramente porque es de los más baratos y de los que China crea como churros para el mundo entero…
El cableado
Los servos suelen disponer de tres cables. Uno de ellos es GND, el otro es el Vcc o el voltaje y el último es el de control. GND es 0 Voltios (Si eres un poco curioso expliqué el lío este de 0 Voltios aquí) y ahí no hay dudas.
Luego está Vcc que es la alimentación principal. Ésta pueden ser 5 Voltios o pueden ser 12 Voltios. Para saberlo necesitarás mirar el datasheet del servo que estés utilizando. Si utilizases el servo del vídeo, podrías mirar este datasheet. Ahí se explicita en la segunda hoja que su voltaje son 4.8 Voltios, casi 5 Voltios. Por lo que podrías utilizarlo con tu Arduino perfectamente (Aunque eso ya lo sabías si has visto el vídeo de ahí arriba…). Habría que tener en cuenta la corriente también, para estar seguros de que va a funcionar.
Ahora llego al punto peliagudo: la señal de control… La señal de control es una señal PWM. En el enlace que tienes ahí, puedes entender de qué va esto pero en general, se trata de un pulso. Esto es, que se enciende durante unos milisegundos (un tiempo muy corto) y luego se apaga esa señal hasta la siguiente vez que le toque. Este tiempo de pulso más la espera es el tiempo de ciclo.
Según la frecuencia la señal tiene un tiempo de ciclo u otro… pero eso ya es otro rollo. El ancho de pulso lo que va a hacer es que al final, la tensión que ves en valor medio (valor medio es en general, sin tener en cuenta los pulsos) sea mayor o menor. Ya que son 5 Voltios pero al apagarse durante un tiempo lo que mides con un multímetro (por ejemplo) es menor de 5 Voltios.
Esta diferencia de voltaje es lo que le permite al servo saber lo que quieres hacer. De hecho, según el ancho de pulso se moverá 0º o 90º.
Programando servos like a pro…
Y supongo que te has acojonado al pensar que debes de programar cada pulso con Arduino… Tranquilidad, los chicos de Arduino siempre están en todo. Existe una librería que hace los cálculos de ancho de pulso por ti. Que es una cosa de agradecer, la verdad.
Esta librería se llama Servo.h y simplemente hay que decirle en qué pin de Arduino vas a conectar la señal de control y decirle cuántos grados va a tener que moverse.
#include <Servo.h> Servo servorufianero; // Creamos el objeto servo void setup() { servorufianero.attach(11); // Ponemos el control en el pin 11 } void loop() { servorufianero.write(0); // Pongo el servo en 0 grados delay(15); servorufianero.write(180); // Pongo el servo en 180 grados delay(15); }
Como puedes ver he llamado a la librería Servo.h y he puesto el servo en el pin 11. Podría haberlo hecho en cualquiera de los que tienen la marca ~. Estos (en el Arduino Yún) son el pin 3, 5, 6, 9, 10 y 11 ya que son los que disponen de la capacidad de generar PWM. Una vez tengo ya todo conectado, lo que hago es simplemente decir a qué posición quiero que se mueva. Ahí lo que he hecho es decirle, ve a 0º, espera allí 15 segundos y vas a 180º. Vuelves a esperar y repite esto hasta que yo me aburra (ya que está dentro del loop).
Información básica sobre Proteción de datos
Responsable ➥ Sergio Luján Cuenca
Finalidad ➥ Gestionar el envío de correos electrónicos con artículos, noticias y publicidad. Todo relacionado con los temas de rufianenlared.com
Legitimación ➥ Consentimiento del interesado
Destinatarios ➥ Estos datos se comunicarán a MailRelay para gestionar el envío de los correos electrónicos
Derechos ➥ Acceder, rectificar y suprimir los datos, así como otros derechos, como se explica en la política de privacidad
Plazo de conservación de los datos ➥ Hasta que se solicite la supresión por parte del interesado
Información adicional ➥ Puedes encontrarla en la política de privacidad y el aviso legal
Y esto y esto se vende…
Así que, parece que no es tan complicado de mover. De hecho es más complicado el motor paso a paso que el servo ya que este último solamente tiene un cable de control y las órdenes son bien sencillas. Espero que te sea útil y no me tengas en cuenta lo de mi cansancio… digamos que los culpables entre otros son estos señores 😉
¡Nos vemos en los comentarios! 😉