Fuente:
https://www.luisllamas.es/controlar-un-servo-con-arduino/
Fuente:
https://programarfacil.com/tutoriales/fragmentos/servomotor-con-arduino/
¿Qué es un servo?
|
Servomotor |
Normalmente los motores habituales lo que hacen es transformar la energía eléctrica en un giro continuo que podemos usar para desarrollar trabajo mecánico.
Los servos son también motores de corriente continua, pero en lugar de diseñarse para obtener un giro continuo que podamos aprovechar ( para mover una rueda por ejemplo), se diseñan para que se muevan un ángulo fijo en respuesta a una señal de control, y se mantengan fijos en esa posición.
Estos servomotores son muy frecuentes en Aeromodelismo y en robótica, por la capacidad que presentan para moverse a un ángulo concreto y mantenerse allí. De hecho se suelen diseñar para que giren un ángulo proporcional a una señal PWM, de forma que su control es muy preciso.
Típicamente los servos disponen de un rango de movimiento de entre 0 a 180º. Es decir, no son capaces de dar la vuelta por completo (de hecho disponen de topes internos que limitan el rango de movimiento).
Existen modelos comerciales de todas la características imaginable. El modelo que vamos a utilizar en clase es el SG90, a continuación se describe dicho servomotor.
SG 90
Es el servo de tamaño "pequeño" estándar dentro de los proyectos de
electrónica. Es un servo pequeño, ligero, y barato, que dispone de
engranajes de plástico. Muchos dispositivos, como torretas y partes de
robots, están diseñados para servos de este tamaño.
- Torque: 1.4 kg·cm
- Velocidad: 0.1 seg/60º (4.8V) y 0.08 seg/60º (6V)
- Dimensiones: 21.5 x 11.8 x 22.7mm
- Peso: 9g
- Precio: 1.20€
¿Cómo funciona un servo?
Internamente un servo frecuentemente consta de un mecanismo reductor, acoplado a un reductor para reducir la velocidad de giro, junto con la electrónica necesaria para controlar su posición.
Por tanto proporcionan un alto par y un alto grado de precisión. Por contra, las velocidades de giro son pequeñas frente a los motores de corriente continua.
La comunicación de la posición deseada se realiza mediante la
transmisión de un señal pulsada con periodo de 20ms. El ancho del pulso
determina la posición del servo.
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.
En general, en todos los modelos:
- 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º
Estos motores funcionan con una señal PWM, con
un pulso de trabajo entre 1 ms y 2 ms y con un periodo de 20 ms (50
Hz). ¿Qué quiere decir todo esto? Este dato nos indica la velocidad máxima
a la que podemos mover el servomotor con Arduino. Solo podremos cambiar
de posición cada 20 ms. Esto dependerá del tipo y marca de nuestro
servo.
Por tanto, variando la señal en microsegundos podemos disponer de una
precisión teórica de 0.18-0.36º, siempre que la mecánica del servo
acompañe.
Esquema de montaje
Conectar un servo a Arduino es sencillo. El servo dispone de tres cables, dos de alimentación (GND y Vcc) y uno de señal (Sig).
El color de estos cables suele tener dos combinaciones:
- Marrón (GND), Rojo (Vcc) y Naranja (Sig)
- Negro (GND), Rojo (Vcc) y Blanco (Sig)
Por un lado, alimentamos el servo mediante el terminal GND ( Marrón / Negro) y Vcc (Rojo).
En general, la alimentación a los servos se realizará
desde una fuente de tensión externa (una batería o fuente de
alimentación) a una tensión de 5V-6.5V, siendo 6V la tensión idónea.
Arduino puede llegar a proporcionar corriente suficiente para encender
un servo pequeño (SG90), suficiente para hacer unos cuantos proyectos
de prueba.
Sin embargo no dispone de corriente
suficiente para actuar un servo grande (MG996R). Incluso varios servos
pequeños, o hacer excesiva fuerza con ellos puede exceder la capacidad
de corriente de Arduino, provocando su reinicio.
Por otro lado, finalmente, para el control conectamos el cable de señal (naranja / blanco) a cualquier pin digital de Arduino.
Ejemplos de código
El control de servos en Arduino es muy sencillo, ya
que el IDE Standard proporciona la librería "servo.h", que permite
controlar simultáneamente hasta 12 servos en Arduino Uno/Nano. Para incorporar la librería tenemos que ir a Programa/Include Library/Servo.
De la librería Servo.h hemos declarado un objeto o variable servoMotor y hacemos uso de dos métodos. Por un lado el attach, que nos permite indicar en que pin tenemos conectado nuestro servo, y por otro lado el write, donde indicamos en qué ángulo queremos posicionar nuestro servomotor.
Entre los ejemplos
típicos para ilustrar el funcionamiento de servos tenemos el Sketch
"Sweep", que realiza un barrido continuo con el servo.
Leer más..