Publicado 2026-04-18
Esta guía proporciona un recorrido práctico y completo para controlar un estándarservomotor utilizando una computadora de placa única Raspberry Pi. Aprenderá el cableado exacto, el código Python y la configuración PWM necesarios para lograr un control angular preciso, según pruebas del mundo real y documentación oficial de hardware.
Raspberry Pi (cualquier modelo con pines GPIO, por ejemplo, 3B+, 4B o 5)
Tarjeta MicroSD con sistema operativo Raspberry Pi (Bookworm o posterior)
Estándar 5Vservomotor (comúnmente utilizado en robótica amateur)
Fuente de alimentación externa de 5 V (2 A o más): la mayoríaservos consume alta corriente
Cables de puente (hembra a hembra)
Potenciómetro pequeño (opcional, por ejemplo de control manual)
> Nota del mundo real: En una configuración típica de aula o de aficionado, los usuarios suelen dañar su Raspberry Pi al alimentar el servo directamente desde el pin de 5V. Esta guía muestra el método correcto de aislamiento de energía.
Un servomotor estándar no gira continuamente. En cambio, se mueve a un ángulo específico (generalmente de 0° a 180°) basado en una señal PWM (modulación de ancho de pulso). La Raspberry Pi genera esta señal en un pin GPIO.
Parámetros críticos (de hojas de datos de servos y documentación oficial de Raspberry Pi):
Frecuencia de señal: 50 Hz (período = 20 ms)
Ancho de pulso para 0°: 0,5 ms (ciclo de trabajo = 2,5%)
Ancho de pulso para 90°: 1,5 ms (ciclo de trabajo = 7,5%)
Ancho de pulso para 180°: 2,5 ms (ciclo de trabajo = 12,5%)
Estos valores son estándares de la industria para la mayoría de los servos analógicos y digitales. Verifique siempre con la hoja de datos de su servo; existen pequeñas variaciones.
Nunca alimente el servo directamente desde el pin de 5V de la Raspberry Pi.Un servo típico puede consumir entre 200 y 800 mA durante el movimiento y las corrientes máximas superan 1 A. El pin de 5 V de la Raspberry Pi está conectado directamente a la entrada USB y sólo puede suministrar unos 500 mA de forma fiable (menos en modelos más antiguos). Consumir más corriente puede provocar una caída de voltaje, congelación del sistema o daños permanentes.
Cableado correcto (probado con configuraciones comunes):
Por qué el terreno común es obligatorio:La señal de control del servo (0–3,3 V del Pi) y la alimentación del servo (5 V del suministro externo) deben compartir un voltaje de referencia. Sin una base común, la señal se vuelve indefinida y el servo vibrará o no se moverá.
El sistema operativo Raspberry Pi viene con Python preinstalado. Existen dos métodos confiables para generar señales PWM precisas. El método recomendado para principiantes es utilizarRPi.GPIOcon hardware PWM en pines específicos.
Hardware Pines GPIO compatibles con PWM en el encabezado de 40 pines de Raspberry Pi:
GPIO12 (pin 32) – canal PWM 0
GPIO13 (pin 33) – canal PWM 1
GPIO18 (pin 12) – Canal PWM 0 (el más utilizado)
GPIO19 (pin 35) – canal PWM 1
![]()
Habilite la interfaz PWM (si usa hardware PWM):No se necesitan pasos adicionales: el hardware PWM siempre está disponible. Para el software PWM (cualquier pin), no se requiere configuración, pero la sincronización puede ser menos estable.
A continuación se muestra un script Python completo y probado que mueve el servo a tres ángulos (0°, 90°, 180°) con una pausa de 2 segundos entre cada uno. Este código sigue la documentación oficial de RPi.GPIO.
importar RPi.GPIO como tiempo de importación GPIO # Usar numeración de pines BCM GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) # Configurar GPIO18 como salida PWM servo_pin = 18 GPIO.setup(servo_pin, GPIO.OUT) # Crear instancia de PWM a 50 Hz pwm = GPIO.PWM(servo_pin, 50) pwm.start(0) # Comenzar con 0% ciclo de trabajo def set_servo_angle(ángulo): """ Convertir ángulo (0-180) en ciclo de trabajo (2,5 a 12,5) Fórmula: trabajo = (ángulo / 180)10 + 2.5 Verificado con múltiples hojas de datos de servos """ si el ángulo es 180: ángulo = 180 servicio = (ángulo / 180,0)10.0 + 2.5 pwm.ChangeDutyCycle(duty) # Permitir que el servo alcance la posición time.sleep(0.5) # Detener el envío de señal para reducir la fluctuación (opcional) pwm.ChangeDutyCycle(0) time.sleep(0.1) intente: while True: print("Moviéndose a 0°") set_servo_angle(0) time.sleep(2) print("Moviéndose a 90°") set_servo_angle(90) time.sleep(2) print("Moviéndose a 180°") set_servo_angle(180) time.sleep(2) excepto KeyboardInterrupt: print("Detenido por el usuario") pwm.stop() GPIO.cleanup()
Detalle clave:Después de cada posición, el código establece el ciclo de trabajo en 0% y espera 0,1 segundos. Esto evita el consumo continuo de energía y reduce la fluctuación del servo. Muchos ejemplos en línea omiten esto, lo que provoca un consumo de corriente innecesario.
Guarde el guión comoservo_control.py. En la terminal, ejecuta:
python3 servo_control.py
Comportamiento esperado:El eje del servo gira a 0°, hace una pausa de 2 segundos, se mueve a 90°, hace una pausa, se mueve a 180° y luego repite.
Si el servo no se mueve:
Verifique los puntos en común: el error más frecuente
Verifique que la fuente de alimentación externa esté encendida y proporcione al menos 5 V
Confirme el número de pin GPIO (BCM 18 = pin físico 12)
Reducir el tiempo de sueño despuésCambiar ciclo de trabajo? No – el servo necesita ~300-500 ms para alcanzar la posición
Para proyectos interactivos, puede leer un potenciómetro analógico utilizando un ADC MCP3008 (ya que Raspberry Pi no tiene entradas analógicas). Sin embargo, un método más sencillo de prueba es utilizar la entrada del teclado:
importar RPi.GPIO como tiempo de importación GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(18, GPIO.OUT) pwm = GPIO.PWM(18, 50) pwm.start(0) def ángulo_to_duty(ángulo): retorno (ángulo / 180.0) * 10.0 + 2.5 prueba: while True: cmd = input("Ingrese el ángulo (0-180) o 'q' para salir: ") if cmd == 'q': break try: ángulo = float(cmd) if 0
Punto central repetido:Para controlar de forma segura y precisa un servo con una Raspberry Pi, debe (1) usar una fuente de alimentación externa de 5 V para el servo, (2) conectar una tierra común entre Pi, el servo y la fuente de alimentación, (3) generar una señal PWM de 50 Hz con ciclos de trabajo correspondientes a pulsos de 0,5 a 2,5 ms y (4) detener la señal PWM (0% de servicio) después de cada movimiento para reducir la fluctuación y el consumo de energía.
Pasos de acción para aplicar esta guía:
1. Reúna los componentes enumerados anteriormente; no se requieren marcas específicas, cualquier servo estándar de 5 V funciona.
2. Conecte exactamente como se muestra, verificando nuevamente la conexión a tierra común.
3. Copie el script de Python y ejecútelo. Observe cómo el servo se mueve a 0°, 90° y 180°.
4. Modifique los valores de los ángulos en el guión para que coincidan con las necesidades de su proyecto.
5. Para cualquier proyecto de producción o de larga duración, utilice siempre hardware PWM y agregue un condensador electrolítico de 100 a 470 µF a través de las líneas de alimentación del servo para suavizar los picos de voltaje.
Fuentes confiables para mayor verificación:Documentación oficial de Raspberry Pi (/documentation/computers/os.html#gpio-and-the-40-pin-header) y la hoja de datos del servomotor (generalmente disponible en el sitio web del fabricante). Consulte siempre el rango de ancho de pulso de su servo específico; mientras que 0,5–2,5 ms es el estándar, algunos servos usan 0,7–2,3 ms. Un script de calibración simple que barre el servo y registra los límites reales le brindará una precisión perfecta.
Hora de actualización: 2026-04-18
Comuníquese con el especialista en productos de Kpower para recomendarle un motor o caja de cambios adecuado para su producto.