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 al variar la duración de los pulsos eléctricos.
Arduino y Motores Servo: Utilizar una placa Arduino es una forma popular y efectiva de programar y controlar motores servo con un mínimo de configuración de hardware.
Aplicaciones de Motores Servo: Los motores servo son esenciales para proyectos que requieren un control posicional preciso, como la robótica y los sistemas automatizados.
Un motor servo es un motor diseñado para 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 la robótica, la automatización y los 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 le 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 de modulación por ancho de pulso (PWM) a la línea de señal del servo. La modulación por ancho de pulso es una técnica que alterna una señal rápidamente para crear pulsos de anchos variables. El ancho de los pulsos determina la posición del eje de salida.
Por ejemplo, cuando envías una señal PWM con un ancho 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 un ancho 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 un ancho 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. El ancho de pulso puede variar de 1 ms a 2 ms dentro de este período.
Existen 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 servo 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 de salto
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 hacer que un motor servo se desplace de un lado a otro a lo largo de 180 grados usando un bucle for:
#include <Servo.h> // Incluir biblioteca Servo
Servo myservo; // Crear objeto Servo
int pos = 0; // Variable para la posición
void setup() {
myservo.attach(9); // Asignar objeto Servo al pin 9
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // Bucle de 0 a 180 grados
myservo.write(pos); // Escribir posición al objeto Servo
delay(15); // Esperar 15 ms
}
for (pos = 180; pos >= 0; pos -= 1) { // Bucle de 180 a 0 grados
myservo.write(pos); // Escribir posición al objeto Servo
delay(15); // Esperar 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 agrega 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 se desplaza de un lado a otro de manera fluida.
Control de un Motor Servo con Potenciómetro
Un potenciómetro es un sensor analógico que puede variar su resistencia según cuánto gires su perilla. Puedes usar un potenciómetro como 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 Ohmios)
Cables de salto
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 que en el ejemplo anterior, pero cambiar algunas líneas:
#include <Servo.h> // Incluir biblioteca Servo
Servo myservo; // Crear 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); // Asignar objeto Servo al pin D9
}
void loop() {
val = analogRead(potpin); // Leer valor del potenciómetro (0 - 1023)
val = map(val,0,1023,0,180); // Mapear rango de valores (0 - 180)
myservo.write(val); // Escribir valor mapeado al objeto Servo
delay(15); // Esperar 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 - 1023 a 0 - 180 grados. Luego escribe el valor mapeado al objeto Servo usando la función myservo.write(val). También agrega un retraso, 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 tu motor servo moviéndose 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 asignando 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 de salto
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 que en el ejemplo anterior, pero cambiar algunas líneas:
#include <Servo.h> // Incluir biblioteca Servo
Servo myservo; // Crear 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); // Asignar objeto Servo al pin 9
}
void loop() {
val = analogRead(joyX); // Leer valor del eje X del joystick (0 - 1023)
val = map(val, 0, 1023, 0, 180); // Mapear rango de valores (0 - 180)
myservo.write(val); // Escribir valor mapeado al objeto Servo
delay(15); // Esperar 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 - 1023 a 0 - 180 grados. Luego escribe este valor al objeto Servo usando la función myservo.write(val). También agrega 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 tu motor servo moviéndose según la posición del joystick.
Control de un Motor Servo con Controlador de Servo