pwm-respiration.ino

Particle Photon · Archivo : pwm-respiration.ino · Lenguaje : Arduino · Uso : Respiration de LED par PWM avec luminosité réglable à distance

Un LED PWM respira suavemente hacia un brillo objetivo que se cambia a distancia con Particle.function. El suavizado exponencial evita saltos bruscos y el latido sinusoidal da un aspecto vivo.

Hardware

Un módulo Particle Photon (Wi-Fi 2,4 GHz, microcontrolador STM32, blindaje metálico) alimentado por USB o VIN. 1 LED + resistencia de 330 Ω (los pines del módulo son de 3,3 V).

Cableado

Ánodo del LED a D0 mediante 330 Ω, cátodo a GND. D0 es una salida PWM en el módulo.

Funcionamiento

analogWrite aplica el ciclo de trabajo; el bucle filtra la consigna (suavizado del 5 % por paso de 10 ms) y modula la amplitud con un seno. regler() actualiza el objetivo desde la nube.

Ejecución

Con el CLI de Particle: particle flash --serial (modo DFU, doble reset) o flash OTA cuando la placa esté en línea. El Safe Mode (reset + WiFi) sirve para depurar.

Variantes

Encadenar varios canales para iluminación de ambiente, o regular en lazo cerrado con un sensor de luz (LDR en A0).

pwm-respiration.ino

// Respiration LED sur D0 (broche PWM) + reglage via Particle.function.
const int LED = D0;   // sortie PWM (timer) sur le module

int niveauCible = 128;   // 0..255, reglable a distance
float niveau = 0;
unsigned long derniereEtape = 0;

int regler(String args) {
  int v = args.toInt();
  if (v >= 0 && v <= 255) { niveauCible = v; return v; }
  return -1;
}

void setup() {
  pinMode(LED, OUTPUT);
  Particle.function("luminosite", regler);
  Serial.begin(9600);
}

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

  // Rampe vers la consigne + leger battement sinusoidal.
  static float phase = 0;
  phase += 0.06;
  float battement = 0.25 * sin(phase);
  niveau += (niveauCible * (0.75 + battement) - niveau) * 0.05;

  analogWrite(LED, constrain((int)niveau, 0, 255));
}

// Regler depuis le cloud : Particle.function "luminosite" avec "200".

← Volver a la ficha