Tutorial módulo sensor de luz BH1750 Deja un comentario

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.

Módulo Sensor de Luz digital BH1750

EL módulo tiene un regulador interno de 3.3V pudiendo alimentar con 5V sin problemas.

La interfaz de comunicación es I2C pudiéndolo implementar en la mayoría de microcontroladores, el módulo aparte de los pines de alimentación y pines I2C tiene un pin para establecer la dirección.

Pines Módulo Sensor de Luz digital BH1750

Tenemos dos direcciones para poder trabajar:

Pin ADDR Dirección I2C
ADDR=HIGH  (5V) 0x5C
ADDR=LOW  (GND o NC) 0x23

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:

Modo Resolución Tiempo de medición
High resolution Mode2 0.5 lx 120 ms
High Resolution Mode 1 lx 120 ms
Llow Resolution Mode 4 lux 16 ms

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

A continuación explicamos las funciones da la librería

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

EL significado de cada uno se explicó anteriormente. Si no se especifica el mode , por defecto es BH1750_CONTINUOUS_HIGH_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.

Mode debe ser uno de los siguientes estados:

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

EL significado de cada uno se explicó anteriormente.

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

conexiones arduino y sensor de luz BH1750

El pin ADDR lo dejamos sin conectar puesto que la librería que usamos trabaja con la dirección 0x23.

Luxómetro: midiendo la iluminancia de un ambiente con el BH1750.

Este ejemplo realizamos mediciones de luz con el BH1750. La programación es sencilla, el proceso simplemente es configurar el modulo y luego realizar las lecturas.

El sketch es el siguiente:

#include <Wire.h>
#include 

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);
}

A continuación se muestra las lecturas leídas:

Luxometro con arduino y BH1750

Encendido de focos automático:

En este ejemplo encenderemos a apagaremos un led (que podría ser un foco de tu fachada o jardín) de acuerdo al nivel de luz que sensamos, de esta forma el foco se encenderá de forma automática en la noche y se apagará en el día.
Este ejemplo trabajaremos para simular un foco el led del pin13, pero fácilmente podrían conectarlo a un módulo relé o triac e implementarlo con un foco de 200V

El sketch es el siguiente:

#include <Wire.h>
#include 

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.

A continuación se muestra la salida del monitor serial:

Encendido automatico de foco con arduino y BH1750

Pueden adquirir los materiales usados en este tutorial en nuestra tienda

 Arduino Uno R3

– Módulo Sensor de Luz digital BH1750

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Enviar Whatsapp
Hola 👋
¿En qué podemos ayudarte?