🛠 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

Objetivos

Hacer variar la luminosidad de un LED mediante MLI/PWM (modulación de ancho de pulso) en la Raspberry Pi 3 Model B. Comprender el ciclo de trabajo, la diferencia entre PWM por software (todos los pines, controlado por software) y PWM por hardware (disponible en GPIO12/13/18/19 en el Pi 3B, generado por el SoC), y realizar un efecto de «respiración».

Material

Código completo

Versión sencilla con PWM por software gpiozero (funciona en cualquier pin):

#!/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)

Para el PWM por hardware en GPIO18, active el overlay en /boot/firmware/config.txt y reinicie:

echo 'dtoverlay=pwm-2chan,pin=18,func=2' | sudo tee -a /boot/firmware/config.txt
sudo reboot

Verificación esperada

El LED sube y baja progresivamente su luminosidad (efecto de respiración de aproximadamente 4 s por ciclo), sin escalones visibles. Con sudo python3 respiration.py ejecutándose en paralelo a watch -n1 cat /sys/class/pwm/*/* 2>/dev/null, se observan los archivos PWM tras la activación del overlay. Un LED en PWM al 20 % parece notablemente más oscuro que al 80 % — la percepción no es lineal, es normal.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales