🛠 Variation d'intensité d'une LED avec le PWM matériel
Objetivos
Variar la intensidad de un LED mediante modulación de ancho de pulso (PWM) en la Raspberry Pi 3 A+: PWM por hardware en GPIO18 (pin 12, señal «PWM» del conector de 40 pines) frente a PWM por software con gpiozero, ciclo de trabajo y frecuencia.
Material
- Raspberry Pi 3 A+ con Raspberry Pi OS Bookworm, LED + resistencia de 330 Ω
- LED + 330 Ω entre GPIO18 (pin 12) y GND (pin 14); cualquier GPIO sirve para PWM por software
sudo apt install python3-gpiozero
Código completo
#!/usr/bin/env python3
# pwm_led.py — respiration de LED (GPIO18 = PWM matériel)
from gpiozero import PWMLED
from time import sleep
led = PWMLED("GPIO18", pwm=True) # GPIO18 = broche 12, PWM matériel
led.pwm_frequency = 100 # Hz ; défaut gpiozero : 100 Hz
# respiration : montée puis descente du rapport cyclique
for i in range(0, 101, 5):
led.value = i / 100.0 # 0.0 = éteinte, 1.0 = pleine
sleep(0.05)
for i in range(100, -1, -5):
led.value = i / 100.0
sleep(0.05)
# clignotement précis piloté par le contrôleur PWM matériel
led.blink(on_time=0.5, off_time=0.5, fade_in_time=0.2, fade_out_time=0.2)
sleep(5)
led.off
python3 pwm_led.py
# Vérifier le brochage PWM : le site de référence du connecteur 40 broches
Verificación esperada
El LED aumenta progresivamente su luminosidad durante ~1 s, luego disminuye y parpadea con transiciones suaves. Con un multímetro en GPIO18, la tensión media sigue el ciclo de trabajo (≈1,65 V al 50 % sobre una base de 3,3 V).
Errores frecuentes
- Confundir PWM por hardware (GPIO18, también GPIO12/13/19) y PWM por software (cualquier GPIO, menos preciso): en la 3 A+ el controlador por hardware es único y compartido.
- Frecuencia demasiado baja (<50 Hz): el LED empieza a parpadear visiblemente.
- Olvidar la resistencia: al 100 % del ciclo de trabajo, la corriente supera los límites del pin.
- En los servomotores, imponer
pwm_frequency = 50; por defecto, a 100 Hz el servo vibra o se quema.
Otros tutoriales para esta placa
- Allumer une LED en C avec libgpiod sur le GPIO 40 broches
- Bouton poussoir et retour console avec gpiozero
- Premier script Python : inventaire du système
- Capteur I2C : température et pression avec BME280
- Connexion WiFi station et administration en SSH
- Démarrage SD/USB et récupération d'une carte qui ne boot plus
Ejemplos de código para esta placa
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython