🛠 Variateur de luminosité LED en PWM
Objectifs
Faire varier la luminosité d'une LED par MLI/PWM (modulation de largeur d'impulsion) sur le Raspberry Pi 3 Model B. Comprendre le rapport cyclique, la différence entre PWM logiciel (toutes les broches, piloté par logicielle) et PWM matériel (disponible sur GPIO12/13/18/19 sur le Pi 3B, généré par le SoC), et réaliser un effet « respiration ».
Matériel
- Raspberry Pi 3 Model B sous Raspberry Pi OS Lite
- LED + résistance 330 Ω sur GPIO18 (broche physique 12 — broche PWM matérielle du BCM2837)
- Breadboard, câbles Dupont
gpiozero(préinstallé) pour la version logicielle- Option PWM matériel : accès à
/boot/firmware/config.txt
Code complet
Version simple avec PWM logiciel gpiozero (fonctionne sur n'importe quelle broche) :
#!/usr/bin/env python3
"""respiration.py — effet respiration sur LED GPIO18 (broche physique 12).
PWM logiciel gpiozero ; pour le PWM matériel voir plus bas."""
from gpiozero import PWMLED
from time import sleep
led = PWMLED(18, pwm=True) # GPIO18 accepte aussi le PWM matériel
while True:
for pas in range(0, 101, 5): # montée 0 -> 100 %
led.value = pas / 100.0
sleep(0.05)
for pas in range(100, -1, -5): # descente 100 % -> 0
led.value = pas / 100.0
sleep(0.05)
Pour le PWM matériel sur GPIO18, activer le overlay dans /boot/firmware/config.txt puis redémarrer :
echo 'dtoverlay=pwm-2chan,pin=18,func=2' | sudo tee -a /boot/firmware/config.txt
sudo reboot
Vérification attendue
La LED monte et descend progressivement en luminosité (effet respiration d'environ 4 s par cycle), sans paliers visibles. Avec sudo python3 respiration.py lancé en parallèle de watch -n1 cat /sys/class/pwm/*/* 2>/dev/null, on observe les fichiers PWM après activation du overlay. Une LED en PWM à 20 % paraît nettement plus sombre qu'à 80 % — la perception n'est pas linéaire, c'est normal.
Erreurs fréquentes
- Choisir une broche sans PWM matériel et s'étonner : GPIO12/13/18/19 seulement pour le PWM matériel sur Pi 3B ; ailleurs, le PWM logiciel consomme du CPU et peut jitter.
- Oublier
sudo rebootaprès ledtoverlay: aucun contrôleur PWM n'apparaît dans/sys/class/pwm. - Confondre GPIO18 (broche physique 12) et broche 18 (GPIO24) : vérifier le brochage.
- Valeur
led.valuehors de 0..1 :gpiozerol'ignore ou lève une erreur ; garderpas / 100.0. - LED toujours allumée à pleine intensité en PWM matériel : le pin n'est pas routé vers le PWM (mauvais
func=dans le overlay). - Sur une carte SBC type Banana Pi/Orange Pi de même connecteur : la correspondance des broches PWM diffère — se reporter à la fiche de la carte. >
Autres tutoriels pour cette carte
Exemples de code pour cette carte
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython