pwm-fade.ino

Arduino Pro Mini · Fichier : pwm-fade.ino · Langage : Arduino · Usage : Faire varier progressivement la luminosité d'une LED (respiration)

La LED montéesur une broche PWM (9) monte et descend en luminosité comme une respiration. analogWrite() génère un signal PWM 8 bits (0-255) dont le rapport cyclique pilote la brillance moyenne de la LED.

Matériel requis

Une Arduino Pro Mini (ATmega328P, existe en 5 V/16 MHz et 3,3 V/8 MHz) reliée à un convertisseur USB-série (FTDI) ou un programmeur ICSP. 1 LED + résistance 330 Ω.

Câblage

Anode de la LED vers la broche 9 via la résistance 330 Ω, cathode vers GND. La broche 9 est une sortie PWM sur les cartes AVR classiques.

Fonctionnement

analogWrite() configure un timer matériel qui hache le signal à environ 500 Hz. La valeur 0-255 fixe le rapport cyclique ; la boucle la fait varier en triangle entre 0 et 255.

Exécution

Choisissez « Arduino Pro Mini » dans l'IDE (5 V/16 MHz ou 3,3 V/8 MHz selon votre modèle), le processeur ATmega328P, le bon port, puis Téléverser. Le convertisseur doit être câblé DTR-DTR, RX-TX, TX-RX, VCC-VCC, GND-GND.

Variantes

Ajoutez un potentiomètre sur A0 pour piloter la luminosité avec analogRead() x, ou appliquez un gamma (valeur² / 255) pour une montée plus naturelle.

pwm-fade.ino

// Effet "respiration" : variation progressive de la LED par PWM.
const int LED = 9; // broche PWM (marquee ~ sur les cartes AVR)

int valeur = 0;
int pas = 4;
const int PAUSE = 15; // ms entre deux paliers

void setup() {
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  analogWrite(LED, valeur);      // PWM 8 bits : 0..255
  Serial.println(valeur);

  valeur += pas;
  if (valeur >= 255) { valeur = 255; pas = -pas; } // sommet : on redescend
  if (valeur <= 0)   { valeur = 0;   pas = -pas; } // bas : on remonte

  delay(PAUSE);
}

// Sur les AVR, analogWrite() pilote les timers 0, 1 et 2 :
// broches 5, 6, 9, 10, 11, 3 selon la carte. La perception de la
// luminosite est logarithmique : pour un rendu plus naturel,
// remplacer valeur par (valeur * valeur) / 255 (gamma 2).

← Retour à la fiche