🛠 Variation d'intensité d'une LED en PWM

Raspberry Pi 3 Model B+ (2018) — Fiche carte · intermediaire · Schéma : IMG-model-3b-plus-intermediaire-1-model3bp-pwm-led.svg — LED sur GPIO18 (broche 12, PWM matériel) avec résistance, dégradé lumineux illustrant le rapport cyclique

Objectifs

Comprendre la modulation de largeur d'impulsion (PWM) : une sortie numérique ne fait que 0 ou 3,3 V, mais en hachant très vite on module la puissance moyenne. Vous utiliserez le PWM matériel du connecteur 40 broches (GPIO18, broche 12) et un « breathing LED » en Python, puis le PWM matériel via pigpio en C.

Matériel

Code complet

#!/usr/bin/env python3
"""Respiration LED sur GPIO18 (broche PWM matérielle)."""
from gpiozero import PWMLED
from time import sleep

led = PWMLED(18)          # PWM : valeur de 0.0 (éteinte) à 1.0 (pleine)
while True:
    for pas in range(0, 101, 2):      # montée 0 -> 100 %
        led.value = pas / 100.0
        sleep(0.02)
    for pas in range(100, -1, -2):    # descente 100 -> 0 %
        led.value = pas / 100.0
        sleep(0.02)
/* Version PWM matérielle : gcc servo.c -o servo -lpigpio (pigpiod lancé).
   50 Hz, impulsions 1-2 ms : la même mécanique pilote un servomoteur. */
#include <pigpio.h>
#include <stdio.h>

int main(void) {
    if (gpioInitial < 0) { fprintf(stderr, "démarrer pigpiod d'abord\n"); return 1; }
    int pulse_us = 1000, dir = 20;
    for (int i = 0; i < 250; i++) {
        gpioHardwarePWM(18, 20000, pulse_us * 10); /* 50 Hz, pulse en 0,1 us */
        if (pulse_us <= 1000 || pulse_us >= 2000) dir = -dir;
        pulse_us += dir;
        timeSleep(20000);
    }
    gpioHardwarePWM(18, 0, 0);   /* couper le PWM avant de sortir */
    gpioTerminate;
    return 0;
}

Vérification attendue

La LED monte et descend en luminosité de façon continue (« respiration » d'environ 2 s par cycle) sans crénelage visible. Avec la version C, l'oscilloscope logique (ou une appli smartphone) montre un créneau de 50 Hz dont la largeur varie entre 1 et 2 ms. pigs rgr 18 affiche la configuration PWM active.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels