← Retour au chapitre

Étape 2 / 3

Exo 6 : Respiration — fade in/out

analogWrite(0-255) dans une boucle for — effet respiration et heartbeat.

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

Faire respirer une LED

Maintenant qu'on connaît le PWM, on va l'utiliser pour créer un effet respiration : la LED s'allume progressivement puis s'éteint, en boucle. C'est le même effet qu'on retrouve sur les MacBook en veille ou les notifications de smartphones.

Le principe : une boucle for fait monter la valeur de 0 à 255 (fade in), puis une autre la fait descendre de 255 à 0 (fade out). Le tout dans loop() pour que ça se répète à l'infini.

Effet recherché

analogWrite : 0

Schéma du circuit

Le circuit est ultra-simple : une LED et sa résistance de protection, branchées sur un pin PWM (~D9). Identique à un circuit LED classique, sauf qu'on utilise un pin PWM pour varier la luminosité.

D9~ → R 220Ω → LED → GND

D9 ~220Ω

Montage pas à pas

LED verte en colonne 18 (rangée c/d), résistance 220Ω verticale traversant le fossé central (d→g).

++151015202530abcdeabcdefghijfghij151015202530++
100%

Code : effet respiration

Deux boucles for se suivent : la première fait monter i de 0 à 255 (fade in), la seconde le fait descendre de 255 à 0 (fade out). Le delay(10) entre chaque palier donne un cycle complet d'environ 5 secondes (256 × 10ms × 2).

const int LED = 9;  // Pin PWM ~9

void setup() {
  pinMode(LED, OUTPUT);
}

void loop() {
  // Fade in : luminosité croissante
  for (int i = 0; i <= 255; i++) {
    analogWrite(LED, i);
    delay(10);
  }
  // Fade out : luminosité décroissante
  for (int i = 255; i >= 0; i--) {
    analogWrite(LED, i);
    delay(10);
  }
}

Astuce : change le delay(10) pour accélérer ou ralentir la respiration. delay(5) = respiration rapide, delay(20) = respiration lente.

Exercice : complète le fade

Remplis les trous pour créer l'effet respiration :

1. La boucle doit monter jusqu'à quelle valeur max ?

for (int i = 0; i <= ; i++) {

2. Quelle fonction envoie la luminosité au pin PWM ?

  (LED, i);

Défis bonus

💓 Défi : Battement de cœur (heartbeat)

Un vrai cœur bat en deux pulsations rapprochées, suivies d'une longue pause. Crée une fonction heartbeat() qui fait un premier fade rapide (fort), une courte pause, un second fade (plus faible), puis une longue pause.

Inspiration pour le heartbeat
void heartbeat() {
  // 1re pulsation
  for (int i = 0; i <= 255; i += 5) {
    analogWrite(9, i); delay(3);
  }
  for (int i = 255; i >= 0; i -= 5) {
    analogWrite(9, i); delay(3);
  }
  delay(100);
  // 2e pulsation (plus courte)
  for (int i = 0; i <= 180; i += 5) {
    analogWrite(9, i); delay(3);
  }
  for (int i = 180; i >= 0; i -= 5) {
    analogWrite(9, i); delay(3);
  }
  delay(600);  // pause entre les battements
}

🎭 Défi : Fade asymétrique

Fais un fade in lent (delay 20ms) et un fade out rapide (delay 5ms). L'effet est plus dramatique !

🔄 Défi : Multi-LED

Branche 2 LEDs sur deux pins PWM différentes (~9 et ~10). Fais-les respirer en alternance : quand l'une monte, l'autre descend.

À retenir

  • Le fade utilise une boucle for qui incrémente la valeur de 0 à 255 puis la décrémente.
  • analogWrite(pin, i) dans la boucle change la luminosité à chaque palier.
  • Le delay() entre chaque palier contrôle la vitesse de la respiration.
  • 256 paliers × 10ms = ~2.5 secondes par fade. Un cycle complet (in + out) = ~5 secondes.

Au prochain chapitre…

Tu as remarqué que pendant le fade, le programme est bloqué dans les boucles for + delay() ? Impossible de lire un bouton ou de faire clignoter une autre LED en même temps !

Au chapitre suivant, tu découvriras millis() — une technique pour gérer le temps sans bloquer le programme. Tu pourras faire clignoter plusieurs LEDs à des rythmes différents, en même temps. Le vrai multitâche Arduino !

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

← Qu'est-ce que le PWM ?Exo 7 : DJ Dimmer — potentiomètre →

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

IFOSUP Wavre - Cours Drones et Robotique.