Introducción a los servos.
Los servomotores tienen engranajes integrados y un eje que se puede controlar con precisión. Los engranajes estándares permite que el eje se situe en varios ángulos, por lo general entre 0 y 180 grados, aunque también hay de rotación continua como si fuese un motor paso a paso.. Estos últimos permiten la rotación del eje a diferentes velocidades. Son ampliamente utilizados en montajes relacionados con robótica.
Teniendo este presente ya podemos identificar dos tipos de servomotores: el servomotor de rotación de 360º y el 180º.
Un motor servo es un dispositivo actuador que tiene la capacidad de ubicarse en cualquier posición dentro de su rango de operación, y de mantenerse estable en dicha posición. Está formado por un motor de corriente continua, una caja reductora y un circuito de control, y su margen de funcionamiento generalmente es de menos de una vuelta completa.
![Los robots tienen varios ejes y servomotores](images/robots.png)
Los servomotores tienen tres ejes de conexiones: alimentación, masa y señal. El cable de alimentación suele ser rojo y se puede conectar el pin5 de alimentación de ARDUINO UNO o a una fuente de alimentación o pila. Y el cable de masa suele ser negro o marrón y se conectará al pin de masa (GND) de la placa Arduino. El cable de señal suele ser amarillo, naranja o blanco y se conectará a un puerto digital de la placa Arduino.
![Colores del cableado del servomotor](images/servo.jpg)
Los servomotores consumen bastante energía, por lo que si manejas uno o dos, probablemente tendrás que usar una fuente de alimentación externa.
El punto de referencia o setpoint, que es el valor de posición deseada para el motor, se indica mediante una señal de control cuadrada. El ancho de pulso de la señal indica el ángulo de posición: una señal con pulsos más anchos (es decir, de mayor duración) ubicará al motor en un ángulo mayor, y viceversa. En el caso del motor servo 360º el cambio del ancho del pulso reducirá la velocidad o cambiara el sentido de dirección de este.
Funcionamiento del servomotor.
Un servomotor está formado por un motor de corriente continua el cual acopla su eje a una serie de engranajes internos que reducen su velocidad y aumentan su par de torsión.
En los servomotores se suelen utilizar potenciómetros para controlar la posición del servo. Además incluyen internamente un controlador electrónico que se encarga del ajuste de posición.
![despiece de un servoMotor](images/conjunto.jpg)
Funcionamiento.Para el movimiento del eje de rotación se usa el modulador de pulsos digitales PWM mediante la transmisión de una señal cuadrada con un periodo de 20ms (mili segundos). Variando el periodo del pulso PWM, se varía la rotación del eje del servomotor.
![Dependiendo del pulso y su duración, el eje del servo se moverá más o menos.](images/giro_rotación.png)
La relación entre el ancho del pulso y el ángulo depende del modelo del motor. Por ejemplo, algunos modelos responden con 0º a un pulso de 500 ms, y otros a un pulso de 1000 ms. Por norma general, en todos los modelos existen relaciones como las siguientes:
● Un pulso entre 500-1000 us corresponde con 0º ● Un pulso de 1500 ms corresponde con 90º (punto neutro) ● Un pulso entre 2000-2500us corresponde con 180º
Por tanto, variando la señal en microsegundos podemos disponer de una precisión teórica de 0.18º-0.36º.
Librería necesaria SERVO.h.
Para el manejo del servo ARDUINO provee la librería Servo.h, la cual como toda librería se añadirá al principio del proyecto. Con esta librería crearemos un objeto de dicha librería para usarlo en el proyecto.
Al usar esta librería nos ahorraremos un montón de código de control ya que con pocas instrucciones podremos activar el servo y controlarlo correctamente.
Por ejemplo, si queremos mover el servo un cierto ángulo usaremos el siguiente sketch:
![Programa básico para controlar el servo](images/1.png)
El código es sencillito. Una vez incluida la librería Servo.h, se crea un nuevo objeto que identifico como servoMotor. En el Setup(), con el método attack() estoy indicando el puerto digital al que se va a conectar el servo. Y con el método write(), indicaré la posición inicial del servo, y que suele ser cero para no tener un desfase inicial (yo le he puesto 10 para empezar movido). Así cuando subas y sketch el eje se moverá hasta los grados designados por el programa.
![funcionamiento básico del servomotor con Arduino](images/giro.gif)
Con el método write() podemos escribir la posición que irá adoptando el servo que, como he mencionado antes, irá de 0º a 180º. Internamente el impulso de cero grados corresponde a un tiempo de 1,25ms, mientras que el impulso de 180º corresponde a un tiempo de 1,74ms.
La librería Servo.h permite manipular servos que se conecten al puerto digital 9 y 10 unicamente en ARDUINO UNO, por lo que si quieres controlar más servos deberías de tener la placa ARDUINO MEGA que dispone de buses internos y permiten conexiones push pull.
En la práctica de esta clase veremos algunos circuitos con los servos como por ejemplo como se puede mover un servo 180º de manera automática mediante un bucle for.