Descripción
El servomotor SG90 9g de la marca Tower Pro es un servo pequeño que a pesar de su tamaño posee una gran calidad, además en Chile es el más económico, y nosotros te lo ofrecemos al mejor precio de Chile. Funciona con la mayoría de tarjetas electrónicas de control con microcontroladores y tambien con casi todos los sistemas de control por radio del mercado. Funciona especialmente bien en brazos robóticos con Arduino, autos robóticos, mecanismos de movimientos, abrir puertas o ventanas en maquetas, aeronaves de aeromodelismo y muchas otras aplicaciones con Arduino dadas a sus características de torque, tamaño y peso.
El servomotor tiene un conector universal tipo “S” que es un formato de conexión que calza perfecto en la mayoría de receptores de radio control incluyendo los Futaba, JR, GWS, Cirrus, Hitec y otros. Los cables en el conector están distribuidos de la siguiente forma:
Rojo = Alimentación (+)
Cafe = Alimentación (-) o tierra,
Naranjo = Señal PWM.
Cabe señalar que la señal PWM es una señal de entrada hacia el servo, y esta es la que permite que el servo motor se mueva hacia una posición, este servo motor recibe una señal PWM, que básicamente es una señal de voltaje. Cuando se utiliza este servo motor con Arduino, desde arduino en algún pin PWM (por ejemplo pin 9) se escribe como una salida, el cual le dará la señal a la placa electrónica del servo motor que ese voltaje que recibe en señal PWM lo transforme en un movimiento del brazo del servo hacia una posición dada por el usuario desde el codigo de Arduino.
Este tipo de servo es ideal para las primeras experiencias de aprendizaje y prácticas con servos, ya que sus requerimientos de energía son bastante bajos y se permite alimentarlo con la misma fuente de alimentación que el circuito de control. Por ejemplo, si se conecta a una tarjeta arduino, se puede alimentar durante las pruebas desde el puerto USB de la PC sin mayor problema.
Que es un servomotor
Un servo motor o servomotor (se escribe junto o separado) es un tipo especial de motor que permite manejar la posición del brazo del servo en un momento dado hacia una posición dada. Esta diseñado para moverse determinada cantidad de grados y luego mantenerse fijo en una posición.
Un servomotor (o servo) es un tipo especial de motor con características especiales de control de posición. Al hablar de un servomotor se hace referencia a un sistema compuesto por componentes electromecánicos y electrónicos.
Como funciona un servo motor
Como se muestra en la imagen un sistema de servo motor posee un motor DC comun y corriente, el que se encarga de girar a una alta velocidad, pero una baja y casi nula fuerza o torque. Entonces el sistema de engranajes es el que hace bajar esa velocidad al motor DC y darle un mayor torque. Básicamente lo que antes describimos es un sistema de motor con motorreductor, pero el servo motor va más allá!.
El sistema de servo motor es controlado de forma electrónica por un tren de pulsos llamado en electrónica PWM, este tren de pulsos es interpretado por una placa electrónica que posee el servo motor, el cual le da la señal de voltaje necesario al motor DC para que este gire por cierto tiempo, y lo que al fin y al cabo desencadena en que este servo solo se mueva unos pocos grados dados por el usuario programador.
Si bien es cierto que en la foto no se muestra el servo SG90, si posee el mismo principio del servo de la foto, ya que se basan todos en una parte mecanica, y otra electrónica.
Servo motor SG90 con Arduino
A continuación se mostrará brevenemente en 2 etapas como es la conexión de un Arduino con un servo motor SG90, y como se programa para darle movimiento al servo motor con un codigo Arduino.
Conexión del servomotor SG90 con Arduino
Conectar un servo a Arduino es sencillo. El servo tiene tres cables, dos de alimentación (GND y Vcc) y uno de señal de control PWM (SIG).
Combinación de colores de los cables
- Café (GND), Rojo (Vcc) y Naranja (Sig)
- Negro (GND), Rojo (Vcc) y Blanco (Sig)
Por un lado, alimentamos el servo mediante el terminal GND ( Café o Negro) y Vcc (Rojo).
En general, la alimentación a los servos se realizará desde una batería o una fuente de alimentación externa que peude ser entre 5V y 6.5V, siendo 6V la tensión perfecta. Arduino puede llegar a proporcionar corriente suficiente para encender un servo pequeño como es el SG90, suficiente para hacer unos cuantos proyectos de prueba.
Sin embargo no dispone de corriente suficiente para actuar un servo grande (como el MG995). Incluso varios servos pequeños como el SG90, o hacer excesiva fuerza con ellos puede exceder la capacidad de corriente de Arduino, provocando su reinicio o si tienes mala suerte… quemarlo.
Por otro lado, finalmente, para el control conectamos el cable de señal (naranja / blanco) a cualquier pin digital de Arduino que sea PWM, aunque para este ejemplo lo conectaremos al pin 9.
Programación de un servomotor con Arduino
Para manejar servomotores como lo es el SG90 con Arduino es muy sencillo, ya que el IDE de Arduino ya viene por defecto con la librería «servo.h», que permite controlar simultáneamente hasta 12 servos motores en Arduino Uno o Nano y hasta 48 servos en Arduino Mega.
A continuación se mostrará un breve ejemplo de como funciona este servo motor con Arduino. Para ello incrementaremos el ángulo de 0 a 180º a razón de 1º cada 20 milisegundos, posteriormente realiza la operación contraria de 180º a 0º, para finalmente reiniciar el ciclo de forma continua.
// www.MechatronicStore.cl
#include <Servo.h> //Librería interna de Arduino para utilizar Servo motores
Servo myservo; // crea el objeto Servo bajo la variable myservo
int pos = 0; // declara e inicializa a la variable pos como la posición del servo
void setup() {
myservo.attach(9); // vincula el servo al pin digital 9
}
void loop() {
//varia la posicion de 0 a 180 grados, aumentando cada 20ms 1 grado
for (pos = 0; pos <= 180; pos += 1)
{
myservo.write(pos);
delay(20);
}
//varia la posicion de 180 a 0 grados, bajando cada 20ms 1 grado
for (pos = 180; pos >= 0; pos -= 1)
{
myservo.write(pos);
delay(20);
}
}
Características de Servo motor SG90 Tower Pro
- Dimensiones (L x W xH) = 22.0 x 11.5 x 27 mm (0.86 x 0.45 x 1.0 pulgadas)
- Peso: 9 gramos
- Grados de giro: 180°
- Peso con cable y conector: 10.6 gramos
- Torque: 1.8 Kg/cm
- Consumo en corriente: 550 mA
- Voltaje de operación: 4.0 a 7.2 volts
- Velocidad a 4.8 V: 0.12 seg / 60 º
- Conector universal para la mayoría de los receptores de radio control
- Método de accionamiento: PWM
- Rango PWM: 500-2400 micro segundos.
- Compatible con tarjetas como Arduino y microcontroladores que funcionan a 5 volts.
- Longitud del cable: 25cm
Cabe mencionar que si las caracteristicas técnicas de este servo motor se quedasen cortas para lo que requiere, tenemos el servo motor MG995 que tiene mayor torque.
Enlaces
Preguntas Frecuentes
¿Cómo funciona el control de posición del Servomotor SG90 mediante señales PWM y qué pines de Arduino son adecuados para ello?
El Servomotor SG90 se controla mediante una señal de Modulación por Ancho de Pulso (PWM). Esta señal es un tren de pulsos que se repite típicamente cada 20 milisegundos (frecuencia de 50 Hz). La duración del pulso dentro de ese período de 20 ms determina la posición angular del eje del servo:
- Un pulso de aproximadamente 500 microsegundos (µs) suele corresponder a la posición de 0 grados.
- Un pulso de aproximadamente 1500 µs suele corresponder a la posición central de 90 grados.
- Un pulso de aproximadamente 2400 µs (según las especificaciones de este modelo) suele corresponder a la posición de 180 grados.
En Arduino, puedes utilizar cualquier pin digital que soporte PWM (marcado con una tilde ‘~’, como los pines 3, 5, 6, 9, 10, 11 en un Arduino UNO) para enviar esta señal. La librería Servo.h
de Arduino simplifica enormemente este proceso, permitiéndote especificar el ángulo deseado (ej. myservo.write(90);
para 90 grados) y la librería se encarga de generar la señal PWM correcta.
¿Puedo alimentar de forma segura uno o varios servomotores SG90 directamente desde el pin de 5V de una placa Arduino?
Alimentar un solo servomotor SG90 para pruebas ligeras y sin mucha carga directamente desde el pin de 5V de un Arduino (cuando el Arduino está alimentado por USB o una fuente externa adecuada) es generalmente posible, ya que su consumo en reposo o con movimiento ligero es bajo (decenas de mA).
Sin embargo, hay consideraciones importantes:
- Corriente de Arranque/Pico: Al arrancar, cambiar de dirección rápidamente, o si se encuentra con una resistencia (carga), el SG90 puede consumir picos de corriente significativos (hasta 550 mA o más si se atasca, según las especificaciones).
- Múltiples Servos: Si intentas alimentar varios servomotores SG90 o si un solo servo va a trabajar bajo carga constante, el regulador de voltaje del Arduino (o la capacidad del puerto USB) no será suficiente. Esto puede causar reinicios del Arduino, comportamiento errático de los servos, o incluso dañar el regulador del Arduino.
- Recomendación: Para cualquier aplicación que no sea una prueba muy básica de un solo servo, es altamente recomendable utilizar una fuente de alimentación externa de 5V a 6V capaz de suministrar la corriente total necesaria para todos los servos (ej. una fuente de 5V con 1A o 2A de capacidad). Asegúrate de conectar el GND de esta fuente externa al GND del Arduino para tener una referencia de voltaje común.
El SG90 tiene un torque de 1.8 Kg/cm. ¿Qué significa esto en términos prácticos y para qué tipo de aplicaciones robóticas es adecuado este nivel de fuerza?
El torque de 1.8 Kg/cm (kilogramo por centímetro) es una medida de la fuerza de rotación del servo. Significa que, a una distancia de 1 centímetro desde el centro del eje de salida, el servo puede ejercer una fuerza equivalente al peso de 1.8 kilogramos antes de detenerse (stall torque).
En términos prácticos:
- Si colocas un brazo de 1 cm de largo en el eje del servo, puede levantar (o sostener contra la gravedad) un peso de hasta 1.8 Kg en el extremo de ese brazo.
- Si el brazo es más largo, la fuerza que puede ejercer en el extremo disminuye proporcionalmente (ej. a 2 cm, podría levantar ~0.9 Kg; a 0.5 cm, ~3.6 Kg, teóricamente).
Este nivel de torque es adecuado para:
- Aplicaciones Ligeras: Mover pequeños mecanismos, palancas o superficies de control en aeromodelismo ligero.
- Brazos Robóticos Pequeños: Para las articulaciones de brazos robóticos educativos que manipulan objetos muy livianos.
- Sistemas de Dirección: En pequeños robots móviles o coches RC donde las ruedas no ofrecen mucha resistencia.
- Apertura/Cierre de Pequeñas Compuertas o Tapas.
- Posicionamiento de Sensores Livianos.
No es adecuado para aplicaciones que requieran levantar pesos significativos, mover mecanismos pesados, o resistir fuerzas externas grandes. Para eso, necesitarías servos con mayor torque (como el MG995 mencionado).
¿El rango de giro de 180° del SG90 es un límite mecánico exacto o depende de la señal PWM enviada? ¿Puedo obtener un control más fino que solo grados enteros?
El rango de giro especificado de 180° es una aproximación general y su comportamiento real puede variar:
- Límite Mecánico vs. Electrónico: La mayoría de los servos SG90 tienen topes mecánicos internos que limitan físicamente la rotación a un poco más de 180 grados para evitar dañar el potenciómetro interno que mide la posición. Sin embargo, el rango útil controlable electrónicamente mediante la señal PWM está generalmente dentro de esos 180°.
- Rango PWM (500-2400µs): La especificación de «Rango PWM: 500-2400 micro segundos» es la que define el rango de control. Idealmente, 500µs correspondería a 0° y 2400µs a 180°. En la práctica, el rango exacto puede variar ligeramente de un servo a otro e incluso con el voltaje de alimentación. Algunos SG90 pueden no alcanzar los 180° exactos o podrían intentar ir un poco más allá con los valores extremos de PWM.
- Control Fino con
writeMicroseconds()
: La libreríaServo.h
de Arduino tiene la funciónmyservo.writeMicroseconds(pulso_us);
además demyservo.write(angulo_grados);
. UsarwriteMicroseconds()
te da un control mucho más fino sobre la posición del servo, ya que puedes especificar la duración exacta del pulso en microsegundos. Esto te permite encontrar el rango real de movimiento de tu servo específico y lograr posiciones intermedias con mayor precisión que usando solo grados enteros. Es recomendable experimentar conwriteMicroseconds()
para calibrar el rango de tu servo si necesitas precisión.
¿De qué material suelen ser los engranajes internos del servomotor SG90 y cómo afecta esto a su durabilidad y aplicaciones recomendadas?
Los servomotores SG90 estándar, como el Tower Pro 9g, típicamente utilizan engranajes de nylon (un tipo de plástico).
Esto tiene varias implicaciones:
- Ventajas del Nylon:
- Bajo Costo: Contribuye al precio económico del servo.
- Ligereza: Ayuda a mantener el peso total del servo en solo 9 gramos.
- Funcionamiento Silencioso (Relativamente): Los engranajes de nylon suelen ser más silenciosos que los metálicos.
- Desventajas y Limitaciones del Nylon:
- Menor Durabilidad bajo Carga: Los engranajes de nylon son más propensos a desgastarse, romperse o «barrerse» (perder dientes) si el servo se somete a cargas de torque elevadas, impactos bruscos, o si se fuerza más allá de sus límites mecánicos.
- No Ideal para Aplicaciones de Alto Estrés: No se recomiendan para aplicaciones donde el servo experimentará fuerzas constantes y significativas o movimientos rápidos y repetitivos bajo carga pesada.
- Aplicaciones Recomendadas: Son excelentes para prototipado, proyectos educativos, aeromodelismo ligero, y aplicaciones donde la carga es baja y no se esperan impactos.
Si necesitas mayor durabilidad y resistencia para aplicaciones más exigentes, deberías considerar servomotores con engranajes metálicos (identificados a menudo con «MG» en su nombre, como el MG995).
¿Cuál es la diferencia fundamental entre este servomotor SG90 (posicional de 180°) y un «servomotor de rotación continua» (a veces llamado SG90 360°)?
Aunque pueden parecer similares externamente, su funcionamiento y aplicación son muy diferentes:
- Servomotor SG90 Posicional (este modelo):
- Función: Diseñado para moverse a una posición angular específica dentro de un rango limitado (típicamente 0-180°) y mantener esa posición.
- Control: La señal PWM determina el ángulo deseado.
- Retroalimentación Interna: Contiene un potenciómetro interno que le informa a la electrónica de control la posición actual del eje, permitiéndole corregir y mantener la posición deseada.
- Aplicaciones: Posicionamiento de brazos robóticos, superficies de control en aviones, dirección de vehículos, etc.
- Servomotor de Rotación Continua (o «SG90 360° modificado»):
- Función: Un servo de rotación continua ha sido modificado (o está diseñado) para que no tenga topes mecánicos ni retroalimentación de posición. En lugar de controlar un ángulo, la señal PWM controla la velocidad y dirección de rotación continua del eje, similar a un motor DC con reductora pero con la electrónica de control de un servo.
- Control:
- Un pulso PWM alrededor del punto central (ej. ~1500µs) detiene el motor.
- Pulsos más cortos (ej. <1500µs) lo hacen girar en una dirección, y la velocidad aumenta a medida que el pulso se acorta.
- Pulsos más largos (ej. >1500µs) lo hacen girar en la dirección opuesta, y la velocidad aumenta a medida que el pulso se alarga.
- Sin Retroalimentación de Posición: No puede saber ni mantener un ángulo específico.
- Aplicaciones: Ruedas de pequeños robots móviles, cabrestantes, cualquier aplicación que requiera rotación continua con control de velocidad y dirección usando la interfaz de un servo.
Es crucial elegir el tipo correcto de servo para tu aplicación: posicional para ángulos específicos, continuo para movimiento rotatorio sin fin.
El voltaje de operación se especifica de 4.0 a 7.2 volts. ¿Cuál es el voltaje óptimo para el SG90 y qué sucede si opero fuera de este rango?
Si bien la especificación menciona un rango amplio, la mayoría de los servomotores SG90 están diseñados y probados para funcionar de manera óptima en un rango más conservador:
- Voltaje Óptimo/Común: La mayoría de los usuarios operan los SG90 entre 4.8V y 6.0V. A 4.8V (típico de 4 pilas AA NiMH recargables) ofrecen un buen equilibrio entre velocidad y torque. A 6.0V (típico de 4 pilas AA alcalinas o una fuente BEC de 6V) pueden ofrecer un torque y velocidad ligeramente superiores.
- Operar por Debajo de 4.8V (ej. a 4.0V): El servo podría funcionar, pero el torque y la velocidad se verán reducidos significativamente. Podría no tener suficiente fuerza para la aplicación o moverse muy lentamente.
- Operar por Encima de 6.0V (ej. hacia 7.2V):
- Riesgos: Aunque el servo pueda funcionar momentáneamente, operar un SG90 estándar (con engranajes de nylon y electrónica sencilla) a voltajes consistentemente por encima de 6V puede reducir su vida útil. La electrónica interna y el motor pueden sobrecalentarse, y los engranajes podrían sufrir mayor estrés. El consumo de corriente también aumentará.
- Recomendación: Es más seguro mantenerse dentro del rango de 4.8V a 6.0V para un rendimiento fiable y una mayor longevidad, a menos que tengas una hoja de datos específica del fabricante Tower Pro para este modelo exacto que garantice la operación segura a 7.2V de forma continua.
Para la mayoría de los proyectos con Arduino, alimentarlo con 5V (si el Arduino puede suministrar suficiente corriente) o una fuente externa de 5V-6V es la práctica más común y segura.
Gonzalo –
Producto en perfecto estado, funciona correctamente.