🛠 Variateur de luminosité LED en PWM

Raspberry Pi 3 Model B (model-3b) · intermediaire · Schéma : IMG-model-3b-intermediaire-1-model3b-pwm-led.svg — LED sur GPIO18 (broche 12, broche PWM matérielle du BCM2837) avec résistance, signal PWM en dents de scie et variation du rapport cyclique

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

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

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels