🛠 Capteur de lumière avec seuil et hystérésis
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
- Arduino Esplora + câble micro-USB.
- Bibliothèque Esplora.
- Optionnel : une lampe de poche pour tester le seuil.
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
- 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é.
- 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. - 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.
- Buzzer qui siffle en continu : appelez
Esplora.tone(f, duree)avec durée, ou pensez ànoTone; sans durée le son reste bloqué. - 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
joystick-couleur.inoArduinojeu-boutons.inoArduinoslider-luminosite.inoArduinothermometre-couleur.inoArduinosonometre.inoArduinoaccelerometre-tilt.inoArduino