pwm-respiration.ino

Particle Photon · 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 Photon (Wi-Fi 2,4 GHz, microcontrôleur STM32, blindage métallique) alimenté par USB ou VIN. 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

Avec le CLI Particle : particle flash --serial (mode DFU, double reset) ou flash OTA une fois la carte en ligne. Le mode Safe Mode (reset + WiFi) sert au dépannage.

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