🛠 Variation d'intensité d'une LED avec un signal PWM
Objetivos
Hacer variar la intensidad de un LED (respiración luminosa) con una señal PWM generada por la Orange Pi 3B. La ficha oficial indica PWM en el conector de 40 pines; el pin PWM exacto a utilizar > SIN VERIFICAR: consulte la definición oficial del pinout (imagen del pinout V2.1 en orangepi.org) y ls /sys/class/pwm/.
Material
- Orange Pi 3B con Armbian (kernel reciente), 5 V / 3 A
- 1 LED de potencia o LED estándar + resistencia adecuada, idealmente un transistor NPN (2N2222) si el LED es potente
- Pin PWM del conector de 40 pines (ver advertencia anterior), masa común
Código completo
# 1. Repérer les contrôleurs PWM exposés
ls /sys/class/pwm/ # pwmchip0, pwmchip1...
# 2. Réserver un canal (exemple : canal 0 du pwmchip0)
echo 0 | sudo tee /sys/class/pwm/pwmchip0/export
# 3. Signal : période 20 kHz (en ns), puis rapport cyclique 0..period
sudo sh -c 'echo 50000 > /sys/class/pwm/pwmchip0/pwm0/period'
sudo sh -c 'echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable'
# 4. Respiration lumineuse (fade)
#!/bin/bash
P=/sys/class/pwm/pwmchip0/pwm0
for p in $(seq 0 500 50000); do echo $p | sudo tee $P/duty_cycle >/dev/null; sleep 0.03; done
for p in $(seq 50000 -500 0); do echo $p | sudo tee $P/duty_cycle >/dev/null; sleep 0.03; done
Verificación esperada
El LED sube y luego baja progresivamente en luminosidad. cat $P/duty_cycle sigue los valores escritos; el ciclo completo dura aproximadamente 6 segundos.
Errores frecuentes
- Escribir en
/sys/class/pwm/...sinsudo(los archivos pertenecen a root) o sin exportar primero el canal: «Permission denied» / archivo inexistente. - Periodo demasiado grande: por debajo de ~100 Hz se observa parpadeo; manténgase en unos pocos kHz.
- Superar la corriente admisible del pin (unos pocos mA) con un LED potente: utilice un transistor.
- Elegir un pin que no esté realmente multiplexado como PWM en el RK3566: verifique el plan oficial y los overlays de device tree disponibles.
Otros tutoriales para esta placa
- Faire clignoter une LED via le GPIO avec libgpiod
- Lire un bouton poussoir et afficher l'état dans la console
- Premier script Python : bouton + LED avec python3-libgpiod
- Interroger un capteur I2C sur les broches 3/5 du connecteur
- Configurer Ethernet gigabit et Wi-Fi puis se connecter en SSH
- Booter sur un SSD NVMe et récupérer une carte bloquée (MaskROM)
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash