pwm-servo.py

Raspberry Pi Pico W · Archivo : pwm-servo.py · Lenguaje : Python · Uso : Faire balayer un servo-moteur avec un signal PWM

El servo de ángulo barre de 0 a 180° y vuelve, controlado por PWM a 50 Hz con machine.PWM. La función angle() convierte los grados en un impulso de 0,5 a 2,5 ms mediante duty_u16, la técnica estándar sin librería dedicada.

Hardware

Una Raspberry Pi Pico W (RP2040 + chip radio Wi-Fi de 2,4 GHz) con MicroPython instalado, alimentada por USB. 1 servo de ángulo tipo SG90 (3 hilos: señal, +, -); alimentación externa aconsejada por encima de un micro servo.

Cableado

Hilo de señal (naranja) a GP16, + (rojo) a 5 V o fuente externa de 5 V, - (marrón) a GND común.

Funcionamiento

PWM(Pin) genera una señal cuadrada de 50 Hz (periodo 20 ms). duty_u16 fija el ancho de impulso proporcional: 0,5 ms = 0°, 1,5 ms = 90°, 2,5 ms = 180°.

Ejecución

Instala la versión MicroPython « Pico W » (BOOTSEL + .uf2) y copia el script vía Thonny. Como el LED de usuario lo gestiona el chip de radio, los ejemplos de salida usan un LED externo.

Variantes

Controla el ángulo con un potenciómetro en el ADC (GP26) para un brazo seguidor, o memoriza posiciones en una tabla de ángulos.

pwm-servo.py

# Balayage 0-180 degres d'un servo d'angle avec machine.PWM.
from machine import Pin, PWM
import time

SERVO_PIN = 16
servo = PWM(Pin(SERVO_PIN))
servo.freq(50)  # periode 20 ms : standard des servos

def angle(a):
    # 0 degre = impulsion 0,5 ms ; 180 degres = 2,5 ms.
    # duty_u16 : 65535 = 100 % de la periode de 20 ms.
    ms = 0.5 + (a / 180.0) * 2.0
    servo.duty_u16(int(ms / 20.0 * 65535))

print("Balayage servo 0-180")
while True:
    for a in range(0, 181, 5):
        angle(a)
        time.sleep_ms(30)
    for a in range(180, -1, -5):
        angle(a)
        time.sleep_ms(30)

# Alimentation : pour un gros servo, utiliser une source 5 V
# externe en reliant les masses (GND commun avec la carte).

← Volver a la ficha