🛠 Variation d'intensité d'une LED avec un signal PWM
Objectifs
Faire varier l'intensité d'une LED (respiration lumineuse) avec un signal PWM généré par l'Orange Pi 3B. La fiche officielle indique PWM sur le connecteur 40 broches ; la broche PWM exacte à utiliser >
Matériel
- Orange Pi 3B sous Armbian (noyau récent), 5 V / 3 A
- 1 LED de puissance ou LED classique + résistance adaptée, idéalement un transistor NPN (2N2222) si LED puissante
- Broche PWM du connecteur 40 broches (voir avertissement ci-dessus), masse commune
Code complet
# 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
Vérification attendue
La LED monte puis redescend progressivement en luminosité. cat $P/duty_cycle suit les valeurs écrites ; le cycle complet dure environ 6 secondes.
Erreurs fréquentes
- Écrire dans
/sys/class/pwm/...sanssudo(les fichiers appartiennent à root) ou sans exporter le canal d'abord : « Permission denied » / fichier inexistant. - Période trop grande : en dessous de ~100 Hz on voit le papillotement ; restez à quelques kHz.
- Dépasser le courant admissible de la broche (quelques mA) avec une LED puissante : passez par un transistor.
- Choisir une broche qui n'est pas réellement multiplexée en PWM sur le RK3566 : vérifier le plan officiel et les overlays device tree disponibles.
Autres tutoriels pour cette carte
- 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)
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash