Sensor de intensidade luminosa GY-30 (BH1750FVI)

sensor de luminosidade GY-30

No artigo anterior vimos o TSL2561, também disponível em nosso parceiro Curto-Circuito. Nesse artigo vamos discorrer sobre o sensor de intensidade luminosa GY-30.

Características do sensor de intensidade luminosa GY-30

Esse sensor parece bem interessante também. Pode ser alimentado de 3 à 5V e mede entre 0 e 65535 (ou, 2 Bytes de resolução).

Por ser um dispositivo I2C, possui saida digital direta e dispensa outras configurações.

Trabalha na faixa de luz visível.

Altamente preciso.

Wiring do sensor de intensidade luminosa GY-30

Não acho que seja necessário, but anyway; SDA ao pino 21 do ESP32 e SCL ao pino 22 do ESP32. No Arduino, pinos A2 e A3.

Código de exemplo

Esse é um código extremamente básico, a partir dele você poderá moldar toda a solução em seu entorno.

A biblioteca é a BH1750, está disponível no repositório do Arduino e serve para diversas plataformas.

#include <Arduino.h>
#include <Wire.h>
#include <BH1750.h>
/*
  BH1750 can be physically configured to use two I2C addresses:
    - 0x23 (most common) (if ADD pin had < 0.7VCC voltage)
    - 0x5C (if ADD pin had > 0.7VCC voltage)

  Library uses 0x23 address as default, but you can define any other address.
  If you had troubles with default value - try to change it to 0x5C.

*/
BH1750 lightMeter(0x23);

void setup(){

  Serial.begin(9600);

  // Initialize the I2C bus (BH1750 library doesn't do this automatically)
  Wire.begin();
  // On esp8266 you can select SCL and SDA pins using Wire.begin(D4, D3);

  /*

    BH1750 has six different measurement modes. They are divided in two groups;
    continuous and one-time measurements. In continuous mode, sensor continuously
    measures lightness value. In one-time mode the sensor makes only one
    measurement and then goes into Power Down mode.

    Each mode, has three different precisions:

      - Low Resolution Mode - (4 lx precision, 16ms measurement time)
      - High Resolution Mode - (1 lx precision, 120ms measurement time)
      - High Resolution Mode 2 - (0.5 lx precision, 120ms measurement time)

    By default, the library uses Continuous High Resolution Mode, but you can
    set any other mode, by passing it to BH1750.begin() or BH1750.configure()
    functions.

    [!] Remember, if you use One-Time mode, your sensor will go to Power Down
    mode each time, when it completes a measurement and you've read it.

    Full mode list:

      BH1750_CONTINUOUS_LOW_RES_MODE
      BH1750_CONTINUOUS_HIGH_RES_MODE (default)
      BH1750_CONTINUOUS_HIGH_RES_MODE_2

      BH1750_ONE_TIME_LOW_RES_MODE
      BH1750_ONE_TIME_HIGH_RES_MODE
      BH1750_ONE_TIME_HIGH_RES_MODE_2

  */

  // begin returns a boolean that can be used to detect setup problems.
  if (lightMeter.begin(BH1750::CONTINUOUS_HIGH_RES_MODE)) {
    Serial.println(F("BH1750 Advanced begin"));
  }
  else {
    Serial.println(F("Error initialising BH1750"));
  }

}


void loop() {

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

}

A saída no terminal, da mesma forma que com TSL2561. Percebi que na posição mais parecida com o teste do sensor TSL2561 o valor teve uma diferença de aproximadamente 5%, mas devido à altíssima sensibilidade, acredito que a razão está mais para o fato de o sensor estar próximo à barra de pinos, com os conectores absorvendo um pouco da luz.

Bem, claro que mostrar no terminal não tem graça, mas se adicionar essa informação ao display OLED de forma gráfica como mostrado nesse outro artigo, a brincadeira começa a ficar interessante!

Se desejar ver o artigo anterior para comparar os sensores, siga esse link.

Ainda, se quiser saber sobre a diferença entre candela, lumen e lux, recomendo essa leitura, que considero bastante agradável.

Até a próxima!