The Circuit Maker
Proyectos9 min lectura

Circuito Sensor de Luz

Build a light sensor circuit using a photoresistor (LDR) that automatically turns on an LED when it gets dark. Includes schematic, component list, and Arduino version.

·

Un circuito sensor de luz usa una fotorresistencia (LDR) para detectar la luz ambiental y encender automáticamente un LED cuando oscurece. Este es el mismo principio detrás de las luces nocturnas automáticas, luces de calle y lámparas solares de jardín. Puedes construir la versión básica con solo unos pocos componentes y sin programación, o agregar un Arduino para control preciso y umbrales ajustables.

Lo que necesitas

Versión básica (sin Arduino)

ComponenteValorPropósito
Fotorresistencia (LDR)Estándar (GL5528 o similar)Sensor de luz
Resistor fijo10 kΩCompañero del divisor de voltaje
Transistor NPN2N2222 o BC547Conmuta el LED
LED (5mm)Cualquier colorIndicador de salida
Resistor LED220Ω–330ΩLimitación de corriente para LED
Fuente de alimentaciónBatería o adaptador de 5V–9VFuente de energía
Protoboard + cablesEstándarPrototipado

Versión Arduino (agrega precisión)

Los mismos componentes que arriba, pero el transistor es opcional — el Arduino puede alimentar el LED directamente desde un pin digital y leer la LDR en un pin analógico.

Cómo funciona la fotorresistencia

Una fotorresistencia (resistor dependiente de la luz, LDR) está hecha de un material semiconductor cuya resistencia cambia con la exposición a la luz:

CondiciónResistencia LDRComportamiento
Luz solar brillante~1 kΩ o menosResistencia muy baja
Iluminación interior~5–20 kΩResistencia media
Luz tenue / atardecer~50–200 kΩResistencia alta
Oscuridad~1 MΩ+Resistencia muy alta

La LDR no tiene polaridad — funciona en cualquier dirección, igual que un resistor regular.

El principio del divisor de voltaje

La LDR y un resistor fijo forman un divisor de voltaje. El voltaje del punto medio cambia con el nivel de luz:

V_medio = V_alimentación × R_fijo / (R_LDR + R_fijo)
  • Luz brillante: R_LDR es baja (~1 kΩ). V_medio ≈ 5V × 10k / (1k + 10k) ≈ 4.5V (alto).
  • Oscuridad: R_LDR es alta (~1 MΩ). V_medio ≈ 5V × 10k / (1M + 10k) ≈ 0.05V (bajo).

Para hacer que el LED se encienda en la oscuridad, intercambiamos las posiciones — ponemos la LDR arriba (conectada al positivo) y el resistor fijo abajo (conectado a tierra). Ahora V_medio es alto cuando está oscuro y bajo cuando hay luz brillante:

V_medio = V_alimentación × R_LDR / (R_LDR + R_fijo)
  • Oscuridad: R_LDR es alta → V_medio es alto → transistor se enciende → LED se ilumina.
  • Luz brillante: R_LDR es baja → V_medio es bajo → transistor apagado → LED apagado.

Construyendo el circuito básico (sin Arduino)

  1. Configura la alimentación: conecta tu fuente de 5V a los rieles de alimentación de la protoboard (positivo y tierra).
  2. Divisor de voltaje: Conecta la LDR entre el riel positivo y una fila (llámala fila A). Conecta el resistor de 10 kΩ entre la fila A y el riel de tierra. La fila A es ahora el punto medio — su voltaje varía con la luz.
  3. Transistor: Coloca el 2N2222 en la protoboard. Conecta la base a la fila A a través de un resistor de 10 kΩ (para limitar la corriente de base). Conecta el emisor a tierra.
  4. LED: Conecta el resistor de 220Ω desde el riel positivo hasta el ánodo del LED (pata larga). Conecta el cátodo del LED al colector del transistor.
  5. Cubre la LDR con tu mano — el LED debería encenderse. Destápala — el LED debería apagarse.

Ajustando la sensibilidad

Si el LED se enciende/apaga en el nivel de luz incorrecto, cambia el resistor fijo de 10 kΩ:

  • Valor mayor (47 kΩ): LED se enciende en condiciones más tenues (menos sensible).
  • Valor menor (4.7 kΩ): LED se enciende antes, en condiciones más brillantes (más sensible).

Para ajuste fino, reemplaza el resistor fijo con un potenciómetro de 100 kΩ. Gira el potenciómetro para establecer el nivel exacto de luz donde el LED se activa.

Versión Arduino

Usar un Arduino agrega precisión — puedes leer niveles exactos de luz, establecer umbrales en código, y agregar características como histéresis (para prevenir parpadeo en el umbral).

Cableado

  1. Conecta la LDR entre 5V y el pin analógico A0.
  2. Conecta un resistor de 10 kΩ entre A0 y GND (completando el divisor de voltaje).
  3. Conecta un LED con un resistor de 220Ω desde el pin digital 8 a GND.

Código

const int LDR_PIN = A0;
const int LED_PIN = 8;
const int DARK_THRESHOLD = 700;  // Ajusta este valor (0-1023)

void setup() {
  pinMode(LED_PIN, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int lightLevel = analogRead(LDR_PIN);
  
  Serial.print("Nivel de luz: ");
  Serial.println(lightLevel);
  
  if (lightLevel > DARK_THRESHOLD) {
    digitalWrite(LED_PIN, HIGH);  // Oscuro - enciende LED
  } else {
    digitalWrite(LED_PIN, LOW);   // Brillante - apaga LED
  }
  
  delay(200);
}

Cómo calibrar

  1. Sube el código y abre el Monitor Serial (Herramientas → Monitor Serial).
  2. Observa el valor del nivel de luz en condiciones brillantes (podría ser ~200–400).
  3. Cubre la LDR y nota el valor oscuro (podría ser ~800–950).
  4. Establece DARK_THRESHOLD a un valor entre los dos (ej., 700).
  5. Vuelve a subir y prueba — el LED debería encenderse cuando cubras la LDR.

Agregando histéresis (prevenir parpadeo)

Sin histéresis, el LED parpadea cuando el nivel de luz está justo en el umbral. Arregla esto usando dos umbrales — uno para encender y otro más bajo para apagar:

const int THRESHOLD_ON = 700;   // Encender cuando esté arriba de esto
const int THRESHOLD_OFF = 500;  // Apagar cuando esté debajo de esto
bool ledState = false;

void loop() {
  int lightLevel = analogRead(LDR_PIN);
  
  if (lightLevel > THRESHOLD_ON) {
    ledState = true;
  } else if (lightLevel < THRESHOLD_OFF) {
    ledState = false;
  }
  // Entre umbrales: mantener estado actual (histéresis)
  
  digitalWrite(LED_PIN, ledState ? HIGH : LOW);
  delay(100);
}

Aplicaciones del mundo real

AplicaciónCómo usa el sensor de luz
Luces nocturnas automáticasLED o lámpara se enciende cuando la habitación oscurece
Luces de calleSe encienden al atardecer, se apagan al amanecer
Luces solares de jardínSe cargan durante el día, se iluminan de noche
Brillo de pantallaLos teléfonos ajustan el brillo de la pantalla a la luz ambiental
Sistemas de seguridadDetectan cuando se rompe un haz de luz
Medidores de luzMiden la intensidad de luz para fotografía

Resolución de problemas

ProblemaCausaSolución
LED siempre encendidoResistor fijo muy bajo, o LDR no recibe luzAumentar resistor fijo o verificar ubicación de LDR
LED siempre apagadoResistor fijo muy alto, o LDR saturadaDisminuir valor del resistor fijo
LED parpadea en el umbralSin histéresisAgregar umbrales duales (Arduino) o filtro RC
Respuesta muy lentaNormal — las LDR toman 10-100ms para cambiarUsar un fototransistor para respuesta más rápida
Arduino lee 0 o 1023 siempreError de cableado — divisor no conectadoVerificar que LDR y resistor formen divisor entre 5V y GND

Resumen

Un circuito sensor de luz usa una LDR (fotorresistencia) cuya resistencia cambia con el nivel de luz. Emparejada con un resistor fijo en un divisor de voltaje, produce un voltaje variable que puede alimentar un interruptor transistor (versión básica) o ser leído por una entrada analógica de Arduino (versión programable). El circuito enciende un LED en la oscuridad y lo apaga con luz. Ajusta la sensibilidad cambiando el valor del resistor fijo; agrega histéresis para prevenir parpadeo en el umbral de conmutación.