🛠 Variateur de lumière : PWM matériel sur GPIO18
Objetivos
- Comprender el PWM: frecuencia y ciclo de trabajo para simular una tensión analógica.
- Utilizar la salida PWM por hardware (GPIO18, pin 12 del conector de 26 pines).
- Realizar un efecto de encendido gradual (breathing LED) en Python.
Material
- Raspberry Pi Model A, LED + resistencia de 330 Ω en GPIO18.
- Raspberry Pi OS legacy; el PWM por hardware puede requerir
dtoverlay=pwmen config.txt según la imagen. - Alimentación adecuada: el fusible rearmable (polyfuse) del Model A no tolera sobrecargas.
Código completo
#!/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
Verificación esperada
El LED sube y baja progresivamente en luminosidad sin parpadeo perceptible. Al 0 % está apagado, al 100 % a plena intensidad; solo el pin 12 (GPIO18) ofrece PWM por hardware en el conector de 26 pines.
Errores frecuentes
- Aplicar PWM a un pin sin capacidad por hardware: RPi.GPIO cambia entonces a PWM por software, menos estable.
- Olvidar
p.stop/GPIO.cleanup: el pin queda ocupado al volver a ejecutar el script. - Frecuencia demasiado baja (unos pocos Hz): parpadeo visible, el LED parece parpadear.
- Confundir el pin 12 y GPIO12: es efectivamente el pin físico 12 el que lleva GPIO18/PWM.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython