🛠 Variateur de lumière : PWM matériel sur GPIO18
Objectifs
- Comprendre le PWM : fréquence et rapport cyclique pour simuler une tension analogique.
- Utiliser la sortie PWM matériel (GPIO18, broche 12 du connecteur 26 broches).
- Réaliser un fondu d'allumage (breathing LED) en Python.
Matériel
- Raspberry Pi Model A, LED + résistance 330 Ω sur GPIO18.
- Raspberry Pi OS legacy ; le PWM matériel peut nécessiter
dtoverlay=pwmdans config.txt selon l'image. - Alimentation saine : le polyfuse du Model A n'aime pas les surconsommations.
Code complet
#!/usr/bin/env python3
"""Fondu PWM matériel sur GPIO18 (broche 12)."""
import RPi.GPIO as GPIO, time
PIN = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(PIN, GPIO.OUT)
p = GPIO.PWM(PIN, 500) # 500 Hz
p.start(0)
try:
while True:
for d in list(range(0, 101, 5)) + list(range(95, -5, -5)):
p.ChangeDutyCycle(d) # rapport cyclique 0..100 %
time.sleep(0.03)
except KeyboardInterrupt:
pass
finally:
p.stop
GPIO.cleanup
# Vérifier le brochage PWM matériel
pinout # ou consulter https://pinout.xyz
Vérification attendue
La LED monte et descend progressivement en luminosité sans clignotement perceptible. À 0 % elle est éteinte, à 100 % pleine intensité ; seule la broche 12 (GPIO18) offre le PWM matériel sur le connecteur 26 broches.
Erreurs fréquentes
- Appliquer le PWM sur une broche sans capacité matérielle : RPi.GPIO bascule alors en PWM logiciel, moins stable.
- Oublier
p.stop/GPIO.cleanup: la broche reste occupée au rejeu du script. - Fréquence trop basse (quelques Hz) : scintillement visible, la LED parait clignoter.
- Confondre broche 12 et GPIO12 : c'est bien la physique 12 qui porte GPIO18/PWM.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython