Professional Documents
Culture Documents
Tutorial MÓDULO SENSOR DE LUZ BH1750
Tutorial MÓDULO SENSOR DE LUZ BH1750
EL módulo BH1750 es un sensor de luz, que a diferencia del LDR es digital y nos entrega valores de medición en
Lux ( lumen /m² ) que es una unidad de medida estándar para el nivel de iluminación (iluminancia). Tiene alta
precisión y un rango ente 1 – 65535 lx el cual es configurable.
EL módulo tiene un regulador interno de 3.3V pudiendo alimentar con 5V sin problemas.
El pin ADDR internamente en el módulo tiene una resistencia a GND, por lo que si dejamos sin conectarlo la
dirección será 0x23.
Podemos configurar también la resolución del sensor, el cual también afecta a la velocidad de medición; tenemos 3
modos de resolución:
Estas tres configuraciones se subdividen en dos, en modo CONTINUOUS y ONE_TIME, con el primero es para
cuando se realizan mediciones constantemente, el segundo para cuando no se necesitan realizar medidas de forma
constante, cuando está configurada como ONE_TIME, el modulo se apaga después de realizar la medida, y para
volver a leer es necesario volver a configurar.
Librería BH1750
Nosotros usaremos una de varias librerías que podemos encontrar en internet, usaremos la librería BH1750 escrita
por Christopher Laws, librería que lo pueden descargar en:
https://github.com/claws/BH1750
begin(mode)
Inicializa el módulo, esto inicializa la comunicación I2c de Arduino y configura la resolución del BH175, mode es la
configuración que se va a establecer, esta puede ser:
BH1750_CONTINUOUS_HIGH_RES_MODE
BH1750_CONTINUOUS_HIGH_RES_MODE_2
BH1750_CONTINUOUS_LOW_RES_MODE
BH1750_ONE_TIME_HIGH_RES_MODE
BH1750_ONE_TIME_HIGH_RES_MODE_2
BH1750_ONE_TIME_LOW_RES_MODE
configure(mode)
Al igual que el begin(), configura el BH175, con la diferencia que en esta función no se inicializa La comunicación
I2C, para usar esta función la comunicación I2C ya debe estar inicializada.
BH1750_CONTINUOUS_HIGH_RES_MODE
BH1750_CONTINUOUS_HIGH_RES_MODE_2
BH1750_CONTINUOUS_LOW_RES_MODE
BH1750_ONE_TIME_HIGH_RES_MODE
BH1750_ONE_TIME_HIGH_RES_MODE_2
BH1750_ONE_TIME_LOW_RES_MODE
readLightLevel()
Realiza una lectura de la iluminancia a la que está expuesto el sensor, nos retorna un entero sin signo con el valor
de de la medicion de luz en Lux
Conexiones entre Arduino y el módulo BH1750
Las conexiones del módulo son como cualquier conexión con buz I2C:
Adaptador LCD a I2C Arduino Uno, Nano, Mini. Arduino Mega , DUE Arduino Leonardo
VCC 5V 5V 5V
GND GND GND GND
SCL A5 21 3
SDA A4 20 2
ADDR No conectado No conectado No conectado
El pin ADDR lo dejamos sin conectar puesto que la librería que usamos trabaja con la dirección 0x23.
El sketch es el siguiente:
#include <Wire.h>
#include <BH1750.h>
BH1750 Luxometro;
void setup(){
Serial.begin(9600);
Serial.println("Inicializando sensor...");
Luxometro.begin(BH1750_CONTINUOUS_HIGH_RES_MODE); //inicializamos el sensor
}
void loop() {
uint16_t lux = Luxometro.readLightLevel();//Realizamos una lectura del sensor
Serial.print("Luz(iluminancia): ");
Serial.print(lux);
Serial.println(" lx");
delay(500);
}
El sketch es el siguiente:
#include <Wire.h>
#include <BH1750.h>
BH1750 Luxometro;
uint16_t Lux_noche=20;
uint16_t Lux_dia=30;
int pinFoco=13;
void setup(){
Serial.begin(9600);
Serial.println("Inicializando sensor...");
Luxometro.begin(BH1750_CONTINUOUS_HIGH_RES_MODE); //inicializamos el sensor
pinMode(pinFoco, OUTPUT);
digitalWrite(pinFoco, LOW);
}
void loop() {
uint16_t lux = Luxometro.readLightLevel();//Realizamos una lectura del sensor
Serial.print("Luz(iluminancia): ");
Serial.print(lux);
Serial.println(" lx");
if(lux<Lux_noche)
{
digitalWrite(pinFoco, HIGH);
Serial.println(" Noche - Foco Encendido");
}
else if(lux>Lux_dia)
{
digitalWrite(pinFoco, LOW);
Serial.println(" Dia - Foco Apagado");
}
delay(500);
}
Notar que tenemos dos umbrales para determinar si es día o noche, Lux_noche inferior a este valor de lux lo
consideramos noche, Lux_dia superior a este valor lo consideramos dia, y valores entre Lux_noche y Lux_dia lo
consideramos un estado de histéresis, en donde mantendremos el valor anterior del foco, esto con el fin de no
hacer oscilar y no quemar el foco, puesto que si tuviéramos un solo umbral cuando nos encontremos justo en este
valor cualquier variación pequeña de luz haría que el foco se encienda y apague pudiendo malograr el foco o
simplemente dar una mala iluminación.