🛠 Variateur d'intensité : faire varier une LED en PWM matériel
Objetivos
Utilizar la salida PWM por hardware del BCM2711 (el SoC dispone de un PWM por hardware) para variar la luminosidad de un LED: ciclo de trabajo, frecuencia, respiración (breathing). Activarás el overlay de device tree y luego lo controlarás desde la línea de comandos y en Python.
Material
- Raspberry Pi 4B, LED, resistencia de 330 ohmios
- GPIO18 = pin físico 12 (canal PWM por hardware 0)
- sudo apt install gpiod python3-gpiozero
Código completo
# 1) Activer le PWM : sudo raspi-config -> Interface Options -> PWM
# ou ajouter dtoverlay=pwm-2chan dans /boot/firmware/config.txt
sudo reboot
gpioset --pwm gpiochip0 18=100=0 # 0 % de rapport cyclique
for d in 100 75 50 25 0; do echo "Duty $d %"; gpioset --pwm gpiochip0 18=$d=0; sleep 1; done
# breathing.py - respiration de la LED via gpiozero
from gpiozero import PWMLED
from signal import pause
led = PWMLED(18) # GPIO18, PWM materiel
led.pwm_frequency = 1000 # Hz
led.source = "pulse" # oscillation continue du rapport cyclique
pause
Verificación esperada
El LED se atenúa progresivamente en cada paso del shell, y luego respira continuamente con el script de Python. Al 0 % está apagado, al 100 % a plena potencia; el ojo percibe la variación gracias a una frecuencia de varios cientos de Hz.
Errores frecuentes
- Elegir un pin sin PWM por hardware: el overlay solo se enruta a GPIO12/13/18/19.
- Olvidar dtoverlay=pwm y luego gpioset --pwm: la línea rechaza el flag pwm.
- Confundir frecuencia (velocidad del ciclo) y ciclo de trabajo (proporción de estado alto): es el duty el que controla la luminosidad.
- Frecuencia demasiado baja (< 100 Hz): el LED parpadea visiblemente.
- Confusión entre pin físico/BCM: pin 12 = GPIO18.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython