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)
| Componente | Valor | Propósito |
|---|---|---|
| Fotorresistencia (LDR) | Estándar (GL5528 o similar) | Sensor de luz |
| Resistor fijo | 10 kΩ | Compañero del divisor de voltaje |
| Transistor NPN | 2N2222 o BC547 | Conmuta el LED |
| LED (5mm) | Cualquier color | Indicador de salida |
| Resistor LED | 220Ω–330Ω | Limitación de corriente para LED |
| Fuente de alimentación | Batería o adaptador de 5V–9V | Fuente de energía |
| Protoboard + cables | Estándar | Prototipado |
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ón | Resistencia LDR | Comportamiento |
|---|---|---|
| Luz solar brillante | ~1 kΩ o menos | Resistencia 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)
- Configura la alimentación: conecta tu fuente de 5V a los rieles de alimentación de la protoboard (positivo y tierra).
- 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.
- 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.
- 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.
- 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
- Conecta la LDR entre 5V y el pin analógico A0.
- Conecta un resistor de 10 kΩ entre A0 y GND (completando el divisor de voltaje).
- 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
- Sube el código y abre el Monitor Serial (Herramientas → Monitor Serial).
- Observa el valor del nivel de luz en condiciones brillantes (podría ser ~200–400).
- Cubre la LDR y nota el valor oscuro (podría ser ~800–950).
- Establece
DARK_THRESHOLDa un valor entre los dos (ej., 700). - 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ón | Cómo usa el sensor de luz |
|---|---|
| Luces nocturnas automáticas | LED o lámpara se enciende cuando la habitación oscurece |
| Luces de calle | Se encienden al atardecer, se apagan al amanecer |
| Luces solares de jardín | Se cargan durante el día, se iluminan de noche |
| Brillo de pantalla | Los teléfonos ajustan el brillo de la pantalla a la luz ambiental |
| Sistemas de seguridad | Detectan cuando se rompe un haz de luz |
| Medidores de luz | Miden la intensidad de luz para fotografía |
Resolución de problemas
| Problema | Causa | Solución |
|---|---|---|
| LED siempre encendido | Resistor fijo muy bajo, o LDR no recibe luz | Aumentar resistor fijo o verificar ubicación de LDR |
| LED siempre apagado | Resistor fijo muy alto, o LDR saturada | Disminuir valor del resistor fijo |
| LED parpadea en el umbral | Sin histéresis | Agregar umbrales duales (Arduino) o filtro RC |
| Respuesta muy lenta | Normal — las LDR toman 10-100ms para cambiar | Usar un fototransistor para respuesta más rápida |
| Arduino lee 0 o 1023 siempre | Error de cableado — divisor no conectado | Verificar 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.