Hacklab ASU logo Hacklab ASUHacer, reparar, aprender juntos
Electrónica

Cómo usar un servomotor con Arduino sin que tiemble

Conectas el servomotor con Arduino, subes el ejemplo de barrido y el servo tiembla, zumba o, peor, la placa se reinicia cada vez que el brazo se mueve.

A small blue micro servo wired to an Arduino board on a breadboard with a capacitor and an external power supply on a workbench

Conectas el servomotor con Arduino, subes el ejemplo de barrido y el servo tiembla, zumba o, peor, la placa se reinicia cada vez que el brazo se mueve. Es uno de los fallos más comunes en el taller, y casi nunca es culpa del código: suele ser la alimentación, la masa o un rango de pulsos mal elegido.

En el hacklab hemos montado servos en brazos robóticos, cerraduras, comederos para gatos y hasta en un panel que sigue al sol. Esta guía recoge lo que funciona con el SG90 de 2 euros y con el MG996R de engranajes metálicos, paso a paso y con números concretos.

Qué necesitas para usar un servomotor con Arduino

  • Una placa Arduino Uno, Nano o similar.
  • Un micro servo SG90 (unos 9 gramos, par de 1,8 kg·cm) o un MG996R (unos 55 gramos, par de unos 10 kg·cm).
  • Una fuente externa de 5 a 6 voltios capaz de dar al menos 1 amperio por servo pequeño y 2,5 amperios por servo grande.
  • Un condensador electrolítico de 470 a 1000 microfaradios y al menos 10 voltios.
  • Una protoboard y cables. Si todavía dudas con las filas y los carriles, repasa cómo usar una protoboard paso a paso.

Los servos traen tres cables. El marrón o negro es masa, el rojo es alimentación y el naranja o amarillo es la señal.

Cómo conectar el servo paso a paso

  1. Señal al pin 9. Cualquier pin digital sirve con la librería Servo, pero en el Uno la librería desactiva el PWM de los pines 9 y 10, así que conviene usar uno de ellos para el propio servo.
  2. Rojo a la fuente externa de 5 voltios, no al pin de 5 voltios del Arduino, salvo para una prueba rápida con un solo SG90 sin carga.
  3. Marrón a la masa de la fuente y, muy importante, une esa masa con un pin GND del Arduino. Sin masa común la señal no tiene referencia y el servo se vuelve loco.
  4. Condensador entre rojo y marrón, lo más cerca posible del servo, respetando la polaridad: la pata más corta a masa.

En el programa, incluye la librería Servo que viene con el IDE, crea un objeto, llama a attach con el número de pin en setup y luego usa write con un ángulo entre 0 y 180. Con eso ya tienes movimiento.

Por qué el servomotor con Arduino tiembla o reinicia la placa

Un SG90 consume unos 10 miliamperios en reposo, pero al arrancar o cuando está bloqueado puede pedir entre 500 y 700 miliamperios durante un instante. Un MG996R puede superar los 2 amperios. El regulador de un Arduino alimentado por USB apenas da 500 miliamperios en total, compartidos con la propia placa.

Cuando el servo pide más de lo que hay, la tensión cae de golpe, el microcontrolador se reinicia y el ciclo se repite. Por eso ves movimientos a tirones o el LED de la placa parpadeando como si arrancara una y otra vez. Es el mismo tipo de problema que explicamos en por qué tu primer proyecto con Arduino falla sin razón aparente.

Otras causas del temblor

  • Cables largos o finos. Por encima de 30 centímetros, la señal recoge ruido. Trenza los tres cables o acórtalos.
  • Carga excesiva. Si el brazo pesa demasiado, el servo oscila buscando la posición. Revisa el par antes de diseñar.
  • Escribir el ángulo sin parar. Llamar a write dentro de loop con valores que cambian por ruido de un potenciómetro produce vibración. Filtra la lectura o actualiza solo si cambia más de 2 grados.

Ajustar el rango real de pulsos

Un servo se controla con pulsos que se repiten unas 50 veces por segundo. La librería asume por defecto que 0 grados son unos 544 microsegundos y 180 grados unos 2400. Muchos servos baratos no llegan a esos extremos o los superan, y entonces el motor golpea contra su tope interno y zumba.

La solución es pasar el mínimo y el máximo a attach. Así lo calibramos nosotros:

  1. Empieza con attach usando 1000 y 2000 microsegundos, un rango seguro para casi cualquier servo.
  2. Usa writeMicroseconds y baja el mínimo de 50 en 50 hasta que el servo deje de moverse o empiece a zumbar. Anota el último valor bueno y súmale 20.
  3. Haz lo mismo subiendo el máximo.
  4. Usa esos dos números en attach. En nuestros SG90 suelen salir valores entre 600 y 2300.

Con el rango calibrado, el servo deja de forzar en los extremos, gasta menos corriente y dura bastante más.

Por qué no siempre conviene usar el pin de 5 voltios

Muchos tutoriales conectan el servo directamente al pin de 5 voltios del Arduino y funciona en el vídeo. Por eso se repite tanto. Nosotros no lo recomendamos salvo para comprobar que el servo se mueve, y no por exceso de precaución.

En el vídeo el servo gira en el aire, sin carga. En cuanto le pones un brazo, una tapa o una rueda, el consumo se multiplica y aparecen los reinicios. Además, alimentar picos de corriente a través del USB del portátil no es buena idea para el puerto. Con dos servos ya es casi seguro que falle.

Una fuente de 5 voltios y 2 amperios cuesta unos 6 euros y te ahorra horas de depuración. Para más de cuatro servos, un módulo PCA9685 con su propia alimentación reparte la señal por I2C y libera pines. Si además controlas cargas de red en el mismo proyecto, separa bien las alimentaciones, como contamos al hablar del módulo relé con Arduino.

Un proyecto sencillo para practicar

Conecta un potenciómetro de 10 kilohmios al pin A0 y usa map para convertir la lectura de 0 a 1023 en un ángulo de 0 a 180. Añade un pequeño filtro: guarda el último ángulo y solo escribe si el nuevo difiere en 2 grados o más. Tendrás un mando que mueve el servo con suavidad, sin temblores, y una base para un brazo robótico de dos ejes.

Servos de rotación continua

Algunos servos, como el FS90R, giran sin parar. En ellos write no fija un ángulo sino la velocidad: 90 es parado, 0 y 180 son máxima velocidad en cada sentido. Si tu servo no se detiene en 90, busca un pequeño tornillo de ajuste o prueba valores entre 88 y 92.

Preguntas frecuentes

¿Puedo alimentar un servo directamente desde el Arduino?

Para una prueba con un solo micro servo sin carga, sí. En cualquier montaje real es mejor una fuente externa de 5 a 6 voltios con la masa unida al Arduino. Así evitas reinicios y proteges el puerto USB.

¿Por qué mi servo hace ruido aunque esté quieto?

Suele estar intentando llegar a un ángulo que su tope mecánico no permite, o soporta una carga que lo empuja. Calibra el rango de pulsos y revisa el peso que mueve. Si sigue, prueba a desconectar la señal con detach cuando no necesites que mantenga la posición.

¿Cuántos servos puedo controlar con un Arduino Uno?

La librería Servo admite hasta 12 servos en un Uno. El límite real suele ser la alimentación, no los pines. Para muchos servos, un controlador PCA9685 maneja 16 canales con solo dos cables de datos.

LB
Lucía Benítez

Lucía empezó reparando radios viejas en la mesa de la cocina y hoy escribe sobre circuitos, Arduino y radiofrecuencia sin dar nada por sabido.

More posts by Lucía

More in Electrónica

01doorganico 084goad 3hot8 4465456 after5internprogram ahandfulofblessings ahmadpc ahomcybersecurity allodialresources annodex antiquesandperiodcollectibles aotc asianworldkashmir beedlectrics bloggertemplatefree bluefeatheragency bodyweightsolution campaign08blog carfixadvisor catstreetcollective cbstvsports cnfanspurchasing committeeof500yearsofdignityandresistance covertopsdjs cs-kaiyuangame cuestacomunicaciontotal cxoutlet dancebetgame deskgearhub destinyvillastay detectmagazine di33 diamondsteelbuildings donmo dyanadropship emarsysfinance emimattl escapechan eskitarih evautoplay everythingweddings-orlando farmzone feedviewerapp foxstudiosscratch gamevui123 gleasongrade greetingsday haskell iw-kaiyun jagoanproperti jilidskripsi joltbusinessfinance juegodepokergratis juegospucca kaeru-festival latestmehndidesigns lestanzediottaviano litemagazines localcommunityhero lustrsazan mariashebets menswheels newwebstechs1 nikkit ootheday oxigenvpn plurfitness prefetial probudgetcarpetcleaning psychicmrsmartin pyaten qvantor rejoignezlogis rexzbot riselayouts ruchin rwxqsgd5 sakaltime shibiaowang shop-bot skrtips strcoding tetapatrium topselller uneplanteartificielle vipertechcr webtech1223411 wo-kygaming yamaha-mekar yeknava yoybuysheets zenunwa yamaha-mekar jilidskripsi ankertoto ankertoto ankertoto ankertoto