pwm-respiration.ino

Teensy 3.2 · Archivo : pwm-respiration.ino · Lenguaje : Arduino · Uso : Respiration de LED avec PWM et fréquence personnalisable

El LED respira con una curva gamma 2,2 adaptada a la percepción del ojo. En Teensy, analogWriteFrequency() permite elegir la frecuencia PWM (aquí 3 kHz) para evitar el silbido audible de los drivers de LED.

Hardware

Un Teensy 3.2 (NXP Kinetis MK20DX256, Cortex-M4 @ 72 MHz, lógica de 3,3 V) alimentado por USB. 1 LED + resistencia de 330 Ω (calculada para 3,3 V).

Cableado

Ánodo del LED al pin 5 mediante 330 Ω, cátodo a GND. La mayoría de pines Teensy son PWM.

Funcionamiento

analogWriteFrequency() reconfigura el temporizador hardware; analogWrite() aplica el ciclo de trabajo 0-255. El valor pasa por una potencia 2,2 para una subida natural.

Ejecución

Instala el plugin Teensyduino en el Arduino IDE, elige la placa « Teensy 3.2 », pulsa Subir y luego el botón del Teensy Loader. Atención: pines de 3,3 V.

Variantes

Controla el brillo con touchRead() o un sensor de luz, o amplía a varios LED respirando desfasados.

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));
}

← Volver a la ficha