Como controlar un servo con Arduino
¿Alguna vez te has preguntado cómo los robots logran esos movimientos tan precisos, casi como si tuvieran vida propia? O, ¿quizás cómo una impresora 3D mueve sus componentes con una exactitud milimétrica? La respuesta a menudo reside en un pequeño pero poderoso componente: el servomotor. Combinado con la versatilidad de una placa Arduino, este dúo dinámico te permite añadir movimiento controlado y exacto a tus proyectos. Te guiaré paso a paso, desde los fundamentos hasta los trucos más útiles, para que puedas darle vida a tus propias creaciones. ¡Verás que es un camino fascinante!
Puntos Clave para Dominar los Servos con Arduino
- Precisión Angula: Los servomotores son ideales para movimientos exactos, a diferencia de los motores DC, gracias a su sistema de retroalimentación interno.
- Conexión Sencilla pero Crucial: Requieren tres cables (VCC, GND, Señal) y, para evitar problemas, la alimentación externa es fundamental para servos más grandes o múltiples.
- La Librería Servo.h: Esta herramienta de Arduino simplifica la programación, permitiendo controlar la posición del servo con comandos intuitivos como
attach()
ywrite()
.
El Servomotor: El Músculo Inteligente de tus Proyectos
Piensa en un servomotor no solo como un motor, sino como un «músculo» que puedes controlar con una precisión asombrosa. A diferencia de los motores de corriente continua (DC) que simplemente giran sin fin, un servomotor puede moverse a una posición angular específica y mantenerla. Generalmente, estos pequeños ingenios te permiten establecer un ángulo entre 0 y 180 grados, aunque también existen variantes de rotación continua.
¿Qué lo hace tan especial? Su Mecanismo Interno
La magia de un servomotor radica en su construcción interna. Posee un motor DC, una caja de engranajes que amplifica el par (fuerza de giro), y un sistema de control de retroalimentación. Este sistema incluye un potenciómetro que detecta la posición actual del eje, permitiendo que el motor se ajuste hasta alcanzar y mantener el ángulo deseado. Es un circuito de «lazo cerrado» que garantiza esa precisión angular. ¿Sabes qué es lo mejor? Esta capacidad de posicionamiento exacto los convierte en herramientas indispensables para brazos robóticos, sistemas de dirección o cualquier aplicación que necesite un control de movimiento definido.
Conectando tu Servo al Cerebro: El Arduino
Conectar un servomotor a tu placa Arduino es bastante sencillo, pero hay detalles que marcan la diferencia. Un servomotor típico, como el popular SG90, viene con tres cables que tienen funciones muy específicas.
El Triángulo de Conexión
Aquí te detallo cómo se conectan:
- Cable Rojo (VCC): Este es el cable de alimentación. Conéctalo al pin de 5V de tu Arduino.
- Cable Marrón o Negro (GND): Este es el cable de tierra. Va conectado a uno de los pines GND de tu Arduino.
- Cable Amarillo, Naranja o Blanco (Señal): Este es el cable más importante para el control. Es por donde el Arduino «hablará» con el servo, indicándole a qué ángulo moverse. Debes conectarlo a un pin digital de tu Arduino que soporte PWM (Pulse Width Modulation), como los pines 9 o 10 en la mayoría de los modelos Uno.

Diagrama de conexión básica de un servomotor SG90 a un Arduino Uno.
¡Atención a la Alimentación!
Este es un punto crucial: si bien para servos pequeños como el SG90 puedes alimentarlos directamente desde los 5V de tu Arduino, si planeas usar servos más grandes (como los MG995 o MG996R) o varios servomotores a la vez, es altamente recomendable usar una fuente de alimentación externa. ¿Por qué? El puerto USB de tu computadora solo puede suministrar una corriente limitada (alrededor de 500 mA). Exceder este límite podría hacer que tu Arduino se reinicie, funcione de manera errática, o incluso, en el peor de los casos, sufrir daños. Si utilizas una fuente externa, asegúrate de conectar el pin GND de la fuente externa con un pin GND del Arduino para que compartan una referencia común.
La Magia del Código: Programando tu Servo con Arduino
Aquí es donde Arduino brilla por su facilidad de uso. La plataforma viene con una librería integrada llamada Servo.h
que simplifica enormemente la programación de servomotores. ¡Es una herramienta fantástica!
Primeros Pasos con la Librería Servo.h
Para empezar, lo primero que harás en tu código es incluir esta librería. Luego, crearás un objeto Servo
y lo «engancharás» al pin digital de Arduino al que conectaste el servo.
#include <Servo.h> // Incluye la librería Servo
Servo miServo; // Crea un objeto Servo para controlar el motor
int pinServo = 9; // Define el pin digital de Arduino al que está conectado el cable de señal del servo
void setup() {
miServo.attach(pinServo); // Vincula el objeto Servo al pin especificado
// Puedes establecer una posición inicial si lo deseas
miServo.write(90); // Mueve el servo a 90 grados como posición de inicio
}
void loop() {
// Aquí irá el código para controlar el movimiento del servo
}
Las funciones más importantes que usarás son:
attach(pin)
: Conecta el objeto Servo a un pin específico de Arduino.write(grados)
: Mueve el servo a la posición angular deseada, expresada en grados (normalmente de 0 a 180).read()
: Lee la posición actual en la que se encuentra el servo (en grados).
Ejemplo Básico: Barrido de Posición (Sweep)
Un ejemplo clásico para familiarizarse con el control del servo es el «barrido» o «sweep», donde el servo se mueve suavemente de un extremo a otro de su rango de movimiento.
#include <Servo.h>
Servo miServo; // Crea el objeto Servo
void setup() {
miServo.attach(9); // Conecta el servo al pin 9
}
void loop() {
for (int pos = 0; pos <= 180; pos += 1) { // Recorre de 0 a 180 grados
miServo.write(pos); // Mueve el servo a la posición actual
delay(15); // Pequeña pausa para que el servo se mueva suavemente
}
for (int pos = 180; pos >= 0; pos -= 1) { // Recorre de 180 a 0 grados
miServo.write(pos); // Mueve el servo a la posición actual
delay(15); // Pequeña pausa
}
}
Llevando el Control más Allá: Interactuando con el Servo
La verdadera diversión comienza cuando puedes interactuar con el servomotor de maneras más dinámicas. Aquí te presento dos ejemplos populares que te permitirán controlar el servo de forma manual.
Control con un Potenciómetro
Un potenciómetro es una resistencia variable que te permite cambiar el valor de una señal analógica girando un dial. Puedes usarlo para controlar la posición de tu servo de forma intuitiva.

Esquema de conexión de un servomotor controlado por un potenciómetro.
#include <Servo.h>
Servo miServo; // Crea el objeto Servo
int potPin = A0; // Pin analógico donde está conectado el potenciómetro
int valorPot = 0; // Variable para almacenar el valor leído del potenciómetro
void setup() {
miServo.attach(9); // Conecta el servo al pin 9
Serial.begin(9600); // Inicia la comunicación serial para depuración
}
void loop() {
valorPot = analogRead(potPin); // Lee el valor del potenciómetro (0-1023)
// Mapea el valor del potenciómetro al rango de grados del servo (0-180)
int angulo = map(valorPot, 0, 1023, 0, 180);
miServo.write(angulo); // Mueve el servo al ángulo calculado
Serial.print("Valor Potenciómetro: ");
Serial.print(valorPot);
Serial.print(" - Ángulo Servo: ");
Serial.println(angulo);
delay(15); // Pequeña pausa
}
Control de Múltiples Servos y Soluciones Avanzadas
La librería Servo.h
puede controlar hasta 12 servomotores con un Arduino Uno o Nano, y hasta 48 con una Arduino Mega. Sin embargo, cuando hablamos de muchos servos o servos de alta potencia, surgen consideraciones de corriente y complejidad de cableado.
Para proyectos que demandan un gran número de servomotores o requieren más corriente de la que el Arduino puede suministrar, módulos controladores como el PCA9685 son una solución excelente. Este módulo permite controlar hasta 16 servos utilizando solo dos pines de tu Arduino (mediante comunicación I2C), liberando pines para otros componentes.

Módulo PCA9685 controlando múltiples servomotores con Arduino. https://howtomechatronics.com
La siguiente tabla resume los componentes esenciales y sus funciones:
Componente | Descripción | Función Clave | Consideraciones |
---|---|---|---|
Arduino Uno/Nano | Microcontrolador principal. | Procesa el código y envía señales al servo. | Suficiente para 1-2 servos SG90. |
Servomotor SG90 | Motor de posición estándar (0-180°). | Movimiento preciso a un ángulo deseado. | Pequeño, bajo consumo, ideal para principiantes. |
Servomotor MG995/MG996R | Servo de alto par. | Mayor fuerza, ideal para movimientos más pesados. | Requiere fuente de alimentación externa. |
Cables Jumper | Cables de conexión. | Establecen las conexiones eléctricas. | Verificar polaridad (VCC, GND, Señal). |
Fuente de Alimentación Externa | Fuente de energía independiente. | Proporciona corriente adicional para servos. | Esencial para múltiples servos o de alta potencia. |
Potenciómetro | Resistencia variable. | Permite control manual del ángulo del servo. | Se conecta a un pin analógico de Arduino. |
Módulo PCA9685 | Controlador PWM de 16 canales. | Controla múltiples servos con pocos pines de Arduino. | Comunicación I2C, ideal para proyectos complejos. |
Consideraciones Adicionales y Solución de Problemas
Aunque el control de servos es bastante directo, a veces pueden surgir pequeños inconvenientes. Aquí te dejo algunos consejos y soluciones:
- El servo no se mueve o vibra: Revisa tus conexiones. Un cable suelto o mal conectado es la causa más común. Asegúrate de que el cable de señal esté en un pin PWM si es posible (aunque la librería Servo puede adaptarse).
- El servo hace un ruido extraño o se calienta: Podría ser un signo de que está sobrecargado o no está recibiendo suficiente corriente. Intenta con una fuente de alimentación externa si no lo estás usando, o asegúrate de que el servo no esté forzado contra un tope.
- Ruido eléctrico o temblores: Si el servo tiembla ligeramente, puedes probar añadiendo un capacitor (condensador electrolítico) de 100uF o más grande entre el VCC y GND del servo. Esto ayuda a suavizar el suministro de energía.
- Precisión y calibración: Algunos servos pueden tener pequeñas variaciones en sus ángulos. Si necesitas una precisión extrema, puedes usar la función
writeMicroseconds()
que permite un control más fino sobre el ancho del pulso que se envía al servo.
Este video de Circuit Basics ofrece una excelente introducción visual sobre cómo controlar un servomotor posicional con Arduino, mostrando las conexiones y un ejemplo de código. Es una guía clara y concisa para quienes están dando sus primeros pasos.
Preguntas Frecuentes
¿Qué tipo de servomotor debo usar para empezar?
Para empezar, un servomotor como el SG90 es ideal. Son económicos, fáciles de conseguir y perfectos para aprender los fundamentos.
¿Puedo controlar múltiples servos con un solo Arduino?
Sí, la librería Servo.h
permite controlar varios servos (hasta 12 en un Uno, 48 en un Mega). Sin embargo, para más de 2-3 servos o servos de mayor tamaño, es crucial usar una fuente de alimentación externa y considerar módulos controladores como el PCA9685.
¿Qué significa PWM en el contexto de los servos?
PWM significa «Pulse Width Modulation» (Modulación por Ancho de Pulso). Los servos se controlan enviándoles pulsos eléctricos de ancho variable. El ancho del pulso determina la posición a la que se moverá el servo. Los pines PWM de Arduino están diseñados para generar estas señales de manera eficiente.
Mi servo hace un ruido agudo o zumbido, ¿es normal?
Un ligero zumbido puede ser normal, especialmente cuando el servo está manteniendo una posición contra una carga. Sin embargo, un ruido excesivo o constante, junto con vibraciones, podría indicar falta de potencia, sobrecarga o un problema en las conexiones.
Conclusión: El Movimiento al Alcance de Tu Mano
Controlar un servomotor con Arduino es una habilidad fundamental que te abrirá un mundo de posibilidades en proyectos de electrónica y robótica. Desde simples brazos robóticos hasta sistemas de automatización complejos, la capacidad de añadir un movimiento preciso y controlado es invaluable. Hemos cubierto los fundamentos: qué es un servo, cómo conectarlo correctamente (prestando especial atención a la alimentación), y cómo programarlo usando la amigable librería Servo.h
. También hemos explorado formas de interactuar con ellos, como el control mediante un potenciómetro, y soluciones para cuando necesites controlar varios servos. ¡La clave es experimentar, cometer errores y aprender de ellos! Así que, ¿qué esperas? ¡Es tu turno de crear y ver tus ideas cobrar vida!