Sensor de lux não é novidade aqui no blog. Já montamos um medidor de intensidade de luz com o módulo TSL2561 Adafruit. Hoje vamos ver um outro módulo que funciona da mesma maneira, mas usa um sensor diferente: é o módulo sensor de luz BH1750 arduino.
O módulo sensor de luz BH1750 (também conhecido como GY-302) é tão eficiente e fácil de usar quanto o sensor da Adafruit, e nesse post vamos montar um sensor de luminosidade exibindo os dados em um display LCD 16×2 I2C.
O módulo sensor de luz BH1750
Esse módulo tem o sensor BH1750FVI (datasheet), que permite realizar medições entre 1 e 65.535 lux, possui um conversor AD de 16 bits e funciona com tensões entre 3 e 5VDC.
O módulo sensor de luz BH1750 é um pouco mais “econômico” em termos de pinagem, e nele temos os pinos de alimentação (Vcc e GND), os pinos de comunicação I2C (SCL e SDA), e o pino de endereçamento (ADDR):
Esse pino de endereçamento pode ser usado, por exemplo, para ligar dois sensores no mesmo microcontrolador. Colocando o pino ADDR em nível alto, o módulo que estou usando mostrou o endereço I2C 0x5C, e com o pino em nível baixo, 0x23.
Ligando o BH1750 no Arduino
Conectar o módulo BH1750 no Arduino é bem simples, e para isso utilizamos as portas analógicas A4 (SDA) e A5 (SCL). Lembre que se você for conectar esse sensor no Arduino Mega, devem ser utilizadas as portas digitais 20 e 21.
Como display, usamos um display LCD 16×2 I2C backlight verde, e esse circuito é um bom exemplo de como você pode ligar mais de um dispositivo I2C no mesmo barramento. Para alimentação tanto do display como do sensor de luminosiade, usamos os 5V do Arduino.
Programa Medidor de Luminosidade
Para o programa, vamos utilizar as bibliotecas BH1750 e LiquidCrystal_I2c, que vamos instalar a partir da IDE do Arduino.
Vamos começar pela BH1750. Na IDE do Arduino, acesse o menu Sketch -> Incluir Biblioteca -> Gerenciar Bibliotecas. Na janela do Gerenciador de Bibliotecas, procure por bh1750 e instale a biblioteca BH1750 by Christopher Laws:
Agora vamos fazer a mesma coisa com a LiquidCrystal I2C que já usamos no post Como utilizar o módulo I2C com display LCD.
No Gerenciador de bibliotecas, procure por liquidcristal_I2c e instale a biblioteca LiquidCrystal I2C by Frank de Brabander, conforme imagem abaixo:
Dúvidas na instalação da biblioteca? Confira o post Como instalar uma biblioteca na IDE Arduino.
As duas bibliotecas são muito simples de usar, como você pode ver no código logo abaixo.
No programa, inicializamos o sensor BH1750 na linha 12 com o nome de lightMeter, e na linha 9 definimos que o display I2C está no endereço 0x3F.
Note que esse endereço I2C pode variar conforme mudança de projeto pelo fabricante, novo lote, alterações de configuração de placa, etc. Para confirmar o endereço dos dispositivos I2C, sugiro usar o I2C_Scanner.
//Programa: Sensor de luz BH1750 e LCD 16x2 I2C //Autor: Arduino e Cia #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <BH1750.h> //Define o display I2C no endereco 0x3F LiquidCrystal_I2C lcd(0x3F, 16,2); //Define o sensor BH1750 BH1750 lightMeter; void setup() { Serial.begin(9600); //Inicializa o LCD lcd.init(); //Inicializa o BH1750 lightMeter.begin(); } void loop() { //Le os valores do sensor de lux uint16_t lux = lightMeter.readLightLevel(); //Mostra as informacoes na serial Serial.print("Luminosidade: "); Serial.print(lux); Serial.println(" lux"); //Mostra as informacoes no LCD lcd.setBacklight(HIGH); lcd.setCursor(0, 0); lcd.print(" Sensor BH1750"); lcd.setCursor(0, 1); lcd.print("Lumin.: lux"); lcd.setCursor(8, 1); lcd.print(lux); delay(1000); }
Depois de carregar o programa no Arduino, aproxime uma fonte de luz no módulo sensor de luz BH1750 ou cubra o sensor para verificar a variação de luminosidade exibida pelo display.
Gostou do post do sensor BH1750 com Arduino? Então confira outros posts com sensores aqui mesmo no Arduino e Cia!