🛠 Capteur de lumière avec seuil et hystérésis

Arduino Esplora — Fiche de carte · intermediaire · Schéma : IMG-esplora-intermediaire-1-esplora-capteur-lumiere-hysteresis.svg — Courbe d'hystérésis superposée à l'Esplora, avec la LED RVB verte en mode jour et rouge en mode nuit et les deux seuils annotés.

Objectifs

Exploiter sérieusement le capteur de lumière embarqué (une LDR lue sur le canal 5 du multiplexeur analogique) : mise à l'échelle, filtrage par moyenne glissante et hystérésis pour éviter le clignotement autour du seuil. C'est le schéma de base de tout système d'alerte sur capteur analogique, et l'Esplora le rend sans un seul fil.

Matériel

Code complet

/* Veilleur de lumiere : la LED RVB passe au vert le jour, au rouge la nuit.
   - moyenne glissante sur 8 mesures (le mux impose des lectures sequentielles)
   - hysteresis de 60 points pour ne pas osciller autour du seuil.
   NB : le capteur est une LDR, 1023 = très eclaire, 0 = obscurite. */
#include <Esplora.h>

const int SEUIL_ALLUMAGE = 350;   // sous ce niveau -> mode nuit
const int SEUIL_EXTINCTION = 410; // au-dessus -> mode jour (hysteresis)
const int N = 8;                  // taille de la fenetre de moyenne

unsigned long mesures[N];
size_t idx = 0;
bool jour = true;

unsigned long moyenne {
  unsigned long s = 0;
  for (size_t i = 0; i < N; i++) s += mesures[i];
  return s / N;
}

void setup {
  Serial.begin(9600);
  for (size_t i = 0; i < N; i++) mesures[i] = Esplora.readLightSensor;
}

void loop {
  mesures[idx] = Esplora.readLightSensor;
  idx = (idx + 1) % N;
  unsigned long lum = moyenne;

  if (jour && lum < SEUIL_ALLUMAGE) {
    jour = false;                       // bascule en nuit
    Esplora.writeRGB(255, 0, 0);
    Esplora.tone(440, 120);             // bip court sur le buzzer (D6)
  } else if (!jour && lum > SEUIL_EXTINCTION) {
    jour = true;                        // retour au jour
    Esplora.writeRGB(0, 255, 0);
  }

  Serial.print("lum="); Serial.print(lum);
  Serial.println(jour ? "  JOUR" : "  NUIT");
  delay(100);
}

Vérification attendue

À lumière du jour, la LED est verte. Bouchez le capteur avec le doigt : sous ~350, la LED passe au rouge avec un bip bref. Relâchez à moitié : la LED reste rouge jusqu'à 410 (hystérésis) — sans cet écart, elle basculerait frénétiquement. La moyenne glissante lisse les pics (un claquement de main devant le capteur ne déclenche plus d'erreur de mesure franche).

Erreurs fréquentes

  1. Seuil identique en montée et descente : oscillation permanente autour du seuil ; l'écart d'hystérésis (ici 60 points) est obligatoire sur un capteur bruité.
  2. Moyenne recalculée sur une fenêtre non remplie : initialisez le tampon avec de vraies mesures dans setup, sinon les premiers cycles sont faussés par des zéros.
  3. Oublier la nature LDR : la réponse est logarithmique en éclairement réel ; un seuil en valeur ADC n'est pas linéaire en lux — re-réglez vos seuils pour VOTRE environnement.
  4. Buzzer qui siffle en continu : appelez Esplora.tone(f, duree) avec durée, ou pensez à noTone ; sans durée le son reste bloqué.
  5. Lire d'autres capteurs entre-temps sans délai : chaque changement de canal du multiplexeur a un temps d'établissement ; la bibliothèque s'en occupe, mais ne recréez pas la lecture en analogRead(A4) direct sans respecter ce délai.

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels