🛠 Thermomètre de lumière : LDR, seuils et hystérésis
Objectifs
Monter un vrai capteur analogique (photodépendance LDR en pont diviseur), calibrer un seuil en conditions réelles avec le Moniteur série, et éviter l'oscillation autour du seuil grâce à l'hystérésis. Niveau intermédiaire : on passe de « lire » à « interpréter ».
Matériel
- 1 Arduino UNO R3 + câble USB-B
- 1 LDR + 1 résistance 10 kΩ (pont diviseur : 5 V — LDR — A1 — 10 kΩ — GND)
- 1 LED + 330 Ω sur la pin 12 (témoin d'obscurité)
- Une source de lumière variable (lampe de bureau) pour la calibration.
Code complet
// LDR sur A1 (pont diviseur avec 10 k), LED témoin sur pin 12.
const uint8_t LDR = A1;
const uint8_t TEMOIN = 12;
// Hystérésis : deux seuils distincts pour éviter le clignotement.
const int SEUIL_OBSCURITE = 300; // en dessous : nuit
const int SEUIL_JOUR = 400; // au-dessus : jour
bool nuit = false;
void setup {
pinMode(TEMOIN, OUTPUT);
Serial.begin(115200);
}
void loop {
int v = analogRead(LDR); // 0 = noir, 1023 = pleine lumière (selon montage)
if (!nuit && v < SEUIL_OBSCURITE) {
nuit = true;
Serial.print(F("Nuit -> ")); Serial.println(v);
} else if (nuit && v > SEUIL_JOUR) {
nuit = false;
Serial.print(F("Jour -> ")); Serial.println(v);
}
digitalWrite(TEMOIN, nuit ? HIGH : LOW);
Serial.print(F("ldr=")); Serial.println(v);
delay(100);
}
Vérification attendue
Le Moniteur série (115200) affiche une valeur stable qui monte quand vous approchez la lampe et baisse quand vous bouchez la LDR de la main. La LED témoin s'allume en dessous de ~300 et ne s'éteint qu'au-dessus de ~400 : entre les deux, aucun changement d'état — l'hystérésis fonctionne.
Erreurs fréquentes
- Pont diviseur à l'envers (10 k en haut, LDR en bas) : la logique est inversée, les seuils « ne marchent pas » — calibrez toujours en regardant les valeurs réelles d'abord.
- Un seul seuil sans hystérésis : la LED se met à vibrer en permanence quand la lumière stagne près du seuil (bruit ADC ±5 unités).
- Oublier F pour les chaînes Serial.print : chaque littéral consomme la précieuse SRAM de 2 Ko de l'ATmega328P.
- delay(100) trop long : vous ratez les transitions rapides ; trop court, vous inondez le Moniteur.
- LDR sans résistance fixe : brancher la LDR seule entre A1 et 5 V ne donne jamais 0, le diviseur est indispensable.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-poussoir.inoArduinopwm-fade.inoArduinocapteur-lumiere-ldr.inoArduinoservo-balayage.inoArduinoruban-neopixel.inoArduino