🛠 Variation d'intensité d'une LED avec le PWM

Raspberry Pi 5 (model-5) · intermediaire · Schéma : IMG-model-5-intermediaire-1-model5-i1-pwm-led.svg — LED sur GPIO18 (broche physique 12, PWM matériel) avec résistance 470 Ω, effet de respiration lumineuse

Objetivos

Hacer variar la intensidad luminosa de un LED mediante la modulación de ancho de pulso (PWM). En la Raspberry Pi 5, el PWM por hardware está disponible en los GPIO 12, 13, 18 y 19, todos controlados por el chip RP1. Se realiza un efecto de «respiración» (breathing LED) en Python con gpiozero.

Material

Código completo

#!/usr/bin/env python3
# breathe.py — effet respiration sur LED PWM (GPIO18 = broche physique 12)
# PWM materiel Pi 5 : GPIO 12, 13, 18, 19 (pilotés par la puce RP1).
from gpiozero import PWMLED
from time import sleep

led = PWMLED(18, freq=1000)        # 1 kHz : imperceptible pour l'œil

try:
    while True:
        # montée progressive de 0 % à 100 %
        for duty in range(0, 101, 2):
            led.value = duty / 100.0
            sleep(0.02)
        # descente progressive de 100 % à 0 %
        for duty in range(100, -1, -2):
            led.value = duty / 100.0
            sleep(0.02)
except KeyboardInterrupt:
    led.off

Alternativa en línea de comandos con el PWM por hardware exportado:

echo 18 | sudo tee /sys/class/pwm/pwmchip0/export
sleep 0.2
echo 1000000 | sudo tee /sys/class/pwm/pwmchip0/pwm0/period
echo 500000 | sudo tee /sys/class/pwm/pwmchip0/pwm0/duty_cycle
echo 1 | sudo tee /sys/class/pwm/pwmchip0/pwm0/enable

Verificación esperada

El LED se intensifica y luego se atenúa en bucle, sin parpadeo visible. Con la variante sysfs, el LED permanece al 50 % de luminosidad (duty_cycle = la mitad del periodo).

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales