Componente · Actuador
SG90 Micro Servo
El micro servomotor SG90 es el actuador más extendido para mover articulaciones ligeras, barrer sensores ultrasónicos y accionar pinzas mecánicas en robótica.
Qué es
El SG90 es un microservo: un pequeño actuador autónomo que gira hasta un ángulo comandado y lo mantiene ahí. Donde un motor de CC corriente simplemente gira, un servo apunta: dile «90 grados» y se conduce él mismo hasta los 90 grados y resiste que lo aparten de ahí. Eso lo convierte en la opción natural para todo lo que necesita moverse a una posición conocida: una articulación de brazo robótico, una pinza que abre y cierra, un soporte de cabeza y cámara para un objetivo, o la dirección de un rover pequeño.
Con nueve gramos y un par de dólares es el servo con el que empieza casi todo el mundo. No es lo bastante fuerte ni bastante preciso para trabajo serio, pero es la forma más rápida de entender cómo se siente el control de posición.
Cómo funciona
Abre uno y encontrarás cuatro cosas: un pequeño motor de CC, un tren de engranajes que cambia velocidad por par, un potenciómetro engranado al eje de salida y un circuito de control. El potenciómetro es la clave: informa continuamente del ángulo real del eje. El circuito compara ese ángulo medido con el que le estás comandando y mueve el motor en la dirección que cierre la diferencia. Es un lazo de realimentación completo en miniatura, y por eso el brazo de cinemática inversa puede confiar en que un servo alcance una pose objetivo.
El ángulo se comanda con una señal PWM de 50 Hz, y la anchura de pulso lleva el mensaje:
unos 1 ms para un extremo del recorrido, 1,5 ms para el centro, 2 ms para el otro extremo. Es
PWM usado como código de posición en lugar de como
código de velocidad. En la práctica la biblioteca Servo de Arduino oculta los tiempos y tú solo
escribes un ángulo.
Cuándo usarlo
Usa un SG90 siempre que una parte del robot deba moverse a y mantener un ángulo concreto bajo carga ligera: dedos de una pinza, articulaciones pequeñas de un brazo, cardanes de sensores o la dirección de un coche ligero. Sus ~180° de recorrido y el control instantáneo de «ve a este ángulo» son ideales para aprender cinemática y construir mecanismos expresivos.
Mira en otro sitio cuando la articulación cargue peso real (usa un servo de engranaje metálico o estándar), cuando necesites rotación continua para una rueda (usa un motor de CC con un L298N, o un servo de rotación continua), o cuando necesites muchos grados de movimiento preciso y de par alto (usa un motor paso a paso).
Cableado y errores comunes
- Aliméntalo por separado. Un SG90 bloqueado puede absorber 500–700 mA, mucho más de lo que puede dar el pin de 5 V de un microcontrolador. Usa una alimentación de 5 V dedicada y une su masa con la masa de la placa, o la placa se quedará sin tensión y se reiniciará.
- No es de rotación continua. Un SG90 estándar recorre ~180° y se detiene. Mandarle «gira siempre» no hace nada; para una rueda motriz necesitas otro actuador.
- No lo fuerces ni lo bloquees. Los engranajes de nailon se rompen con sobrecargas o un golpe seco. Mantén las cargas ligeras, o pásate a engranajes metálicos.
- Espera algo de vibración. Los servos baratos rondan ligeramente la posición objetivo. Una alimentación estable y limpia y desconectar la señal cuando la articulación no necesite mantener posición reducen ambos efectos.
Cableado
Tres hilos, y los colores son casi universales en los servos de hobby:
| Hilo | Color (SG90) | Qué es |
|---|---|---|
| 1 | Marrón | Masa |
| 2 | Rojo | Alimentación, 4.8–6 V |
| 3 | Naranja | Señal: el PWM de 50 Hz |
Algunos servos usan negro/rojo/blanco o negro/rojo/amarillo. La regla que siempre se cumple: el rojo está en el medio, y la masa es el más oscuro de los tres.
| SG90 | Arduino Uno | Nota |
|---|---|---|
| Marrón | GND | Debe ser común con la masa de la alimentación del servo |
| Rojo | No los 5 V del Arduino | Una alimentación de 5 V aparte: mira abajo |
| Naranja | Cualquier pin digital | La biblioteca Servo funciona en cualquier pin |
Por qué no el pin de 5 V del Arduino
Un SG90 absorbe unos 10 mA en reposo, 150–250 mA moviéndose y 650 mA bloqueado. La alimentación por USB con la que funciona un Uno está limitada a 500 mA para toda la placa, y el regulador de a bordo cuando funciona desde el conector cilíndrico tiene su propio límite térmico.
Un solo servo moviéndose suavemente suele funcionar, y ese es precisamente el problema: funciona en el banco y luego se queda sin tensión en cuanto el servo encuentra resistencia. El síntoma es una placa que se reinicia cada vez que el brazo llega a una posición concreta, lo que se lee como un fallo de software.
Dale su propia alimentación de 5 V, une las masas y pon un condensador de 470 µF en paralelo con la alimentación del servo cerca del conector.
La relación entre anchura de pulso y ángulo
Un servo no lee tensión. Lee cuánto dura el pulso, cincuenta veces por segundo.
| Anchura de pulso | Ángulo nominal | Lo que el SG90 hace en realidad |
|---|---|---|
| 1.0 ms | 0° | A menudo se para unos 10–15° antes |
| 1.5 ms | 90° | Centro, y suele ser exacto |
| 2.0 ms | 180° | A menudo se para unos 10–15° antes |
| < 0.5 ms o > 2.5 ms | — | Zumba contra un tope final, absorbiendo corriente de bloqueo |
El rango de 1–2 ms es una convención, no un estándar. Muchos SG90 alcanzan sus topes reales más
cerca de 0,6 ms y 2,4 ms, y por eso el attach() de la biblioteca Servo del Arduino acepta
anchuras de pulso mínima y máxima opcionales:
servo.attach(9, 600, 2400); // instead of the 544/2400 defaults
Calibrar esto por servo es la diferencia entre un brazo que llega a su espacio de trabajo y otro que misteriosamente se queda 20° corto en los dos extremos.
Código mínimo funcional
#include <Servo.h>
Servo joint;
const int PIN = 9;
void setup() {
joint.attach(PIN, 600, 2400); // calibrate these two numbers per servo
joint.write(90); // centre before doing anything else
delay(500);
}
// Move gently instead of jumping — a servo commanded to jump goes at full speed.
void sweepTo(int target, int stepDelayMs) {
int current = joint.read();
int step = (target > current) ? 1 : -1;
while (current != target) {
current += step;
joint.write(current);
delay(stepDelayMs);
}
}
void loop() {
sweepTo(20, 15);
delay(400);
sweepTo(160, 15);
delay(400);
}
joint.write(160) y el barrido terminan ambos en 160°, pero son eventos electricalmente
completamente distintos. El salto comanda velocidad máxima, lo que en una articulación cargada es
un pico de 650 mA y un golpe mecánico a través de engranajes de nailon. El barrido reparte el
mismo movimiento en dos segundos y absorbe una fracción de la corriente. En un brazo de varias
articulaciones esa es la diferencia entre una alimentación que aguanta y una que no.
Par: qué significa realmente 1,8 kg·cm
La especificación es 1,8 kg·cm a 4,8 V, lo que significa que el servo puede sostener 1,8 kg a 1 cm del eje, o 1,8/L kg a L centímetros. Esa última parte es la que despista a la gente.
| Longitud del brazo desde el eje | Carga máxima (bloqueo) | Carga de trabajo segura (~30 %) |
|---|---|---|
| 1 cm | 1800 g | 540 g |
| 5 cm | 360 g | 108 g |
| 10 cm | 180 g | 54 g |
| 15 cm | 120 g | 36 g |
Hay dos cosas que conviene extraer de esto. Primera: el par cae linealmente con el alcance, así que un segmento de brazo de 15 cm solo puede levantar 120 g con bloqueo absoluto. Segunda: nunca diseñes sobre la cifra de bloqueo. Un servo en bloqueo está absorbiendo corriente completa, no produciendo movimiento, y calentándose; un tercio del par de bloqueo es un techo razonable para una articulación que tiene que mantener una posición durante un tiempo.
La cifra también viene dada a 4,8 V. A 6 V el mismo servo produce aproximadamente 2,2 kg·cm, que es una de las pocas mejoras gratuitas de la robótica de afición, siempre que tu alimentación pueda entregar la corriente correspondientemente mayor.
Reducir la vibración
Los servos baratos rondan ligeramente su objetivo, y hay cuatro causas distintas que conviene distinguir:
- Ruido de alimentación. El más común. Un servo comparte riel con los motores y ve cada pico de corriente como una perturbación de control. Alimentación aparte, más un condensador en el servo.
- Vibración en los tiempos de la señal. La biblioteca
Servogenera los pulsos por software, y un bucle ocupado u otra interrupción desplazan sus flancos. Passar a un PCA9685 lo arregla por completo: genera los pulsos en hardware. - Zona muerta. El propio controlador del servo ignora errores por debajo de unos 5 µs de anchura de pulso, que es aproximadamente 1°. Por debajo de esa resolución sencillamente no responde, y pedir pasos más finos no produce nada.
- Mantener contra una carga. Un servo luchando contra la gravedad en el límite de su par zumbará
continuamente. Usa
detach()cuando la articulación no necesite mantener, o equilibra mecánicamente la articulación.
Resolución de problemas
| Síntoma | Causa probable | Solución |
|---|---|---|
| La placa se reinicia cuando se mueve el servo | Corriente del servo pasando por el Arduino | Alimentación de 5 V aparte, masa común, condensador de 470 µF |
| Zumba constantemente, se calienta | Se le comanda más allá de su tope final | Estrecha el rango de anchura de pulso en attach() |
| Solo recorre unos 150° | Los valores por defecto de la biblioteca no llegan a los topes reales | attach(pin, 600, 2400) y afina |
| Va a un ángulo totalmente equivocado | Horquilla montada en una rotación arbitraria | Cada articulación necesita un offset de calibración, y quizá un cambio de signo |
| Vibra en reposo | Ruido de alimentación o pulsos temporizados por software | Primero el condensador; un PCA9685 si persiste |
| Se ha roto y ahora patina | Los engranajes de nailon fallaron por golpe o sobrecarga | MG90S de engranaje metálico; reduce la carga o la velocidad |
| Se vuelve más lento y más flojo con el tiempo | La alimentación se desploma conforme se descarga la batería | El par escala con la tensión: mide el riel bajo carga |
| No gira de forma continua | Es un servo posicional | Usa un servo de rotación continua o un motorreductor de CC |
¿SG90 u otra cosa?
| Componente | Par a 4,8 V | Engranajes | Elígelo cuando |
|---|---|---|---|
| SG90 | 1.8 kg·cm | Nailon | Aprender, pinzas ligeras, cardanes de sensores |
| MG90S | 2.2 kg·cm | Metálico | El mismo tamaño, aguanta golpes: la mejora directa |
| MG996R | 9.4 kg·cm | Metálico | Articulaciones de tamaño estándar que cargan peso real |
| SG90 de rotación continua | — | Nailon | Una rueda motriz, donde quieres velocidad y no ángulo |
| Motor paso a paso NEMA 17 | ~40 N·cm | — | Posicionamiento preciso y repetible sin zona muerta |
Una advertencia sobre las «pinzas ligeras» de esa primera fila. Una pinza es la única aplicación donde un SG90 pasa la vida bloqueado: sostener un objeto no es movimiento, así que el devanado absorbe unos 0,5 A sin nada que los refrigere, y esa es la forma habitual de que estos mueran. También es la razón por la que la fuerza de la mordaza la fija el brazo de palanca y no el par de la caja: 0,176 N·m sobre un dedo de 30 mm son 5,87 N en bloqueo y unos 4,11 N que realmente puedes sostener. Dimensionar una pinza de servo cubre ambos, y el simulador de pinza te hace la aritmética para tu propio dedo.
El resumen honesto: el SG90 es un actuador de aprendizaje. Es la forma más rápida de entender qué se siente el control de posición, y no es lo bastante fuerte ni repetible para una articulación que importe. Cuando un proyecto deja de funcionar porque el servo no es suficientemente bueno, la respuesta suele ser el MG90S: misma huella, mismo cableado, engranajes metálicos.
Explora el grafo
Se usa en estos montajes
Proyectos, rutas de aprendizaje y simuladores que incluyen SG90 Micro Servo.
- ProyectoConstruye un brazo robótico de 4 DOF: cinemática y PCA9685
- ProyectoConstruye un plóter de dibujo: dos ejes paso a paso
- ProyectoConstruye un robot esquivador de obstáculos autónomo
- ProyectoConstruye un robot pick and place con agarre verificado
- Ruta de aprendizajeAgarre y efectores finales: cómo sujetar piezas
Comparar
Alternativas
Preguntas
Preguntas frecuentes sobre SG90 Micro Servo
¿Qué es el servomotor SG90?
El SG90 es un servo de aficionado de 9 gramos: un pequeño motor con reductora que gira hasta un ángulo ordenado y lo mantiene, en lugar de girar libremente. Es el servo más barato y más común en la robótica de iniciación, y se usa en articulaciones de brazos, pinzas, soportes pan-tilt para cámaras y sistemas de dirección.
¿Cómo funciona un servomotor?
Dentro hay un motor de CC, un tren de engranajes, un potenciómetro y un circuito de control. El potenciómetro le dice al circuito el ángulo actual; el circuito lo compara con el ángulo que ordenas y mueve el motor hasta que coinciden. Ese lazo de realimentación integrado es lo que permite a un servo mantener una posición precisa.
¿Cómo se controla un SG90 con un Arduino?
Envías una señal PWM de 50 Hz en la que el ancho del pulso fija el ángulo: aproximadamente 1 ms significa 0°, 1.5 ms significa 90° y 2 ms significa 180°. En la práctica usas la biblioteca Servo de Arduino y simplemente llamas a servo.write(angle), que genera la temporización por ti.
¿Cuánto peso puede levantar un SG90?
El par de bloqueo del SG90 es de unos 1.8 kg·cm, lo que significa que apenas puede sostener 1.8 kg con un brazo de 1 cm, o ~180 g a 10 cm. La carga continua aprovechable está muy por debajo de eso. Para algo más pesado o un brazo más largo, pasa a un servo con engranajes metálicos como el MG90S o a un servo de tamaño estándar.
SG90 o MG90S: ¿cuál es mejor?
Tienen el mismo tamaño y se controlan igual, pero el MG90S tiene engranajes metálicos y algo más de par, así que sobrevive a bloqueos y cargas que destrozarían los engranajes de nailon del SG90. Usa el SG90 para aprender y para cargas ligeras; elige el MG90S cuando la articulación soporte un peso real o reciba golpes.
¿Cuánta corriente consume un SG90?
Un SG90 consume solo unos pocos miliamperios en reposo, pero puede dar picos de 500–700 mA cuando se bloquea o se mueve bajo carga. Eso es demasiado para sacarlo del pin de 5 V de un Arduino, así que alimenta los servos desde una fuente de 5 V aparte con masa común, o provocarás caídas de tensión que reiniciarán la placa.
Lecturas adicionales