Componentes · 6 min de lectura

¿Qué es un sensor de luz LDR? Medir la luz con Arduino y una luz nocturna automática

¿Cómo funciona una LDR (fotorresistencia)? Conexión como divisor de tensión, cómo elegir la resistencia, leer la luz con analogRead, luz nocturna con histéresis, módulo LDR, uso con ESP32 y Pico y errores comunes.

Una LDR (Light Dependent Resistor) es, como indica su nombre, una resistencia cuyo valor cambia con la luz; también se llama fotorresistencia o fotocélula. En la oscuridad su resistencia es muy alta y, cuanta más luz hay, más baja. Las farolas que se encienden al anochecer, las luces nocturnas automáticas y los juguetes que reaccionan a la luz funcionan con esta sencilla pieza. Es barata, no tiene polaridad y se conecta a Arduino con una sola resistencia: un comienzo ideal para tu primer proyecto con luz.

Fotorresistencia LDR sensor de luz
LDR: el dibujo en zigzag de su superficie es una capa de sulfuro de cadmio sensible a la luz; sus dos patas no tienen polaridad.

¿Cómo funciona una LDR?

El zigzag de la superficie de la LDR es un semiconductor sensible a la luz, el sulfuro de cadmio (CdS). Cuando le llega luz, los fotones liberan electrones del material, este conduce mejor y la resistencia baja. El cambio no es lineal y es relativamente lento (decenas de milisegundos). Por eso la LDR no sirve para medir la luz con precisión en lux, pero es ideal para decisiones como «¿está oscuro o hay luz?» y para niveles de luz aproximados.

AmbienteResistencia aproximada de la LDR (GL5528)
Oscuridad total1 MΩ o más
Luz de una lamparita nocturna (~1 lux)50–100 kΩ
Habitación en penumbra (~10 lux)10–20 kΩ
Habitación iluminada (~100 lux)3–5 kΩ
Bajo un flexo (~1000 lux)Alrededor de 1 kΩ
Luz del díaUnos cientos de Ω

Los valores dependen del modelo. La más habitual en los kits es la GL5528; sus hermanas GL5516, GL5537 y GL5539 dan resistencias distintas con la misma luz. Puedes conocer fácilmente los valores de tu LDR midiéndola con un multímetro a oscuras y con luz.

Conexión con Arduino: el divisor de tensión

Arduino mide tensión, no resistencia. Por eso la LDR se conecta junto con una resistencia fija formando un divisor de tensión: 5V → LDR → A0 → 10 kΩ → GND. Al aumentar la luz, la resistencia de la LDR baja y la tensión en A0 sube. La tensión en A0 se calcula con V = 5 × Rfija / (RLDR + Rfija), y analogRead() la convierte en un número de 0 a 1023. Para probar distintas resistencias, usa la calculadora Divisor de tensión.

LuzResistencia de la LDRTensión en A0analogRead
Oscuridad total1 MΩ0,05 V~10
Penumbra15 kΩ2,0 V~410
Habitación iluminada4 kΩ3,6 V~730
Bajo un flexo1 kΩ4,5 V~930
La resistencia fija da el resultado más sensible cuando se parece a la resistencia de la LDR en el nivel de luz que te interesa. Para decisiones en penumbra, como una luz nocturna, van mejor 10–47 kΩ; para distinguir luces fuertes, alrededor de 1 kΩ. La de 10 kΩ de los kits es un buen punto de partida para casi todos los proyectos.

Leer el nivel de luz con Arduino

Arduino (C++)
1const int LDR_PIN = A0;
2
3void setup() {
4  Serial.begin(9600);
5}
6
7void loop() {
8  int raw = analogRead(LDR_PIN);            // 0 (karanlık) – 1023 (aydınlık) / dark – bright
9  int percent = map(raw, 0, 1023, 0, 100);  // yüzde / percent
10  Serial.print("Ham / raw: ");
11  Serial.print(raw);
12  Serial.print("  Işık / light: %");
13  Serial.println(percent);
14  delay(500);
15}

Con el Serial Plotter (trazador serie) del Arduino IDE puedes ver el valor como un gráfico en directo. Al tapar la LDR con la mano, la curva baja; al iluminarla con una linterna, sube. Es la forma más fácil de encontrar el umbral adecuado para tu proyecto, con el sensor colocado donde va a quedarse.

Luz nocturna automática: umbral e histéresis

La luz nocturna más sencilla dice «si el valor es menor que 300, enciende el LED». Pero cuando la luz está justo en el umbral, la lámpara se enciende y se apaga sin parar, y es peor aún si su propia luz llega a la LDR. La solución es la histéresis: usar dos umbrales distintos. El código siguiente enciende la lámpara cuando la luz baja de 300, pero solo la apaga cuando supera 400; el hueco entre ambos acaba con el parpadeo.

Arduino (C++)
1const int LDR_PIN = A0;
2const int LED_PIN = 9;
3const int ON_LEVEL = 300;    // bunun altında yak / turn on below this
4const int OFF_LEVEL = 400;   // bunun üstünde söndür / turn off above this
5
6bool lampOn = false;
7
8void setup() {
9  pinMode(LED_PIN, OUTPUT);
10}
11
12void loop() {
13  int light = analogRead(LDR_PIN);
14  if (!lampOn && light < ON_LEVEL) lampOn = true;
15  if (lampOn && light > OFF_LEVEL) lampOn = false;
16  digitalWrite(LED_PIN, lampOn ? HIGH : LOW);
17  delay(200);
18}
Coloca la lámpara de modo que no ilumine la LDR; si su luz vuelve al sensor, la lámpara se apaga sola. Además, hacer la media de 10 lecturas suaviza los saltos bruscos que provoca una sombra al pasar o el parpadeo de un fluorescente.

Un LED que brilla más cuanto más oscuro está

En lugar de encender y apagar, puedes hacer que el LED se ilumine poco a poco a medida que baja la luz. La función map() convierte la luz medida en un valor PWM inversamente proporcional: cuanto más oscura está la habitación, más brilla el LED, y al revés. Recuerda conectar el LED a un pin PWM marcado con ~ (por ejemplo, el 9).

Arduino (C++)
1void loop() {
2  int light = analogRead(A0);
3  int brightness = map(light, 100, 900, 255, 0);  // karanlık → parlak / dark → bright
4  analogWrite(9, constrain(brightness, 0, 255));
5  delay(50);
6}

Módulo LDR: salida digital y analógica

Los módulos LDR ya montados llevan en la misma placa la LDR, la resistencia del divisor, un trimpot azul para el umbral y un comparador LM393. El pin AO da la salida analógica del divisor, y el pin DO solo HIGH o LOW según el umbral ajustado con el trimpot. En la mayoría de los módulos DO está en LOW cuando hay más luz que el umbral y en HIGH cuando hay menos; compruébalo en tu módulo con una prueba rápida.

PinFunción
VCCAlimentación (3,3–5 V)
GNDTierra
DOSalida digital: umbral ajustado con el trimpot
AOSalida analógica: punto medio del divisor de tensión

LDR con el ESP32 y la Raspberry Pi Pico

El ESP32 y la Pico funcionan a 3,3 V, así que alimenta el divisor desde el pin 3V3. El ADC del ESP32 es de 12 bits y devuelve valores de 0 a 4095. Como los pines ADC2 no funcionan con el Wi-Fi activado, conecta la LDR a uno de los pines ADC1 (GPIO 32–39). En la Pico las entradas analógicas son GP26, GP27 y GP28; read_u16() de MicroPython devuelve valores de 0 a 65535:

MicroPython
1from machine import ADC, Pin
2import time
3
4ldr = ADC(26)                  # GP26 (ADC0); bölücü 3V3'ten / divider fed from 3V3
5led = Pin(15, Pin.OUT)
6
7while True:
8    light = ldr.read_u16()     # 0 (karanlık) – 65535 (aydınlık) / dark – bright
9    led.value(light < 20000)   # karanlıkta yak / on when dark
10    print(light)
11    time.sleep(0.5)
Nunca alimentes el divisor de tensión con 5V en un ESP32 o una Pico. Con mucha luz llegarían más de 3,3 V al pin analógico y podría dañarse para siempre.

¿LDR o sensor de luz digital?

CaracterísticaLDRBH1750 (digital)
SalidaAnalógica (cambio de resistencia)Digital (I2C), directamente en lux
PrecisiónAproximada; depende de la temperatura y del modeloPrecisa y calibrada
Velocidad de respuestaLenta (decenas de milisegundos)Rápida
PrecioMuy barataAlgo más cara
Ideal paraDecidir si hay luz u oscuridad, luces nocturnasMedir la luz, iluminación de plantas, brillo de pantallas

Ideas de proyectos con LDR

  • Luz nocturna automática: una lámpara que se enciende a oscuras y no parpadea gracias a la histéresis.
  • Luz de pasillo inteligente: combina la LDR con un sensor de movimiento PIR para que solo se encienda cuando esté oscuro y pase alguien.
  • Panel que sigue al sol: gira un servo según la diferencia entre dos LDR para orientar un panel hacia la zona más luminosa.
  • Sistema de seguridad láser: apunta un láser a una LDR; cuando se corte el haz, suena la alarma.
  • Luz ambiental de colores: lleva un LED RGB hacia tonos cálidos a medida que oscurece.
  • Despertador al amanecer: haz sonar un zumbador con la primera luz de la mañana.

Errores comunes y cómo solucionarlos

  • El valor siempre es 0 o siempre 1023: falta la resistencia fija o la LDR está conectada directamente entre 5V y A0; monta el divisor de tensión.
  • Los valores funcionan al revés: la LDR y la resistencia fija están intercambiadas; si el valor sube a oscuras, cámbialas o invierte la comparación en el código.
  • La lámpara parpadea: su luz llega a la LDR o solo hay un umbral; añade histéresis.
  • Retraso al oscurecer: una LDR vuelve de luz a oscuridad más despacio que al revés; unos segundos de retraso son normales.
  • Intentar medir lux: una LDR no es un sensor calibrado; para valores reales en lux usa un BH1750.
  • En el ESP32 las lecturas fallan al activar el Wi-Fi: la LDR está en un pin ADC2; pásala a uno de los pines ADC1, entre GPIO 32 y 39.

La LDR es la forma más fácil de aprender la lectura analógica y la idea del divisor de tensión, y lo que aprendas aquí te servirá con muchos sensores analógicos, como los de humedad, gas o temperatura. Si te interesa cómo funcionan las resistencias del divisor, mira ¿Qué es una resistencia?; en la app BlueGrays encontrarás proyectos de luz nocturna con LDR, medida de intensidad de luz y seguridad láser, paso a paso.

Preguntas frecuentes

¿Qué resistencia se pone con una LDR?

La opción más habitual es 10 kΩ, que funciona bien en casi todos los proyectos de interior. Para más sensibilidad con poca luz, 47 kΩ, y para ambientes muy luminosos, 1 kΩ. Como regla, elige una resistencia fija parecida a la de la LDR en el nivel de luz que te interesa.

¿Una LDR tiene polo positivo y negativo?

No. Una LDR no tiene polaridad, igual que una resistencia normal; puedes colocarla en cualquier sentido. Lo importante es montar bien el divisor de tensión con la resistencia fija.

¿Se pueden medir lux con una LDR?

Se pueden estimar, pero no con precisión: su respuesta no es lineal y cambia según el modelo e incluso con la temperatura. Si necesitas valores reales en lux, usa un sensor de luz digital como el BH1750 o el TSL2561.

¿Qué diferencia hay entre los pines DO y AO de un módulo LDR?

AO da una tensión analógica que varía con la intensidad de la luz y se lee con analogRead(). DO solo da HIGH o LOW según el umbral ajustado con el trimpot del módulo y se lee con digitalRead(); es práctico para encender y apagar cosas.

¿Por qué mi LDR reacciona despacio en la oscuridad?

Cuando desaparece la luz, el CdS tarda unos segundos en alcanzar su resistencia en oscuridad, mientras que el paso a luz es mucho más rápido. Es una característica natural de las LDR. Para respuestas rápidas se usan fotodiodos o fototransistores.

¿Por qué en el ESP32 mi LDR siempre marca 4095 o no cambia nunca?

Si el divisor se alimenta con 5V, la tensión supera el límite del ADC y el valor se queda en 4095; aliméntalo con 3V3. Si no cambia nunca, la LDR puede estar en un pin ADC2; el ADC2 no funciona con el Wi-Fi activado, así que usa un pin ADC1 entre GPIO 32 y 39.

Ver todos los proyectos
Intensidad de la luz de lectura con Ldr
#11Principiante

Intensidad de la luz de lectura con Ldr

Proyecto que mide la intensidad de la luz ambiental con un sensor LDR y la muestra en un monitor serie. Enseña los fundamentos de la lectura de sensores analógicos y la comunicación serie.

4.6(78)
119
Lámpara de noche con Ldr
#12Principiante

Lámpara de noche con Ldr

Proyecto de luz nocturna basada en LDR que enciende automáticamente el LED cuando el ambiente se oscurece. Enseña lógica de control automático con comparación de valores umbral analógicos.

4.8(99)
153
Sistema de alerta láser
#22Intermedio
Premium

Sistema de alerta láser

Proyecto de seguridad que detecta cuando se interrumpe el rayo láser mediante LDR y avisa con zumbador y LED. Enseña la lógica de detección de interrupción de luz con par láser-LDR.

4.8(64)
82
Sistema de seguridad láser
#23Avanzado
Premium

Sistema de seguridad láser

Sistema de seguridad avanzado que activa la alarma cuando se interrumpe el rayo láser y puede restablecerse mediante pulsador o control por infrarrojos. Enseña la gestión de múltiples fuentes de entra

4.8(60)
77
ESP32 Luz de Noche con LDR
#112Principiante
Premium

ESP32 Luz de Noche con LDR

Luz nocturna en la que el LED se enciende automáticamente en la oscuridad y se apaga con la luz. Se utiliza el pin D0 (digital out) del módulo sensor LDR - el umbral de oscuridad se ajusta con el pequeño potenciómetro del módulo, el propio módulo genera la salida HIGH/LOW. ESP32 sólo lee esta señal con digitalRead(), el código es muy simple.

4.6(17)
30
Lectura de la intensidad luminosa con el módulo LDR del ESP32
#113Principiante

Lectura de la intensidad luminosa con el módulo LDR del ESP32

Visualización en tiempo real en el monitor serie del valor de luz medido por el módulo LDR + valor aproximado en lux. Explica el funcionamiento de la calibración del módulo. Es recomendable realizarlo antes del Proyecto 10, ya que se utiliza para determinar el valor umbral.

4.6(36)
55
Iluminación Inteligente ESP32 (PIR + LDR + Relé + OLED)
#141Avanzado
Premium

Iluminación Inteligente ESP32 (PIR + LDR + Relé + OLED)

¡Convierte tu pasillo, baño o despensa en iluminación inteligente con ESP32! Utilizando un sensor de movimiento PIR, un sensor de luz LDR y un módulo de relé, construimos el escenario clásico "la luz se enciende cuando se detecta movimiento en la oscuridad" — si el ambiente ya está iluminado, el movimiento NO activa la luz, ahorrando energía durante el día. La luz permanece encendida durante 30 segundos; si el movimiento continúa, el temporizador se reinicia y la luz permanece encendida más tiem

4.3(6)
11
Iluminación automática con el sensor de movimiento PIR del ESP32
#121Intermedio
Premium

Iluminación automática con el sensor de movimiento PIR del ESP32

En este proyecto, utilizaremos el sensor de movimiento PIR HC-SR501 para detectar a las personas que entren en la habitación y encender el LED automáticamente. Cuando se detecte movimiento, el LED permanecerá encendido durante un tiempo determinado y gestionaremos el tiempo mediante la función `millis()` y un contador, sin necesidad de utilizar `delay()`. De este modo, obtendremos un sistema de iluminación con sensor de movimiento que no bloquea el ESP32 y permite realizar otras tareas. En la vi

4.4(24)
38

Aprende cómo una LDR cambia su resistencia con la luz, cómo conectarla a Arduino con un divisor de tensión, elegir la resistencia adecuada y hacer una luz nocturna automática que no parpadee.

¿Qué es un sensor de luz LDR? Medir la luz con Arduino y una luz nocturna automática | BlueGrays