← Retour au chapitre

Étape 1 / 3

Qu'est-ce que le PWM ?

Signal carré, duty cycle, pins ~ : allumer/éteindre 490 fois par seconde.

Chapitres précédents non terminés
Pour un apprentissage optimal, termine d'abord : Boutons et entrées digitales

Le signal PWM : allumer/éteindre 490 fois par seconde

L'Arduino ne sait produire que 0V (LOW) ou 5V (HIGH) sur ses pins digitales. Pas de valeur intermédiaire ! Alors comment faire varier la luminosité d'une LED ?

L'astuce s'appelle PWM (Pulse Width Modulation, modulation de largeur d'impulsion) : au lieu d'envoyer une tension fixe, l'Arduino allume et éteint le pin très rapidement — environ 490 fois par seconde (pins ~3, ~9, ~10, ~11) ou 980 fois (pins ~5, ~6). L'œil humain ne voit pas ce clignotement ultra-rapide et fait la moyenne.

Analogie : imagine une lampe que tu allumes et éteins des centaines de fois par seconde. Si elle est allumée 50 % du temps, ton œil perçoit une luminosité à 50 %. C'est exactement ce que fait le PWM !

Le duty cycle (rapport cyclique)

Le duty cycle est le pourcentage du temps pendant lequel le signal est à HIGH. Un duty cycle de 0 % = LED éteinte, 100 % = LED à fond. Joue avec le slider pour voir l'effet :

Signal PWM — Pin D9

Duty cycle : 50% analogWrite : 128
5V (HIGH)0V (LOW)
0%100%

Luminosité : 50%

0%

analogWrite(9, 0)

LED éteinte

50%

analogWrite(9, 127)

Mi-luminosité

100%

analogWrite(9, 255)

Pleine puissance

Quels pins supportent le PWM ?

Sur l'Arduino UNO, seules 6 pins digitales supportent le PWM. Elles sont marquées d'un ~ (tilde) sur la carte :

~3 ~5 ~6 ~9 ~10 ~11

Attention : si tu appelles analogWrite() sur un pin non PWM (ex: D4, D7), ça ne produira pas d'erreur mais le résultat est imprévisible — la LED sera soit éteinte, soit allumée à fond. Pas de variation progressive possible !

Ne te laisse pas tromper par le nom :analogWrite() ne produit pas une tension analogique. C'est un signal digital qui alterne entre 0V et 5V très vite. Le nom est trompeur, mais le résultat (variation de luminosité) est le même !

La fonction analogWrite()

analogWrite(pin, valeur) envoie un signal PWM sur le pin spécifié. La valeur va de 0 (toujours LOW, 0 %) à 255 (toujours HIGH, 100 %).

// Syntaxe : analogWrite(pin, valeur);
// La valeur va de 0 (éteint) à 255 (pleine puissance)

analogWrite(9, 0);    // 0 %  → LED éteinte
analogWrite(9, 64);   // 25 % → LED faible
analogWrite(9, 127);  // 50 % → LED à mi-luminosité
analogWrite(9, 255);  // 100 % → LED pleine puissance

// ⚠ Ces lignes sont des exemples séparés.
// Chaque appel REMPLACE le précédent immédiatement.
// En pratique, on n'appelle analogWrite
// qu'une seule fois avec la valeur souhaitée.

Astuce : pas besoin de pinMode(pin, OUTPUT) avant d'appeler analogWrite() — la fonction configure automatiquement le pin en sortie. Mais c'est une bonne habitude de le faire quand même, pour la lisibilité du code.

Exercice : complète le code PWM

Remplis les trous pour allumer une LED à pleine puissance avec PWM :

1. Quel pin PWM utiliser ? (marqué ~ sur la carte)

pinMode( , OUTPUT);

2. Quelle fonction pour envoyer un signal PWM ?

(9, 127); // 50 % luminosité

3. Quelle valeur pour la luminosité maximale (100 %) ?

analogWrite(9, ); // LED à fond

À retenir

  • PWM = allumer/éteindre un pin très rapidement pour simuler une tension intermédiaire.
  • Le duty cycle (0-100 %) détermine la puissance perçue.
  • analogWrite(pin, 0-255) envoie le signal PWM.
  • Pins PWM sur l'UNO : ~3, ~5, ~6, ~9, ~10, ~11 — les autres ne fonctionnent pas.
  • analogWrite ne produit pas une vraie tension analogique — c'est un signal digital ultra-rapide.

Valide cette étape quand tu as terminé la lecture et la manipulation.

Première étape du chapitre Exo 6 : Respiration — fade in/out →

Electro-Lab - support pédagogique Arduino (MVP).

IFOSUP Wavre - Cours Drones et Robotique.