Si pudiéramos volver el tiempo atrás, a principios del siglo pasado, y le dijéramos a un farolero (así se le llamaba a la persona que encendía los faros en las calles), que en un futuro con un LDR y Arduino podríamos controlar luces automáticamente, según la luz del medio ambiente y no necesitarían quemar directamente el combustible para su funcionamiento, posiblemente nos hubiera contestado que estábamos locos.
Pero la electricidad, la electrónica y la programación permiten ahora que esto sea posible y que cualquiera de nosotros pueda hacer un sensor de luz con Arduino, algunos conocimientos previos y unos pocos componentes.
Este artículo trata sobre como usar un sensor de luz con Arduino. Aquí conocerás como emplear un microcontrolador y un poco de teoría para crearlo tu mismo.
Empecemos. 😊
Indice de contenidos
Componentes necesarios
Un sistema microcontrolado generalmente debe poseer una entrada o sensor, un elemento de control y una salida o actuador, además de su fuente de alimentación de tensión. Para realizar nuestro sensor de luz con Arduino, que en ocasiones también es llamado sensor crepuscular, necesitaremos los siguientes componentes:
Entrada
Podemos utilizar como sensor un LDR (Light Dependent Resistor) o resistencia dependiente de la luz, junto con una resistencia de 10 000 Ω, o 10 kΩ.
Aquí tienes un artículo si no conoces o se te dificulta el tema de los prefijos del sistema internacional.
O también se puede utilizar un módulo sensor LDR.
Existen en el mercado dos tipos de módulos, uno con tres terminales de salida, como el que aparece en la imagen inferior que posee dos terminales de alimentación a 5 Vdc (VCC y GND) y DO (Digital Output) que es una salida digital (alto o bajo).
Otros módulos poseen cuatro terminales de salida, las mismas tres terminales anteriores y una salida AO (Analog Output), donde obtenemos salidas de tensión análogas. Estos módulos son económicos y de fácil adquisición.
Nosotros en este artículo no vamos a utilizar los módulos. Mejor usaremos el LDR y así de paso conoceremos conceptos interesantes.
Control
Aquí estará nuestro Arduino UNO R3, aunque puedes usar otro tipo de Arduino si no tienes el mismo, un Arduino nano o un Arduino Mega será lo mismo.
Salida
Nuestro actuador será un diodo emisor de luz, LED (Light Emitting Diode) y su resistencia limitadora de corriente de 330 Ω, aunque si prefieres puedes usar el LED integrado en Arduino que ya tiene su resistencia limitadora de corriente.
Necesitaremos una placa de pruebas o protoboard para hacer el montaje de los componentes del circuito.
También necesitaremos algunos cables DuPont macho-macho para las conexiones.
¿Qué es un LDR?
Sin importar si utilizas un Módulo sensor LDR, o realices tú mismo un divisor de tensión, el componente estrella, el que le permitirá a Arduino conocer el nivel de luminosidad presente en el lugar en donde instalemos nuestro proyecto es un LDR o fotorresistencia.
Este componente es llamado de diversas maneras, tal vez lo encuentres como fotorresistor, fotorresistencia, fotocelda o LDR.
Aquí puedes ver uno de los símbolos que se usa para el LDR.
Un LDR es un componente que usamos en electrónica y que varía su resistencia en función de la intensidad de la luz que incida en él.
Generalmente, encontramos en el comercio aquellos que:
- Disminuyen su resistencia cuando la intensidad de luz que se le aplica aumenta.
- Incrementan su resistencia cuando la intensidad de la luz recibida es menor.
En otras palabras, su valor de resistencia es inversamente proporcional a la intensidad de luz que se le aplique.
Este comportamiento podemos verificarlo con la ayuda de un multímetro colocado en la escala de resistencia (ohmios – Ω).
Puedes leer el siguiente artículo si no sabes medir variables eléctricas o componentes con el multímetro digital.
Los LDR o fotorresistencias han sido de utilidad en muchos equipos eléctricos y electrónicos; algunos ejemplos son:
- Relojes que suenan en el día, pero no en la noche.
- Cámaras.
- Alarmas.
- Encendido automático del alumbrado público y privado.
¿Cómo funciona una fotorresistencia LDR?
El LDR basa su funcionamiento en el efecto fotoeléctrico.
Generalmente, la parte sensible a la luz de un LDR está fabricada con células de sulfuro de cadmio (CdS), este material tiene la capacidad de variar su resistencia eléctrica, cuya unidad de medida es el ohmio (Ω), según la cantidad de luz que incide en sus células.
Las variaciones obtenidas en la resistencia del LDR son muy diversas dependiendo del fabricante del mismo, pero pueden ser del orden de unos 100 Ω o menos con luz brillante y más de 1 MΩ (1 000 000 Ω) en la oscuridad.
Podemos ver en el datasheet de un LDR común, como el GL55, que a medida que la intensidad de luz se incrementa, el valor de su resistencia disminuye.
Estas variaciones de resistencia en el LDR se producen ante una amplia gama de frecuencias, desde el infrarrojo (IR), la luz visible y la radiación ultravioleta (UV).
La variación de resistencia en el LDR ante cambios de intensidad en la luz ocurren con cierto retardo, y el mismo no es igual cuando se pasa de oscuridad a luz, o de luz a oscuridad. Un tiempo de respuesta típico es de 100 ms o 0.1 segundo, aproximadamente.
Tal vez podamos pensar que esto es una desventaja, pero todo depende de lo que necesitemos. En nuestro caso, que debemos controlar una luminaria, inicialmente encender un LED cuando se detecte condiciones de oscuridad y apagarlo cuando haya buena luz ambiental, no tenemos que preocuparnos por el retardo en los cambios de resistencia en el LDR.
Cuando sí es un inconveniente el retardo en las variaciones de resistencia del LDR se utilizan componentes que reaccionan más rápido a los cambios de intensidad de la luz, tales como fotodiodos o fototransistores.
Esquema eléctrico
Vamos a utilizar este diagrama pictórico para el montaje.
Aquí usaremos un divisor de tensión con LDR y como actuador un LED y su resistencia limitadora de corriente.
La fuente de alimentación que usaremos es la de nuestro ordenador. Por medio del cable de alimentación de Arduino. Luego de haber cargado el programa, puedes utilizar una fuente externa de hasta 12 Vdc uniéndola al conector hembra (jack) que trae Arduino para este fin y donde insertaremos el conector macho (plug) de la fuente de alimentación que se utilice.
¿Cómo conectar una LDR con Arduino?
Muy bien, ya sabemos que podemos convertir las variaciones de la intensidad de la luz ambiental en variaciones inversamente proporcionales de resistencia en nuestro LDR (a mayor intensidad de luz, menor resistencia).
Ahora necesitamos convertir esas variaciones de resistencia en variaciones de tensión, ya que nuestro querido Arduino podrá actuar en consecuencia, ante esas variaciones de tensión, según el código que le proporcionemos.
Para utilizar el LDR y la resistencia de 10 kΩ, debemos conocer un poco a un viejo conocido en el mundo de la electricidad y electrónica. El divisor de tensión resistivo.
Si deseas conocer en profundidad este útil circuito eléctrico, puedes hacerlo aquí. Pero si no te quieres complicar por el momento con operaciones aritméticas, o no se te dan muy bien las matemáticas como a mí ;) pues te doy un breve resumen.
Simplificando un poco, cuando colocamos dos componentes en serie con una fuente de tensión, ese voltaje se repartirá en cada una de las resistencias en relación directa a su valor en ohmios (ley de tensiones de Kirchhoff), es decir la resistencia con mayor valor producirá una mayor caída de tensión en ella.
Miremos esta imagen.
Se muestra una fuente de tensión de 5 Vdc aplicada a dos resistencias en serie cada una de ellas de 100 Ω. No nos interesa la corriente en este ejemplo.
El multímetro nos indica que en uno de ellos la caída de tensión es de 2.5 Vdc; la ley de Kirchhoff nos dice que en la otra resistencia debe estar la tensión faltante, es decir otros 2.5 Vdc.
Vamos con un segundo caso.
La imagen nos indica que si la resistencia del lado izquierdo fue cambiado de 100 Ω a 50 Ω, la tensión de la resistencia de 100 Ω se incrementó a 3.33 Vdc; la ley de tensiones de Kirchhoff, nos dice que el resto de la tensión, o sea 1.67 Vdc debe estar en la resistencia de 50 Ω.
La conclusión es que si una de las dos resistencias del divisor de tensión varía su valor, el punto medio que los une, respecto al negativo del circuito, variará también su tensión.
Miremos una tercera imagen.
Aquí hemos reemplazado las resistencias anteriores por el LDR y una resistencia fija de 10 kΩ; observa la imagen y trata de responder las siguientes preguntas:
- El multímetro muestra una lectura de 264 mV, que es equivalente a 0.264 V. De acuerdo a la ley de tensiones de Kirchhoff, puedes decir ¿cuál es la caída de tensión en el LDR?
- ¿En estos momentos, la resistencia del LDR es mayor o menor a la de la resistencia de 10 kΩ?
- Con el valor aproximado que calculaste en la pregunta 2 y lo que has aprendido del comportamiento de los LDR ¿puedes saber si el lugar en que se encuentra colocado el LDR está con una luz fuerte o tenue?
Si ya eres experto en la materia, seguro estás sonriendo al tener claras las respuestas. ;)
Si apenas empiezas con estos temas y tienes dudas para responder, no te preocupes, siempre tiene un poco de dificultad al principio.
Solo quiero que tengas en cuenta algo importante:
El divisor de tensión con LDR ha transformado las variaciones en la intensidad de la luz ambiental en variaciones de tensión proporcionales.
Conociendo ya el funcionamiento del divisor de tensión, vamos a realizar un sencillo programa en Arduino para poder encender una lámpara en condiciones de baja luz ambiental y apagarla automáticamente cuando la luz natural sea suficiente para iluminar el espacio que deseamos.
Ejemplo sensor de luz con Arduino
Vamos a hacer un ejemplo utilizando un divisor de tensión con LDR con salida análoga (variaciones de tensión proporcionales a la luz que incide en el LDR).
Sensor de luz con Arduino y divisor de tensión LDR
Este primer ejemplo se basa en el diagrama pictórico del LDR dentro de un circuito divisor de tensión.
Consideraciones:
- El sensor de luz está compuesto por un divisor de tensión con el LDR y la resistencia de 10 kΩ.
- El divisor de tensión convierte los cambios de intensidad de luz en cambios proporcionales (análogos) de tensión en la unión de las dos resistencias.
- Al ser una salida de tensión análoga en el divisor de tensión, vamos a llevarla a la entrada análoga de Arduino (A0).
- Para comprobar el funcionamiento de nuestro proyecto usaremos como actuador un LED, con su respectiva resistencia limitadora de corriente de 330 ohmios; aquí usaremos el pin 4 como salida digital.
Código
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
//Código Divisor de tensión con LDR. void setup(){ pinMode(A0,INPUT); pinMode(4,OUTPUT); Serial.begin(9600); } void loop(){ int valorLDR = analogRead(A0); if( valorLDR <= 400 ) { digitalWrite(4, HIGH); Serial.print("LED ON "); Serial.println(valorLDR); delay(500); } else { digitalWrite(4, LOW); Serial.println("LED OFF"); Serial.println(valorLDR); delay(500); } } |
Con el divisor de tensión utilizado, hemos logrado obtener unas lecturas en valorLDR de 100 en oscuridad total y de 1022 con una fuente de luz intensa cerca al LDR.
El código es sencillo. En la función setup definimos la entrada, la salida e invocamos al monitor serie para poder ver los valores de nuestro sensor.
1 2 3 4 5 |
void setup(){ pinMode(A0,INPUT); pinMode(4,OUTPUT); Serial.begin(9600); } |
En la función loop leemos el dato obtenido en la entrada A0 y lo guardamos en la variable entera valorLDR.
1 2 |
void loop(){ int valorLDR = analogRead(A0); |
Luego con una estructura de decisión if/else encendemos o apagamos nuestro LED actuador, dependiendo de la comparación que hacemos con el valor de 400.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
if( valorLDR <= 400 ) { digitalWrite(4, HIGH); Serial.print("LED ON "); Serial.println(valorLDR); delay(500); } else { digitalWrite(4, LOW); Serial.println("LED OFF"); Serial.println(valorLDR); delay(500); } |
Ese valor de comparación (400) lo podemos variar a nuestro gusto dependiendo si deseamos que encienda nuestro LED con mayor o menor oscuridad.
Si aumentamos ese valor, nuestro control será más sensible y el LED encenderá pronto con poca oscuridad.
Pero si disminuimos ese valor, la sensibilidad disminuye y nuestro LED encenderá solo cuando haya bastante oscuridad.
Si deseas utilizar como actuador una lámpara de 120 o 220 Vac debes usar una interfaz de potencia. Si apenas inicias con electricidad y electrónica debes prestar mucha atención a las conexiones porque son valores de tensión muy peligrosos.
Como Arduino utiliza como tensión de alimentación 5 Vdc y nuestras lámparas funcionan con 120 o 220 Vac, debemos colocar un circuito intermedio que nos permita realizar en forma segura y eficiente el encendido y el apagado de la lámpara sin comprometer la integridad de nuestro Arduino, este circuito se llama interfaz de potencia; en este caso podemos usar un Módulo de relé con Arduino.
Si deseas conocer el funcionamiento completo de este módulo, para realizar conexiones con seguridad, puedes leer el artículo sobre rele con Arduino donde se explica en detalle.
Conclusiones acerca del LDR y Arduino
Hemos estudiado el comportamiento del LDR y aunque se puede hacer el control de un LED o de una lámpara sin necesidad de utilizar un Arduino, el uso del mismo nos facilita la calibración del sensor de luz y nos permite realizar mejoras en el circuito e incorporarlo a diferentes proyectos que nos propongamos.
También vimos el funcionamiento del divisor de tensión resistivo. Es un circuito básico, pero ampliamente utilizado en electricidad y electrónica.
Como práctica, analiza qué sucedería si intercambiamos de posición el LDR y la resistencia de 10 kΩ en el divisor de tensión de nuestro circuito. Trata de imaginarlo y luego compruébalo.
Espero que el artículo haya sido de tu agrado.
Hasta una próxima ocasión.
Gracias a depositphotos y a Tinkercad por la cesión de sus imágenes.