🛠 Thermomètre de lumière : LDR, seuils et hystérésis
Objetivos
Montar un sensor analógico real (LDR en divisor de tensión), calibrar un umbral en condiciones reales con el Monitor serie y evitar la oscilación alrededor del umbral gracias a la histéresis. Nivel intermedio: pasamos de «leer» a «interpretar».
Material
- 1 Arduino UNO R3 + cable USB-B
- 1 LDR + 1 resistencia de 10 kΩ (divisor de tensión: 5 V — LDR — A1 — 10 kΩ — GND)
- 1 LED + 330 Ω en el pin 12 (indicador de oscuridad)
- Una fuente de luz variable (lámpara de escritorio) para la calibración.
Código completo
// 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);
}
Verificación esperada
El Monitor serie (115200) muestra un valor estable que sube cuando acercas la lámpara y baja cuando tapas el LDR con la mano. El LED indicador se enciende por debajo de ~300 y solo se apaga por encima de ~400: entre ambos valores, no hay cambio de estado — la histéresis funciona.
Errores frecuentes
- Divisor de tensión invertido (10 kΩ arriba, LDR abajo): la lógica está invertida y los umbrales «no funcionan» — calibra siempre mirando primero los valores reales.
- Un solo umbral sin histéresis: el LED vibra constantemente cuando la luz se estanca cerca del umbral (ruido ADC ±5 unidades).
- Olvidar F para las cadenas Serial.print: cada literal consume la preciosa SRAM de 2 KB del ATmega328P.
- delay(100) demasiado largo: pierdes las transiciones rápidas; demasiado corto, inundas el Monitor.
- LDR sin resistencia fija: conectar el LDR solo entre A1 y 5 V nunca da 0, el divisor es indispensable.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton-poussoir.inoArduinopwm-fade.inoArduinocapteur-lumiere-ldr.inoArduinoservo-balayage.inoArduinoruban-neopixel.inoArduino