Los Servomotores (normalmente también son llamados Servos o Servo) son actuadores lineales que permiten el control preciso que permite el control preciso angular y de posición. Son muy utilizados Robótica, máquinas CNC, cámaras, y demás aplicaciones de ingeniería que requieren un motor con movimientos precisos y repetidos.
En este proyecto nos concentramos en el Servomotor SG90. Se explicará el funcionamiento básico, cómo está compuesto y un código de Arduino de ejemplo para comenzar a usar este servomotor.
Dificultad: Baja
Funcionamiento básico de un Servomotor
Típicamente un servomotor está compuesto de 4 partes:
Un motor de corriente continua, un sistema de engranajes de reducción, un potenciómetro y un circuito de control.
El potenciómetro actúa como sensor de posicionamiento. De esta forma los servomotores pueden ser controlados de forma muy precisa. En el caso del SG90, se debe enviar una señal específica para indicar en qué posición se desea colocar el eje del servo.
La desventaja de los servomotores es que están limitados a un rango de rotación, típicamente entre 0º a 180º.
Características del servomotor SG90
El SG90 es un servomotor muy popular por ser de bajo costo, dimensiones pequeñas y fácil de utilizar e implementar en diferentes proyectos hobbistas y de experimentación.
Algunas características técnicas de este servomotor:
- Rango de rotación (aproximado) de 180º.
- Fuerza de torque 1.8 kgf·cm
- Dimensiones : 22.2 x 11.8 x 31 mm approx.
- Voltaje de operación 5v corriente continua.
Podemos encontrar más información técnica acerca de este servomotor en la hoja técnica.
Pinout de SG90
Las conexiones de este servo motor son muy sencillas ya que el mismo solo tiene 3 cables:
1- Cable anaranjado: Señal.
2- Cable rojo: 5V (positivo) corriente continua.
3- Cable marrón: GND (negativo) corriente continua.
Conectar SG90 a Arduino UNO
En esta ilustración podemos ver el diagrama de conexiones:
Como dijimos anteriormente, las conexiones son muy sencillas. Primero debemos conectar el cable Marrón del servomotor un pin GND del Arduino UNO, luego conectar el cable Rojo del servomotor al pin 5V del arduino UNO y por último conectar el cable Anaranjado del servomotor al Pin 3 del arduino UNO.
El pin seleccionado para la señal del servomotor puede ser cualquier pin del Arduino que sea PWM, ya que necesitaremos esa función para controlarlo.
En este caso podremos conectar el servomotor directamente a Arduino debido a su bajo consumo de corriente, pero en el caso de utilizar más de un servomotor, puede que sea necesario tener una fuente de alimentación aparte para los servomotores.
Código Arduino
Para crear el código arduino usaremos la librería Servo.h. Esta librería ya viene incluida en el software Arduino IDE y nos facilitará la codificación para el control del servomotor.
En este primer código de ejemplo, el servomotor realizará un loop o ciclo infinito que realiza lo siguiente:
- Primero, rotar eje a 0 grados para determinar el punto de partida del motor.
Ciclo infinito:
- Rotar a 90 grados en aproximadamente 3 segundos, esperar 5 segundos.
- Rotar a 180 grados en aproximadamente 3 segundos, esperar 5 segundos.
- Rotar de vuelta a 90 grados en 3 segundos, esperar 5 segundos.
- Rotar de vuelta a 0 grados en 3 segundos, esperar 5 segundos.
#include <Servo.h>
Servo servo_1; // crear un servo_1, pueden hacer multiples servos
int servo_pin = 3; // Colocar el pin PWM de control
int pos = 0; // variable para posicion de servo, incia en 0
void setup() {
servo_1.attach(servo_pin); // Iniciar control de servo
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // Ir de 0 grados a 180 grados en pasos de 1 grado
servo_1.write(pos); // Decir al servo que avance a la posicion de la variable “pos”
delay(15); // Esperar 15 milisegundos para alcanzar la posicion deseada
if (pos==90){
delay(5000); //Esperar 5 segundos una vez que llegue a 90 grados
}
}
delay(5000); // Esperar 5 segundos una vez que llegue a 180 grados
for (pos = 180; pos >= 0; pos -= 1) { // ir de 180 grados a 0 grados
servo_1.write(pos); // Decir al servo que avance a la posicion de la variable “pos”
delay(15);
if (pos==90){
delay(5000); //Esperar 5 segundos una vez que llegue a 90 grados
}
}
delay(5000); // Esperar 5 segundos luego de llegar a 0 grados
}
Copiar y pegar este código en el Arduino IDE y subir el código al Arduino UNO. Una vez que se subió el código, el servomotor debería comenzar a realizar el ciclo infinito descrito anteriormente.
¡Listo! Con esta introducción y ejemplo del SG90 podemos implementar este servomotor a diferentes proyectos como un brazo robótico, un sistema de dirección de un auto control remoto, un dron y muchos proyectos más.