pwm-respiration.ino

Arduino UNO R4 WiFi · 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 WiFi (Renesas RA4M1 @ 14 MHz + ESP32-S3 Wi-Fi/BLE compañero, matriz LED 12x8, LED RGB) 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 », placa « Arduino UNO R4 WiFi », puerto serie y Subir. El coprocesador ESP32-S3 se actualiza aparte si el IDE lo pide.

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