Control de Motor Servo: Una Guía Completa
Aprendizajes clave:
Control de Motor Servo Definido: El control de motor servo permite una manipulación precisa de la posición, velocidad y aceleración del motor a través de señales electrónicas.
Mecanismo de Retroalimentación: El sistema de retroalimentación, que suele ser un potenciómetro o un codificador, asegura que la salida del motor coincida con precisión con la entrada de control.
Señal PWM: La modulación por ancho de pulso (PWM) es crucial para establecer la posición del servo variando la duración de los pulsos eléctricos.
Arduino y Motores Servo: Usar una placa Arduino es una forma popular y efectiva de programar y controlar motores servo con un montaje de hardware mínimo.
Aplicaciones de Motores Servo: Los motores servo son esenciales para proyectos que requieren un control posicional preciso, como robótica y sistemas automatizados.
Un motor servo es un motor diseñado para una alta precisión y exactitud en la rotación. Se diferencia de un motor DC típico por su capacidad para mantener una posición específica en lugar de girar continuamente. Esta característica hace que los motores servo sean ideales para robótica, automatización y proyectos de afición.
Este artículo explica cómo funciona el control de motor servo, los diferentes tipos de motores servo y varios métodos y dispositivos de control. También proporciona ejemplos de aplicaciones y proyectos de motores servo.
¿Qué es un Motor Servo?
Un motor servo se define como un actuador que permite un control preciso de la posición (ángulo), velocidad y aceleración. Un motor servo típico consta de tres componentes principales: un motor DC, un circuito de control y un dispositivo de retroalimentación.
El motor DC alimenta el servo y se conecta a engranajes que reducen la velocidad e incrementan el par en el eje de salida.

El eje de salida es la parte del servo que gira y mueve la carga.
El circuito de control es responsable de recibir y procesar las señales de entrada de un controlador externo. Estas señales indican al servo qué posición, velocidad o dirección debe moverse. El circuito de control también envía energía al motor DC para impulsarlo.
El dispositivo de retroalimentación suele ser un potenciómetro o un codificador que mide la posición actual del eje de salida.

El dispositivo de retroalimentación transmite los datos de posición de vuelta al circuito de control, que luego ajusta la potencia del motor DC para alinear la posición real con la posición deseada de la señal de entrada.
El bucle de retroalimentación entre el circuito de control y el dispositivo de retroalimentación asegura que el servo pueda moverse y mantener cualquier posición dentro de su rango de movimiento con precisión.
¿Cómo Controlar un Motor Servo?
Los motores servo se controlan enviando una señal PWM (modulación por ancho de pulso) a la línea de señal del servo. La PWM es una técnica que alterna una señal rápidamente para crear pulsos de anchuras variables. La anchura de los pulsos determina la posición del eje de salida.
Por ejemplo, cuando envías una señal PWM con una anchura de pulso de 1.5 milisegundos (ms), el servo se moverá a la posición neutra (90 grados).

Cuando envías una señal PWM con una anchura de pulso de 1 ms, el servo se moverá a la posición mínima (0 grados). Cuando envías una señal PWM con una anchura de pulso de 2 ms, el servo se moverá a la posición máxima (180 grados).
La señal PWM tiene una frecuencia de 50 Hz, lo que significa que se repite cada 20 ms. La anchura de pulso puede variar de 1 ms a 2 ms dentro de este período.
Hay muchas formas de generar y enviar señales PWM a motores servo. Algunos de los métodos más comunes son:
Usar una placa Arduino u otro microcontrolador
Usar un potenciómetro u otro sensor analógico
Usar un joystick u otro dispositivo de entrada digital
Usar un controlador o conductor de servos dedicado
En las siguientes secciones, exploraremos cada uno de estos métodos en más detalle y veremos algunos ejemplos de cómo funcionan.
Control de un Motor Servo con Arduino
Arduino es una de las plataformas más populares para controlar motores servo. Las placas Arduino tienen salidas PWM integradas que se pueden usar para enviar señales a servos. Arduino también tiene una biblioteca Servo que facilita escribir código para el control de servos.
Para controlar un motor servo con Arduino, necesitarás:
Una placa Arduino (como Arduino UNO)
Un motor servo estándar (como SG90)
Cables jumper
Un protoboard (opcional)
El cable rojo del servo se conecta a 5V en la placa Arduino. El cable negro del servo se conecta a GND en la placa Arduino. El cable blanco del servo se conecta al pin 9 en la placa Arduino.
Para programar la placa Arduino, necesitarás usar el IDE de Arduino (en línea o fuera de línea). Puedes usar uno de los ejemplos de la biblioteca Servo o escribir tu propio código.
El siguiente código muestra cómo barrer un motor servo de 0 a 180 grados usando un bucle for:
#include <Servo.h> // Incluye la biblioteca Servo
Servo myservo; // Crea un objeto Servo
int pos = 0; // Variable para la posición
void setup() {
myservo.attach(9); // Asocia el objeto Servo al pin 9
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // Bucle de 0 a 180 grados
myservo.write(pos); // Escribe la posición al objeto Servo
delay(15); // Espera 15 ms
}
for (pos = 180; pos >= 0; pos -= 1) { // Bucle de 180 a 0 grados
myservo.write(pos); // Escribe la posición al objeto Servo
delay(15); // Espera 15 ms
}
}
Este código usa dos bucles para incrementar y decrementar la variable de posición de 0 a 180 grados y viceversa. Luego escribe este valor al objeto Servo usando myservo.write(pos). También añade un retraso de 15 ms entre cada paso para ralentizar el movimiento.
Sube este código a tu placa Arduino usando el botón Subir del IDE, y observa cómo tu motor servo barre de un lado a otro suavemente.
Control de un Motor Servo con Potenciómetro
Un potenciómetro es un sensor analógico que puede variar su resistencia dependiendo de cuánto gires su perilla. Puedes usar un potenciómetro como un dispositivo de entrada para controlar un motor servo.
Para controlar un motor servo con un potenciómetro, necesitarás:
Una placa Arduino (como Arduino UNO)
Un motor servo estándar (como SG90)
Un potenciómetro (10k Ohms)
Cables jumper
Un protoboard
El diagrama de conexión para conectar un potenciómetro y un motor servo a una placa Arduino se muestra a continuación:
El cable rojo del potenciómetro se conecta a 5V en la placa Arduino. El cable negro del potenciómetro se conecta a GND en la placa Arduino. El cable verde del potenciómetro se conecta al pin A0 en la placa Arduino.
El cable rojo del servo se conecta a 5V en otra fila del protoboard. El cable negro del servo se conecta a GND en otra fila del protoboard. El cable blanco del servo se conecta al pin D9 en otra fila del protoboard.
Para programar tu placa Arduino, necesitarás usar el mismo código del ejemplo anterior pero cambiar algunas líneas:
#include <Servo.h> // Incluye la biblioteca Servo
Servo myservo; // Crea un objeto Servo
int potpin = A0; // Pin conectado al potenciómetro
int val = 0; // Variable para leer el valor del potenciómetro
void setup() {
myservo.attach(9); // Asocia el objeto Servo al pin D9
}
void loop() {
val = analogRead(potpin); // Lee el valor del potenciómetro (0 - 1023)
val = map(val, 0, 1023, 0, 180); // Mapea el rango de valores (0 - 180)
myservo.write(val); // Escribe el valor mapeado al objeto Servo
delay(15); // Espera 15 ms
}
Este código usa la función analogRead(potpin) para leer el valor del potenciómetro conectado al pin A0. Luego, usa la función map(val, 0, 1023, 0, 180) para mapear el rango de valores de 0 a 1023 a 0 a 180 grados. Luego, escribe el valor mapeado al objeto Servo usando la función myservo.write(val). También añade un retraso de 15 ms, igual que en el ejemplo anterior.
Puedes subir este código a tu placa Arduino usando el botón Subir del IDE. Deberías ver que tu motor servo se mueve según la posición de la perilla del potenciómetro.
Control de un Motor Servo con Joystick
Un joystick es un dispositivo de entrada digital que puede detectar la dirección y magnitud del movimiento a lo largo de dos ejes. Puedes usar un joystick para controlar un motor servo mapeando el eje x del joystick al ángulo del servo.
Para controlar un motor servo con un joystick, necesitarás lo siguiente:
Una placa Arduino (como Arduino UNO)
Un motor servo estándar (como SG90)
Un módulo de joystick (como KY-023)
Cables jumper
Un protoboard
El diagrama de conexión para conectar un módulo de joystick y un motor servo a una placa Arduino se muestra a continuación:
!https://www.makerguides.com/wp-content/uploads/2019/01/Servo-motor-control-with-Arduino-and-joystick-wiring-diagram.png
El cable rojo del módulo de joystick se conecta a 5V en la placa Arduino. El cable negro del módulo de joystick se conecta a GND en la placa Arduino. El cable verde del módulo de joystick se conecta al pin A0 en la placa Arduino.
El cable rojo del servo se conecta a 5V en otra fila del protoboard. El cable negro del servo se conecta a GND en otra fila del protoboard. El cable blanco del servo se conecta al pin D9 en otra fila del protoboard.
Para programar tu placa Arduino, necesitarás usar el mismo código del ejemplo anterior pero cambiar algunas líneas:
#include <Servo.h> // Incluye la biblioteca Servo
Servo myservo; // Crea un objeto Servo
int joyX = A0; // Pin conectado al eje x del joystick
int val = 0; // Variable para leer el valor del joystick
void setup() {
myservo.attach(9); // Asocia el objeto Servo al pin 9
}
void loop() {
val = analogRead(joyX); // Lee el valor del eje x del joystick (0 - 1023)
val = map(val, 0, 1023, 0, 180); // Mapea el rango de valores (0 - 180)
myservo.write(val); // Escribe el valor mapeado al objeto Servo
delay(15); // Espera 15 ms
}
Este código usa la función analogRead(joyX) para leer el valor del eje x del joystick conectado al pin A0. Luego, usa la función map(val, 0, 1023, 0, 180) para mapear el rango de valores de 0 a 1023 a 0 a 180 grados. Luego, escribe este valor al objeto Servo usando la función myservo.write(val). También añade un retraso de 15 ms entre cada paso.
Puedes subir este código a tu placa Arduino usando el botón Subir del IDE. Deberías ver que tu motor servo se mueve según la posición del joystick.
Control de un Motor Servo con Controlador de Servo