Tomo 5: El Ojo de la Noche - El Sensor de Luz LDR

¡Hola, creadores! Hoy vamos a darle a nuestro Arduino un sentido parecido a la vista. Le enseñaremos a distinguir entre la luz y la oscuridad usando un componente muy especial llamado Fotoresistencia o LDR. Construiremos un sistema que actúe como las luces automáticas de la calle: cuando se hace de noche, se enciende una luz.

🧠 El Protagonista de Hoy: La Fotoresistencia (LDR)

Una LDR (Light Dependent Resistor) es una "resistencia que depende de la luz". Es un material que cambia su resistencia eléctrica según la cantidad de luz que recibe.

Foto de una LDR, mostrando su superficie ondulada característica

¿Cómo "leemos" la resistencia? El Divisor de Voltaje

A diferencia del botón (que es digital y solo nos dice HIGH o LOW), la LDR es un sensor analógico. Esto significa que nos entregará una escala continua de valores que va desde 0 (oscuridad total) hasta 1023 (luz brillante). Para escuchar este sensor, utilizaremos las entradas analógicas de nuestro Arduino (A0 a A5) mediante el comando analogRead().

Arduino no puede medir resistencia directamente, pero sí puede medir voltaje. Para leer la LDR, la usaremos junto a una resistencia normal (de 10kΩ) para crear un Divisor de Voltaje.

Existen dos formas básicas para la conexión de nuestra LDR, pueden ser utilizadas dependiendo del fin deseado. Si disponemos de un controlador es posible modificar los resultados mediante programación:

Valores comerciales de LDR

Las fotorresistencias están disponibles en una amplia gama de sensibilidades y tamaños, adaptándose a distintas aplicaciones. A continuación, se presentan algunos valores típicos:

💡 El Gran Dilema: El Umbral Oculto y el Monitor Serial

Cuando trabajas con sensores analógicos, el Arduino procesa un flujo constante de números variables. La luz de tu laboratorio en el CECyTEM no es la misma a las 7:00 am que a las 2:00 pm, ni tampoco es igual si el día está nublado. Por lo tanto, el dilema del programador es: ¿Cómo sé qué número está leyendo el Arduino para definir en qué momento empieza la "noche"?

Para dejar de adivinar, usaremos el Monitor Serial. Es una ventana de comunicación entre el Arduino y tu computadora que nos permite imprimir mensajes en la pantalla. Activando el comando Serial.begin(9600); en el setup, podremos usar Serial.println(lecturaLuz); dentro del loop para ver los números exactos en nuestra pantalla. Una vez que sepamos cuánto mide la oscuridad en nuestra mesa, podremos fijar un Umbral matemático mediante un if.

🔌 El Circuito: La Lámpara Nocturna Automática

Componentes Necesarios:

📝 Instrucciones de Conexión:

  1. Monta el Divisor de Voltaje:
    • Conecta un cable desde el pin 5V del Arduino a una fila de la protoboard.
    • En esa misma fila, conecta una pata de la LDR.
    • Conecta la otra pata de la LDR a una fila vacía.
    • ¡El punto clave! En esa misma fila donde terminó la LDR, conecta dos cosas:
      1. Un cable que vaya al pin Analógico A0 de Arduino. ¡Este es el punto que vamos a "leer"!
      2. Una pata de la resistencia de 10kΩ.
    • Conecta la otra pata de la resistencia de 10kΩ a GND.
  2. Conecta el LED (la lámpara):
    • Conecta la pata corta (-) del LED a GND.
    • Conecta la resistencia de 220Ω a la pata larga (+) del LED.
    • El otro extremo de la resistencia conéctalo al Pin 9 de tu Arduino.

⚡ Diagrama de armado

Diagrama de TINKERCAD mostrando el circuito completo con LDR y LED

🧠 El Código: Decidiendo si es de Noche

Leeremos el valor del pin A0. Si el valor es muy bajo (poca luz -> alta resistencia de la LDR -> bajo voltaje en A0), significa que está oscuro, ¡y encenderemos el LED!

Código Arduino

/*
 * Misión 05: El Ojo de la Noche
 * Descripción: Enciende un LED automáticamente cuando no hay luz.
 * Por: Profe Campos
 * CECyTEM 05 Guacamayas
*/

// --- ZONA DE CONFIGURACIÓN ---
int pinLdr = A0;   // Pin ANALÓGICO donde leemos el sensor de luz.
int pinLed = 9;    // Pin donde está nuestra lámpara nocturna.

int valorLuz = 0;          // Variable para guardar la lectura del sensor (0-1023).
int umbralOscuridad = 400; // ¡Este es nuestro número mágico!
// Define qué tan oscuro debe estar para encender la luz.
// Tendrás que experimentar para encontrar el valor perfecto.

void setup() {
  Serial.begin(9600);      // Iniciamos el monitor para ver los valores.
  pinMode(pinLed, OUTPUT); // Configuramos el pin del LED como SALIDA.
}

void loop() {
  // 1. LEEMOS el valor analógico del sensor.
  // analogRead() nos da un número entre 0 (muy oscuro) y 1023 (mucha luz).
  valorLuz = analogRead(pinLdr);

  // 2. Mostramos el valor en el Monitor Serial.
  // ¡Esto es súper útil para encontrar nuestro 'umbralOscuridad'!
  Serial.print("Valor de luz: ");
  Serial.println(valorLuz);

  // 3. TOMAMOS UNA DECISIÓN.
  if (valorLuz < umbralOscuridad) {
    // Si el valor de luz es MENOR que nuestro umbral...
    // ...significa que está oscuro, ¡encendemos la lámpara!
    digitalWrite(pinLed, HIGH);
  } else {
    // Si no...
    // ...hay suficiente luz, la lámpara se apaga.
    digitalWrite(pinLed, LOW);
  }

  delay(200); // Pequeña pausa para estabilizar la lectura.
}

🚀 ¡Inténtalo Tú Mismo! (Retos)