🛠 Variation d'intensité d'une LED en PWM
Objectifs
Faire varier l'intensité d'une LED par MLI (PWM) sur le Model B Rev 2 : le GPIO18 (P1-12) est la broche PWM matérielle du BCM2835 ; on utilisera ici l'objet PWM de RPi.GPIO pour un fondu progressif.
Matériel
- Raspberry Pi Model B Rev 2, Raspbian legacy 32 bits
- LED + résistance 330 Ω sur GPIO18 (P1-12) vers GND
sudo apt install python-rpi.gpio- Rappel : pas de convertisseur numérique-analogique sur la carte ; le PWM est la seule façon simple de « simuler » une tension variable.
Code complet
#!/usr/bin/env python
# fondu.py - balayage PWM sur GPIO18 (broche PWM materielle du BCM2835)
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
p = GPIO.PWM(18, 1000) # 1 kHz
p.start(0)
try:
while True:
for duty in list(range(0, 101, 5)) + list(range(95, -5, -5)):
p.ChangeDutyCycle(duty) # variation du rapport cyclique
time.sleep(0.02)
except KeyboardInterrupt:
pass
finally:
p.stop
GPIO.cleanup
Vérification attendue
La LED monte puis descend en luminosité en boucle (fondu « respiration »). À l'arrêt (Ctrl-C), elle s'éteint complètement. Un oscilloscope sur GPIO18 montrerait un créneau à 1 kHz dont le rapport cyclique évolue.
Erreurs fréquentes
- Oublier
p.stoppuisGPIO.cleanup: la LED reste allumée à pleine intensité après le script. - Mettre une fréquence trop basse (quelques Hz) : scintillement visible, l'œil le perçoit.
- Confondre GPIO18 (PWM matériel) et GPIO17 : le fondu fonctionne en logiciel sur d'autres broches, mais seule la 18 a le PWM dur.
- Résistance trop forte (au-delà de 1 kΩ) : LED à peine visible même à 100 %.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython