El servomotor SG90 es un micro servo de 9 gramos diseñado para proyectos de robótica, automatización y aeromodelismo que requieren control preciso de posición. Con un rango de giro de 180° y control por señal PWM, puedes posicionarlo desde Arduino sin necesitar componentes adicionales para empezar.
A diferencia de un motor DC convencional, un servomotor integra en un solo módulo un motor, un sistema de engranajes reductores y un circuito de control electrónico. Esto permite indicarle un ángulo exacto y el servo se mueve hacia esa posición y la mantiene de forma autónoma. Un potenciómetro interno le informa continuamente al circuito cuál es la posición real del eje, permitiendo corregir cualquier desviación automáticamente.
El SG90 se controla desde Arduino y desde otros microcontroladores que generen pulsos de 50 Hz. Espressif, fabricante del ESP32, usa un SG90 en su ejemplo oficial de control de servos, con la señal conectada directo a un pin del ESP32 y el servo alimentado aparte a 5 V. Su conector tipo JR calza en la mayoría de los receptores de radiocontrol del mercado, haciéndolo igual de útil en aeromodelismo que en electrónica educativa y proyectos DIY.
Ventajas
- Peso ultraligero de 9 gramos: ideal para aplicaciones donde el peso es crítico, como brazos robóticos, aeronaves de aeromodelismo y drones pequeños.
- Control de posición por señal PWM: el largo de cada pulso fija el ángulo, y un pulso de 1500 µs deja el eje al centro.
- Compatible con Arduino y la librería Servo.h incluida por defecto en el IDE de Arduino, sin necesidad de instalar librerías adicionales.
- Conector universal tipo JR compatible con receptores Futaba, JR y la mayoría de sistemas de radiocontrol del mercado.
- Voltaje de operación de 4,8 a 6 V: funciona con una fuente de 5 V o con 4 pilas AA recargables NiMH, que suman 4,8 V.
- Incluye accesorios de montaje: trae brazos y tornillos para montarlo en tu proyecto.
- Engranajes de POM (acetal), un plástico de ingeniería con buena resistencia al desgaste, ideal para uso educativo y prototipado.
Especificaciones
| Parámetro | Valor |
|---|---|
| Torque (a 4,8 V) | 1,8 kgf·cm |
| Velocidad (a 4,8 V) | 0,10 a 0,12 s / 60° |
| Voltaje de operación | 4,8 a 6 V |
| Peso | 9 g |
| Dimensiones (L × An × Al) | 23 × 12,2 × 29 mm |
| Rango de giro | 180° |
| Ancho de pulso | 1500 µs al centro; los extremos se calibran en cada unidad (Servo.h usa 544 a 2400 µs por defecto) |
| Frecuencia de la señal | 50 Hz (período de 20 ms) |
| Material de engranajes | POM (acetal) |
| Tipo de conector | JR (compatible Futaba y similares) |
| Longitud del cable | 25 cm |
| Temperatura de operación | 0°C a 55°C |
Conexión y uso
El SG90 tiene tres cables con colores estándar:
- Café o negro (GND): conéctalo al pin GND de Arduino o al negativo de tu fuente de alimentación.
- Rojo (VCC): conéctalo al pin 5V de Arduino o a una fuente externa de 5V a 6V.
- Naranja o amarillo (Señal): conéctalo a cualquier pin digital de Arduino, como el 9 del ejemplo. No hace falta que sea un pin PWM marcado con ~.
Para pruebas básicas con un solo servo y sin carga pesada, el pin de 5V de Arduino proporciona corriente suficiente. Si vas a conectar más de un servo, o si el servo va a trabajar bajo carga constante, usa una fuente externa de 5 V que pueda entregar 2 A por servo. El soporte de Tower Pro indica que su SG90 consume de 0,5 a 2 A, y el consumo sube cuando hace fuerza o se traba. Conecta el GND de esa fuente al GND de Arduino para compartir la referencia de voltaje.
La señal PWM que controla la posición del servo es un tren de pulsos con período de 20 ms (50 Hz). La duración de cada pulso determina el ángulo de posición:
- 1500 µs deja el eje en la posición central.
- Los pulsos más cortos lo giran hacia un extremo y los más largos hacia el otro.
- La librería
Servo.hreparte 0 a 180° entre 544 y 2400 µs por defecto. Los extremos reales se calibran en cada unidad, como explica la pregunta sobre los 180°.
Con la librería Servo.h de Arduino no necesitas generar esos pulsos manualmente. Usa miServo.write(angulo) con el ángulo en grados y la librería se encarga del resto. Para mayor precisión, miServo.writeMicroseconds(us) permite especificar el pulso exacto en microsegundos, dentro del rango fijado en attach().
Preguntas frecuentes
¿Qué es un servomotor y en qué se diferencia de un motor DC?
Un servomotor junta en un solo módulo un motor DC, un reductor de engranajes y un circuito de control con retroalimentación de posición. Un motor DC gira mientras recibe voltaje. El servomotor recibe una señal de pulsos, se ubica en el ángulo indicado y ahí se queda. Un potenciómetro interno mide la posición real del eje, y el circuito la compara con la pedida y corrige la diferencia.
¿Cómo conecto el servo motor SG90 a Arduino?
Son tres cables. El café o negro va a GND, el rojo va a 5V (o a una fuente externa de 5 a 6 V) y el naranja va a cualquier pin digital, por ejemplo el 9. No hace falta que sea un pin PWM marcado con ~. En tu sketch incluyes la librería Servo.h, declaras Servo miServo;, llamas a miServo.attach(9) en el setup() y mueves el servo con miServo.write(90), que lo lleva a 90°. Según la documentación de la librería, en las placas que no son Mega su uso desactiva analogWrite() en los pines 9 y 10, aunque el servo esté conectado en otro pin. La misma librería maneja hasta 12 servos en la mayoría de las placas Arduino y hasta 48 en el Mega.
¿Puedo alimentar el SG90 directamente desde el pin 5V de Arduino?
Para probar un solo servo sin carga, el pin 5V de Arduino puede alcanzar. El soporte de Tower Pro, fabricante del SG90 original, indica que su SG90 consume entre 0,5 y 2 A, y el consumo sube cuando el servo hace fuerza o queda trabado. Con más de un servo, o con carga constante, usa una fuente externa de 5 V y une su GND con el GND de Arduino. Así evitas que el Arduino se reinicie o que se dañe su regulador. El voltaje de operación es de 4,8 V, lo que suman cuatro pilas recargables NiMH, y Tower Pro acepta hasta 6 V. Una batería de 9 V o una fuente de 12 V no van conectadas directo al servo.
¿El SG90 gira los 180° completos?
Puede quedarse corto. Tower Pro no publica el rango de giro del SG90, y su soporte indica que sus servos normales trabajan de 0 a 150° salvo que se especifique 180 o 360°. La librería Servo.h reparte 0 a 180° entre pulsos de 544 y 2400 µs, y no manda pulsos fuera del rango fijado en attach(), ni siquiera con writeMicroseconds(). Si tu servo no llega a los extremos, conéctalo con un rango más amplio, por ejemplo miServo.attach(9, 400, 2600), y mueve el eje con miServo.writeMicroseconds(). Parte en 1500 µs, que es el centro, y avanza de a poco hacia cada lado hasta el punto donde el eje deja de moverse. Quédate unos microsegundos antes, para que no quede haciendo fuerza contra el tope. Después usa esos valores en miServo.attach(9, min, max) y write() repartirá 0 a 180° en ese rango.
¿En qué proyectos puedo usar el micro servo SG90?
Se usa en brazos robóticos educativos, en la dirección de autos pequeños, en superficies de control de aeromodelos livianos, en tapas y compuertas que abren y cierran, y para girar sensores livianos, como el HC SR04 de un robot que evita obstáculos. Su torque es de 1,8 kgf·cm a 4,8 V, pensado para cargas livianas. Para mover mecanismos pesados o resistir fuerzas externas grandes necesitas un servo de más torque con engranajes metálicos.
¿Me conviene el SG90 o el MG90S?
A 4,8 V los dos tienen el mismo torque, 1,8 kgf·cm, según Tower Pro. El MG90S trae engranajes y eje de aluminio en vez de plástico POM, mide casi lo mismo (22,8 × 12,2 × 28,5 mm) y pesa 13,4 g, contra los 9 g del SG90. A una compradora a la que el SG90 no le alcanzó, el soporte de Tower Pro le sugirió el MG90S o el MG92B, los dos de engranajes metálicos. Si la carga es liviana, como un sensor que gira o una tapa, el SG90 alcanza.
¿Qué diferencia hay entre el SG90 posicional y un servo de rotación continua?
Este SG90 es posicional. Se mueve a un ángulo dentro de su recorrido y lo mantiene. En un servo de rotación continua la señal controla la velocidad y el sentido de giro en vez del ángulo, y el eje gira sin tope. Usa el SG90 para apuntar algo a un ángulo, como un brazo robótico o una superficie de control. Para mover las ruedas de un robot necesitas un servo continuo, porque este SG90 se detiene al llegar al final de su recorrido.
Código de ejemplo
// Servo SG90 con Arduino | MechatronicStore.cl
// Barrido continuo de 0 a 180 grados y vuelta
#include <Servo.h>
Servo miServo;
int angulo = 0;
void setup() {
miServo.attach(9); // pin digital conectado al cable naranja del SG90
}
void loop() {
for (angulo = 0; angulo <= 180; angulo++) {
miServo.write(angulo);
delay(15);
}
for (angulo = 180; angulo >= 0; angulo--) {
miServo.write(angulo);
delay(15);
}
}




