pwm-respiration.ino

Arduino UNO R4 Minima · Fichier : pwm-respiration.ino · Langage : Arduino · Usage : Respiration de LED avec PWM et fréquence ajustable

Le core du R4 expose analogWriteFrequency() (comme le Due) : le PWM de la LED se fixe à 20 kHz pour éliminer tout scintillement visible en vidéo. La courbe gamma rend la respiration naturelle à l'œil.

Matériel requis

Une Arduino UNO R4 Minima (Renesas RA4M1, Cortex-M4 @ 14 MHz, 5 V, DAC 12 bits, sans radio) alimentée par USB ou 6-24 V. 1 LED + résistance 330 Ω.

Câblage

Anode sur D9 via 330 Ω, cathode vers GND. La plupart des broches digitales du R4 sont PWM.

Fonctionnement

analogWriteFrequency reconfigure le timer matériel, analogWrite applique le rapport cyclique 8 bits ; la boucle rampe en triangle avec puissance 2,2.

Exécution

Arduino IDE 2.x (core « Arduino UNO R4 Boards » installé), choisir « Arduino UNO R4 Minima », sélectionner le port et Téléverser. Le moniteur série est à 9600.

Variantes

Piloter la consigne par le DAC ou une commande série, ou étendre à trois LED (dégradé RGB) avec trois broches PWM.

pwm-respiration.ino

// Respiration LED sur D9 (PWM) avec gamma et frequence reglables.
const int LED = 9;

float niveau = 0, pas = 0.02;
unsigned long t0 = 0;

void setup() {
  pinMode(LED, OUTPUT);
  analogWriteFrequency(LED, 20000);  // 20 kHz : inaudible et LED-friendly
  analogWriteResolution(8);          // consignes 0..255
  Serial.begin(9600);
}

void loop() {
  if (millis() - t0 < 10) return;
  t0 = millis();

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

  // Gamma 2.2 pour une perception lineaire a l'oeil.
  float gamma = powf(niveau, 2.2f);
  analogWrite(LED, (int)(gamma * 255));
}

← Retour à la fiche