Está en la página 1de 8

Módulo - SERVOMOTOR

Un servo es un tipo de accionador o actuador ampliamente empleado en electrónica. A


diferencia de otros tipos de motores en los que controlamos la velocidad de giro, en un
servo indicamos directamente el ángulo deseado y el servo se encarga de posicionares en
este ángulo.
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)
Internamente un servo frecuentemente consta de un mecanismo reductor. Por tanto,
proporcionan un alto par y un alto grado de precisión (incluso décimas de grado). Por
contra, las velocidades de giro son pequeñas frente a los motores de corriente continua.
Los servos se admiten una tensión de alimentación entre 4,8V a 7,2V, siendo el valor más
adecuado es 6V. Con tensiones inferiores el motor tiene menos fuerza y velocidad. Con
tensiones superiores a 6,5V los servos empiezan a oscilar demasiado, lo cual los hace poco
útiles.
Los servos son cómodos de emplear, ya que ellos mismos realizan el control de posición,
que con otro tipo de motores debe hacerse de forma externa. Por este motivos son
ampliamente empleados en proyectos de robótica, como brazos robóticos, robots con
patas, controlar el giro de torretas, u orientar sensores como sensores de ultrasonidos o
sensores de temperatura a distancia.
Tipos
SG90
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 instalar 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

MG90S

El MG90S es similar al SG90 pero


dispone de engranajes y el
acoplamiento metálicos. A cambio pesa
un poco más y es más caro. Físicamente
es compatible con los accesorios del
SG90.
Usaremos este servo como sustituto del
SG90 cuando tengamos una aplicación
en la que realmente necesitemos ejercer
fuerza, y las partes de plástico podrían
ceder y quedarse “redondas”.
Torque: 1.8 Kg·cm
Velocidad: 0.1 seg/60º (4.8V) y 0.08 seg/60º (6V)
Dimensiones: 22.8 x 12.2 x 28.5mm
Peso: 13.4g
M996R
Este es el servo de tamaño “grande” que
usaremos frecuentemente. Este tipo de servos es
ampliamente utilizado en proyectos de robótica.
Igual que con el SG90, muchos dispositivos y kits
como brazos robóticos, hexápodos, están
diseñados para instalar este tamaño de servo.
Torque: 13kg·cm (4.8V) a 15kg·cm (6V)
Velocidad: 0.17 seg/60º (4.8V) y 0.13 seg/60º (6V)
Dimensiones: 40 x 19 x 43mm
Peso: 56g

¿CÓMO FUNCIONA UN SERVO?


Internamente un servo está constituido por un motor de corriente continua, acoplado a un
reductor para reducir la velocidad de giro, junto con la electrónica necesaria para controlar
su posición.

Frecuentemente simplemente se dispone de un potenciómetro unido al eje del servo, que


permite al servo para conocer la posición del eje. Esta información es tratada por un
controlador integrado que se encarga de ajustar actuar sobre el motor para alcanzar la
posición deseada.
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º
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.

Conexión Eléctrica Conexión al Arduino


El código para girar el motor de 0º a 180º
Esta acción ya nos ha hecho un include en nuestro código que nos permite controlar el
servo. A continuación, un código básico para posicionar el servo en los ángulos 0º, 90º y
180º.

// Incluímos la librería para poder controlar el servo


#include <Servo.h>
// Declaramos la variable para controlar el servo
Servo servoMotor;

void setup() {
// Iniciamos el monitor serie para mostrar el resultado
Serial.begin(9600);
// Iniciamos el servo para que empiece a trabajar con el pin 9
servoMotor.attach(9);
}

void loop() {
// Desplazamos a la posición 0º
servoMotor.write(0);
// Esperamos 1 segundo
delay(1000);
// Desplazamos a la posición 90º
servoMotor.write(90);
// Esperamos 1 segundo
delay(1000);
// Desplazamos a la posición 180º
servoMotor.write(180);
// Esperamos 1 segundo delay(1000);
}
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.

Girando grado a grado el servomotor


Vamos a realizar otro ejemplo un poco más complicado, en este caso queremos que el servo
haga un barrido desde el 0 al 180º y luego en sentido contrario. Vamos a utilizar los mismos
métodos pero incorporamos dos bucles for, uno para cada sentido.

// Incluímos la librería para poder controlar el servo


#include <Servo.h>
// Declaramos la variable para controlar el servo
Servo servoMotor;
void setup() {
// Iniciamos el monitor serie para mostrar el resultado
Serial.begin(9600);

// Iniciamos el servo para que empiece a trabajar con el pin 9 servoMotor.attach(9);


// Inicializamos al ángulo 0 el servomotor servoMotor.write(0);
}
void loop() {
// Vamos a tener dos bucles uno para mover en sentido positivo y otro en sentido negativo
// Para el sentido positivo
for (int i = 0; i <= 180; i++)
{
// Desplazamos al ángulo correspondiente
servoMotor.write(i);
// Hacemos una pausa de 25ms
delay(25);
}
// Para el sentido negativo
for (int i = 179; i > 0; i--)
{
// Desplazamos al ángulo correspondiente
servoMotor.write(i);
// Hacemos una pausa de 25ms
delay(25);
}
}

Practica
 Por cada grado en incremento de 30º, se debe encender un color diferente del led
RGB
 A medida que los ángulos del servomotor se incrementan de 10 en 10… muestre el
número de la decena en la cual esta, hasta llegar a 90.

También podría gustarte