Ir al contenido
← Volver a Formación Arduino Principiante

02. Luz nocturna automática (crepuscular)

Una luz que se enciende sola al oscurecer usando una fotorresistencia, como las farolas de la calle.

Dificultad: Principiante · Tiempo: 40 min · Cerebro: Arduino Uno

🧰 Lista de materiales

Arduino Uno R3 (ATmega328P)
Arduino Uno R3 (ATmega328P)
Lee la luz y decide
Fotorresistencia LDR GL5537
Fotorresistencia LDR GL5537
Mide la luz ambiente
sin foto
Resistencias película metálica 1/4 W
10 kΩ para el divisor + 220 Ω para el LED
LED 5 mm blanco/transparente
LED 5 mm blanco/transparente
Luz que se enciende
Breadboard 830 puntos
Breadboard 830 puntos
Montaje

🎯 Qué vas a aprender

Aquí das el salto de «escribir» pines a «leer» el mundo físico. Aprenderás qué es una entrada analógica, cómo un divisor de tensión convierte una resistencia variable en un voltaje medible, y cómo tomar decisiones con un umbral.

📚 Teoría: la LDR y el divisor de tensión

Una LDR (Light Dependent Resistor) es una resistencia que cambia con la luz: con mucha luz baja a ~1 kΩ y a oscuras sube a cientos de kΩ. Pero el Arduino no mide resistencias, solo voltajes (0–5 V) en sus pines analógicos A0–A5.

Para convertir la resistencia en voltaje usamos un divisor de tensión: la LDR y una resistencia fija de 10 kΩ en serie entre 5 V y GND. El punto medio da un voltaje que sube y baja con la luz.

V_A0 = 5 V × R_fija / (R_fija + R_LDR)

A oscuras:  R_LDR alta  → V_A0 baja  → valor analógico pequeño
Con luz:    R_LDR baja  → V_A0 alta  → valor analógico grande
NotaEl conversor analógico-digital (ADC) del Arduino tiene 10 bits: traduce 0–5 V a un número entero de 0 a 1023. Eso es lo que devuelve analogRead().

🔌 Conexiones

DesdeHasta
LDR pata 15 V
LDR pata 2A0 y resistencia 10 kΩ → GND
LED ánodoD9 a través de 220 Ω
LED cátodoGND

💻 Código completo

// Luz nocturna automática con LDR
const int PIN_LDR = A0;
const int PIN_LED = 9;
int umbral = 400;   // ajústalo según tu LDR y tu sala

void setup() {
  pinMode(PIN_LED, OUTPUT);
  Serial.begin(9600);   // para calibrar el umbral
}

void loop() {
  int luz = analogRead(PIN_LDR);   // 0 (oscuro) .. 1023 (claro)
  Serial.println(luz);             // mira el Monitor Serie

  if (luz < umbral) {
    digitalWrite(PIN_LED, HIGH);   // está oscuro → enciende
  } else {
    digitalWrite(PIN_LED, LOW);    // hay luz → apaga
  }
  delay(200);
}
💡 ConsejoAbre el Monitor Serie (Ctrl+Shift+M) y tapa la LDR con la mano. Anota el valor con luz y a oscuras; pon el umbral a medio camino entre ambos.

🛠️ Montaje paso a paso

  1. Monta el divisor: 5 V → LDR → nodo central → resistencia 10 kΩ → GND.
  2. Lleva un cable del nodo central al pin A0.
  3. Conecta el LED (con su 220 Ω) entre D9 y GND.
  4. Sube el sketch y abre el Monitor Serie para calibrar.
  5. Ajusta umbral y vuelve a subir.

🧩 Resolución de problemas

SíntomaCausaSolución
El LED siempre encendidoUmbral demasiado altoBaja el valor de umbral
Valores erráticosDivisor mal conectadoRevisa que la 10 kΩ vaya a GND
Lectura siempre 1023A0 conectado a 5 V directoFalta la resistencia fija

🚀 Para ir más lejos

  • Cambia el LED por un módulo relé (proyecto 13) para encender una lámpara real.
  • Añade histéresis (dos umbrales) para que no parpadee al amanecer.
← Volver a Formación Arduino