pwm-respiration.ino

Arduino UNO R4 Minima · Archivo : pwm-respiration.ino · Lenguaje : Arduino · Uso : Respiration de LED avec PWM et fréquence ajustable

El core del R4 expone analogWriteFrequency() (como el Due): el PWM del LED se fija a 20 kHz para eliminar el parpadeo visible en vídeo. La curva gamma hace la respiración natural al ojo.

Hardware

Un Arduino UNO R4 Minima (Renesas RA4M1, Cortex-M4 @ 14 MHz, 5 V, DAC de 12 bits, sin radio) alimentado por USB o 6-24 V. 1 LED + resistencia de 330 Ω.

Cableado

Ánodo a D9 mediante 330 Ω, cátodo a GND. La mayoría de pines digitales del R4 son PWM.

Funcionamiento

analogWriteFrequency reconfigura el temporizador, analogWrite aplica el ciclo de trabajo de 8 bits; el bucle sube en triángulo con potencia 2,2.

Ejecución

Arduino IDE 2.x (con el core « Arduino UNO R4 Boards » instalado), elige « Arduino UNO R4 Minima », selecciona el puerto y Subir. El monitor serie está a 9600.

Variantes

Gobernar la consigna por el DAC o una orden serie, o ampliar a tres LED (degradado RGB) con tres pines 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));
}

← Volver a la ficha