Midiendo Luz Ambiental con Arduino y el Sensor BH1750

Introducción

Bienvenidos a este tutorial práctico, en el que utilizando Arduino junto al sensor de luz BH1750 vamos a crear un sistema que encienda automáticamente un LED cuando los niveles de luz ambiental caigan por debajo de un cierto umbral.

¿Qué es el BH1750?

El BH1750 es un sensor digital de luz ambiental desarrollado por Rohm Semiconductor. Este se utiliza comúnmente en dispositivos móviles para ajustar el brillo de la pantalla en función de las condiciones de luz ambiental. Sin embargo, también se puede utilizar en una amplia variedad de otras aplicaciones que requieren una medición precisa de la luz ambiental.

El sensor BH1750 utiliza un fotodiodo para convertir la luz en corriente eléctrica, y luego convierte esta corriente en una señal digital que se puede leer fácilmente a través de una interfaz I2C. Esto permite a los dispositivos recoger datos exactos sobre la intensidad de la luz en luxes, que es una medida de cuánta luz está realmente llegando a la superficie.

El BH1750 tiene una excelente resolución, pudiendo medir niveles de luz desde 1 lux hasta 65535 lux, lo que lo hace adecuado tanto para entornos de luz muy baja como de luz muy intensa.

El sensor también es notable por su bajo consumo de energía y su capacidad para funcionar a una variedad de voltajes, lo que lo hace ideal para su uso en dispositivos alimentados por baterías, puedes ver la hoja de datos aquí.

Montaje del Circuito

Como muchos dispositivos este sensor utiliza para comunicarse el protocolo I2C por lo que solo necesita dos pines (SDA y SCL) para comunicarse, en el Arduino uno SCL es A5 y SDA es A4.

 

BH1750

 

Dirección 

El BH1750 puede ser configurado físicamente para usar dos direcciones I2C:

  • 0x23 (la más común) (si el pin ADD tiene una tensión < 0.7VCC)
  • 0x5C (si el pin ADD tiene una tensión > 0.7VCC)

Programación con Arduino

Librería

Haremos uso de la librería "BH1750.h" . Desde el IDE de Arduino ve a Sketch -> Include Library -> Manage Libraries, luego busca "BH1750.h" en la barra de búsqueda y haz clic en "Install".

BH1750.h

Modo de medición 

El BH1750 tiene seis modos diferentes de medición, divididos en dos grupos: mediciones continuas y mediciones únicas. En el modo continuo, el sensor mide la luz de manera continua. En el modo de medición única, el sensor realiza una única medición y luego entra en modo de ahorro de energía.

Cada modo tiene tres diferentes precisiones:

  • Modo de Baja Resolución - (precisión de 4 lx, tiempo de medición de 16 ms, 0.0 a 54612.5 lux)
  • Modo de Alta Resolución - (precisión de 1 lx, tiempo de medición de 120 ms, 0.0 a 54612.5 lux)
  • Modo de Alta Resolución 2 - (precisión de 0.5 lx, tiempo de medición de 120 ms, 0.0 a 27306.25 lux)

Por defecto, la biblioteca utiliza el Modo de Alta Resolución Continua, pero puedes establecer cualquier otro modo pasándolo a las funciones BH1750.begin() o BH1750.configure().

Recuerda que si usas el modo de medición única, tu sensor entrará en modo de ahorro de energía cada vez que complete una medición y la hayas leído.

Lista completa de modos:

  • BH1750_CONTINUOUS_LOW_RES_MODE

  • BH1750_CONTINUOUS_HIGH_RES_MODE (predeterminado)

  • BH1750_CONTINUOUS_HIGH_RES_MODE_2

  • BH1750_ONE_TIME_LOW_RES_MODE

  • BH1750_ONE_TIME_HIGH_RES_MODE

  • BH1750_ONE_TIME_HIGH_RES_MODE_2

Código

 El código proporcionado es para un programa sencillo de que utiliza el sensor BH1750 para medir la iluminación ambiental y encender un LED cuando la iluminación cae por debajo de un cierto nivel.

Aquí está lo que hace cada sección de código:

  • Las primeras tres líneas importan las bibliotecas necesarias (BH1750 y Wire) y crean una instancia de la clase BH1750 llamada lightMeter. El número 0x23 es la dirección del sensor en el bus I2C..

  • La función setup() se ejecuta una vez cuando el programa comienza. Se usa para inicializar la comunicación serial a 9600 baudios, comenzar la comunicación I2C y comenzar el sensor de luz en el modo de alta resolución continua. También configura el pin del LED integrado para ser una salida.

  • La función loop() se ejecuta en un bucle una vez que setup() ha terminado. Comprueba si el sensor está listo para realizar una lectura. Si es así, lee el nivel de luz y lo imprime en el Monitor Serial.

  • Luego, si la luz ambiental es inferior a 200 lux, enciende el LED integrado. Si la luz ambiental es de 200 lux o superior, apaga el LED.

En resumen, este programa puede usarse para detectar cuándo una habitación se vuelve demasiado oscura (menos de 200 lux) y encender automáticamente una luz (representada por el LED incorporado).

Una vez subido el sketch se pueden ver los resultados por monitor serial, acercando una linterna al sensor se apaga el LED.

 Conclusión

En este tutorial aprendimos de a usar el sensor BH1750 de forma sencilla, puedes adaptar este ejemplo a tu proyecto, sabemos que este es solo el comienzo y que encontraras maneras creativas de utilizar el sensor BH1750 y Arduino. ¡Sigue explorando y diviértete!

 

 

ArduinoBh1750Luz

Deja un comentario