Guia de como usar o Sensor BH1750 com Arduino

Tempo de leitura: 4 minutes

Sensores de luz ambiente são usados em aplicações relacionadas à iluminação e imagem. O BH1750FVI é um sensor de luz ambiente digital IC para interface de barramento I2C. Este IC é o mais adequado para obter dados de luz ambiente com ampla faixa e alta resolução. Neste artigo Sensor BH1750 Interface com Arduino e estrutura de codificação fornecidas com exemplo.

O sensor BH1750 tem responsabilidade espectral é aproximadamente a resposta do olho humano e função de rejeição de ruído de luz de 50 Hz/60 Hz, este sensor fornece um resultado de medição ajustável para influência da janela óptica e usando este sensor podemos detectar mín. 0,11 lx, máx. 100000 lx.

O que é lux

O lux (símbolo: lx) é a unidade SI de iluminância e emitância luminosa, medindo o fluxo luminoso por unidade de área. É igual a um lúmen por metro quadrado. Na fotometria, isso é usado como uma medida da intensidade, conforme percebida pelo olho humano, da luz que atinge ou atravessa uma superfície. É análogo à unidade radiométrica de watts por metro quadrado, mas com a potência em cada comprimento de onda ponderada de acordo com a função de luminosidade, um modelo padronizado de percepção de brilho visual humano. Em inglês, “lux” é usado tanto no singular quanto no plural

Valores típicos de Lux

Estes foram retirados da Wikipedia

Exemplos
Iluminância Superfícies iluminadas por:
0.0001 lux Céu noturno sem lua e nublado (luz das estrelas)
0.002 lux Céu noturno claro sem lua com brilho no ar
0.27–1.0 lux Lua cheia em uma noite clara
3.4 lux Limite escuro do crepúsculo civil sob um céu claro
50 lux Luzes da sala de estar da família (Austrália, 1998)
80 lux Iluminação do corredor / banheiro do prédio de escritórios]
100 lux Dia nublado muito escuro
320–500 lux Office lighting
400 lux Nascer ou pôr do sol em um dia claro.
1000 lux Dia nublado; iluminação típica de estúdio de TV
1000025000 lux Luz do dia (não sol direto)
32000100000 lux Luz do sol direta

Normalmente, para usar este sensor, você precisará comprar um módulo, aqui está uma foto de um

Sensor de luz ambiente BH1750FVI

O sensor BH1750 vem no pacote WSOF6I e é recomendado o uso de placa de breakout ou módulo BH1750. Este sensor pode medir o valor da luz ambiente em medição contínua ou única, através da forma como seis diferentes modos de operação podem ser obtidos.

Medição Única

1. Modo de baixa resolução – (precisão de 4 lx, tempo de medição de 16 ms)

2. Modo de alta resolução – (precisão de 1 lx, tempo de medição de 120 ms)

3. Modo de alta resolução – (precisão de 0,5 lx, tempo de medição de 120 ms)

O sensor obtém um dado de medição de amostra e entra no modo de desligamento.

Medição Contínua

4. Modo de baixa resolução – (precisão de 4 lx, tempo de medição de 16 ms)

5. Modo de alta resolução – (precisão de 1 lx, tempo de medição de 120 ms)

6. Modo de alta resolução – (precisão de 0,5 lx, tempo de medição de 120 ms)

o seguinte código de exemplo do Arduino obtém dados de luz ambiente no modo de alta resolução.

Ligação do sensor Arduino BH1750

 

Código Arduino BH1750

Biblioteca BH1750 para Arduino: https://github.com/claws/BH1750

#include <Wire.h>
#include <BH1750.h>

BH1750 lightMeter;

void setup(){

  Serial.begin(9600);

  // Inicialize o barramento I2C (a biblioteca BH1750 não faz isso automaticamente)
  // Em dispositivos esp8266, você pode selecionar os pinos SCL e SDA usando Wire.begin (D4, D3);
  Wire.begin();

  lightMeter.begin();
  Serial.println(F("BH1750 Teste"));

}

void loop() {

  uint16_t lux = lightMeter.readLightLevel();
  Serial.print("Luz: ");
  Serial.print(lux);
  Serial.println(" lx");
  delay(1000);

}

 

Sketch (Sem lib, usando Wire + math)

#include <Wire.h>
#include <math.h> 
int BH1750address = 0x23; //i2c address
 
byte buff[2];
void setup()
{
  Wire.begin();
  Serial.begin(57600);
}
 
void loop()
{
  int i;
  uint16_t val=0;
  BH1750_Init(BH1750address);
  delay(200);
 
  if(2==BH1750_Read(BH1750address))
  {
    val=((buff[0]<<8)|buff[1])/1.2;
    Serial.print(val,DEC);     
    Serial.println("lux"); 
  }
  delay(150);
}
 
int BH1750_Read(int address) //
{
  int i=0;
  Wire.beginTransmission(address);
  Wire.requestFrom(address, 2);
  while(Wire.available()) //
  {
    buff[i] = Wire.read();  // receba um byte
    i++;
  }
  Wire.endTransmission();  
  return i;
}
 
void BH1750_Init(int address) 
{
  Wire.beginTransmission(address);
  Wire.write(0x10); // 1lx reolution 120ms
  Wire.endTransmission();
}

 

Saída de monitor serial (Resultado do com Lib)

Luz: 71 lx
Luz: 72 lx
Luz: 57 lx
Luz: 318 lx
Luz: 330 lx
Luz: 336 lx
Luz: 338 lx

 

 

 

Conclusão

Neste guia, mostrei como usar um Módulo BH1750 (GY-30) com o Arduino. Espero que você tenha achado útil e informativo. Se sim, compartilhe com um amigo que também gosta de eletrônica e de fazer coisas!

Eu adoraria saber quais projetos você planeja construir (ou já construiu) com esses Módulos BH1750. Se você tiver alguma dúvida, sugestão ou se achar que falta algo neste tutorial, por favor, deixe um comentário abaixo.

Visits: 1 Visits: 1200536