22 setembro 2016

Sensor de luminosidade BH1750 com Arduino

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.

Como usar o sensor de luminosidade BH1750

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 16x2 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):

Detalhe BH1750

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.

Circuito Arduino e Sensor de lux BH1750

Como display, usamos um LCD 16x2 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 a biblioteca BH1750 (download) para o sensor de luz, e para o display I2C a biblioteca LiquidCrystal_I2c (download), que já usamos no post Como utilizar o módulo I2C com display LCD

As duas bibliotecas são muito simples de usar, como você pode ver no código logo abaixo. Faça o download das bibliotecas e coloque-as na pasta LIBRARIES da IDE do Arduino.

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.

 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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
//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, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

//Define o sensor BH1750
BH1750 lightMeter;

void setup()
{
  Serial.begin(9600);
  //Inicializa o LCD
  lcd.begin (16, 2);
  //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.

Nenhum comentário:

Postar um comentário