🛠 Variation d'intensité d'une LED avec le PWM matériel (GPIO18)
Objetivos
Domar la modulación de ancho de pulso (PWM): hacer «respirar» un LED variando el ciclo de trabajo. El BCM2835 del Model B+ expone una salida PWM por hardware en GPIO18 (pin 12) —la única del conector de 40 pines disponible por defecto— garantizada sin parpadeos incluso bajo carga de CPU.
Material
- Raspberry Pi Model B+ con Raspberry Pi OS legacy de 32 bits
- 1 LED + resistencia de 330 Ω
- Cables Dupont: pin 12 (GPIO18) → resistencia → LED → pin 14 (GND)
- Opcionalmente un transistor NPN (BC547) para controlar una tira de LEDs, GPIO18 en la base a través de una resistencia de 1 kΩ
Código completo
sudo apt install -y python3-rpi.gpio
sudo python3 fade.py
#!/usr/bin/env python3
"""Respiration LED sur GPIO18 (PWM matérielle) — Model B+."""
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
p = GPIO.PWM(18, 200) # 200 Hz : inodore pour l'œil
p.start(0)
try:
while True:
up = range(0, 101, 5) # rampe montante
down = range(95, -1, -5) # rampe descendante
for dc in list(up) + list(down):
p.ChangeDutyCycle(dc) # 0 % = éteinte, 100 % = pleine
time.sleep(0.05)
finally:
p.stop
GPIO.cleanup
Verificación esperada
El LED sube y baja de brillo en bucle, sin parpadeo perceptible. Un osciloscopio en GPIO18 muestra una señal cuadrada a 200 Hz cuyo ciclo de trabajo evoluciona. Ctrl+C detiene el programa correctamente.
Errores frecuentes
- PWM por software en otro pin: posible con RPi.GPIO, pero el BCM2835 mono-núcleo produce parpadeos bajo carga — preferir GPIO18.
- Frecuencia demasiado baja (unos pocos Hz): el LED parpadea en lugar de variar su brillo.
- Olvidar p.stop: residuo de señal después de Ctrl+C fuera del bloque finally.
- Confundir PWM con salida analógica: el B+ no tiene ningún convertidor analógico-digital ni DAC; el PWM no son más que señales rápidas de todo-o-nada.
Otros tutoriales para esta placa
- Allumer une LED depuis la GPIO 17 avec libgpiod
- Lire un bouton et afficher les appuis dans la console
- Premier script Python : faire clignoter la LED
- Interroger un capteur I2C (BME280) sur le bus du 40 broches
- Mettre le B+ en réseau par Ethernet et piloter en SSH
- Amorçage microSD, pannes de boot et procédure de recouvrement
Ejemplos de código para esta placa
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython