pwm-respiration.ino

Teensy 4.1 · Fichier : pwm-respiration.ino · Langage : Arduino · Usage : Respiration de LED avec PWM et fréquence personnalisable

La LED respire avec une courbe de gamma 2,2 adaptée à la perception de l'œil. Sur Teensy, analogWriteFrequency() permet de choisir la fréquence PWM (ici 3 kHz) pour éviter tout sifflement audible des pilotes de LED.

Matériel requis

Un Teensy 4.1 (NXP i.MX RT1062, Cortex-M7 @ 600 MHz, logique 3,3 V, Ethernet et stockage flash additionnel) alimenté par USB. 1 LED + résistance 330 Ω (calculée pour 3,3 V).

Câblage

Anode de la LED sur la broche 5 via 330 Ω, cathode vers GND. La plupart des broches Teensy sont PWM.

Fonctionnement

analogWriteFrequency() reconfigure le timer matériel ; analogWrite() applique le rapport cyclique 0-255. La valeur est passée par une puissance 2,2 pour une montée naturelle.

Exécution

Teensyduino dans l'Arduino IDE, carte « Teensy 4.1 », Téléverser puis bouton du Teensy Loader. Broches 3,3 V ; le 4.1 ajoute Ethernet, USB host et broches supplémentaires.

Variantes

Piloter la luminosité avec touchRead() ou un capteur de luminosité, ou étendre à plusieurs LED en respiration déphasée.

pwm-respiration.ino

// Respiration LED : analogWrite() + analogWriteFrequency() (Teensy).
const int LED = 5; // broche PWM (la plupart des broches Teensy le sont)

float niveau = 0.0;
float pas = 0.02;
unsigned long derniereEtape = 0;
const unsigned long PERIODE = 10; // ms entre deux paliers

void setup() {
  pinMode(LED, OUTPUT);
  analogWriteFrequency(LED, 3000); // 3 kHz : au-dessus du sifflement
  analogWriteResolution(8);        // consignes 0..255
  Serial.begin(9600);
}

void loop() {
  if (millis() - derniereEtape < PERIODE) return;
  derniereEtape = millis();

  niveau += pas;
  if (niveau >= 1.0) { niveau = 1.0; pas = -pas; }
  if (niveau <= 0.0) { niveau = 0.0; pas = -pas; }

  // Gamma 2.2 : la perception visuelle est non lineaire.
  float gamma = pow(niveau, 2.2);
  analogWrite(LED, (int)(gamma * 255));
  Serial.println((int)(gamma * 255));
}

← Retour à la fiche