pwm-respiration.ino

Particle Boron · Fichier : pwm-respiration.ino · Langage : Arduino · Usage : Respiration de LED par PWM avec luminosité réglable à distance

Une LED PWM respire doucement vers une luminosité cible que l'on change à distance par Particle.function. Le lissage exponentiel évite les sauts brutaux, et le battement sinusoïdal donne un rendu vivant.

Matériel requis

Un module Particle Boron (nRF52840, Wi-Fi + Bluetooth LE, variante cellulaire le cas échéant) avec antenne embarquée. 1 LED + résistance 330 Ω (les broches du module sont en 3,3 V).

Câblage

Anode de la LED sur D0 via 330 Ω, cathode sur GND. D0 est une sortie PWM sur le module.

Fonctionnement

analogWrite applique le rapport cyclique ; la boucle filtre la consigne (lissage 5 % par pas de 10 ms) et module l'amplitude avec un sinus. regler() met à jour la cible depuis le cloud.

Exécution

Installer le CLI Particle (particle setup), particle flash --serial ou OTA (particle flash <nom> firmware.bin). L'application Device Cloud ou l'API REST complete le deploiement.

Variantes

Enchaîner plusieurs canaux pour un éclairage d'ambiance, ou asservir sur un capteur de luminosité (LDR sur 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".

← Retour à la fiche