- Introdução ao módulo sensor de luz digital BH1750
- Arduino
- Programando Arduino para interface do sensor de luz BH1750
Quando você leva seu telefone para o sol ou iluminação intensa, ele ajusta automaticamente o brilho de acordo com as condições de iluminação. A maioria dos dispositivos de exibição hoje em dia, seja uma TV ou um telefone celular, tem o Sensor de luz ambiente interno para ajustar o brilho automaticamente. Hoje, neste tutorial, usaremos um desses sensores BH1750 Light Sensor Module e faremos a interface com o Arduino e mostraremos o valor Lux acima do LCD 16x2.
Introdução ao módulo sensor de luz digital BH1750
O BH1750 é um sensor digital de luz ambiente ou um sensor de intensidade de luz, que pode ser usado para ajustar automaticamente o brilho da tela em celulares, telas LCD ou para ligar / desligar os faróis dos carros com base nas condições de iluminação externa.
O sensor usa o protocolo de comunicação serial I 2 C que facilita o uso com microcontroladores. Para comunicação I2C, possui pinos SDI e SDA. A pinagem do sensor de luz ambiente BH1750 é mostrada abaixo:
A saída deste sensor é em LUX (lx), portanto, não requer nenhum cálculo adicional. Lux é a unidade para medir a intensidade da luz. Ele mede a intensidade de acordo com a quantidade de luz que atinge uma determinada área. Um lux é igual a um lúmen por metro quadrado.
O sensor opera em tensões de 2,4 V a 3,6 V (normalmente 3,0 V) e consome corrente de 0,12 mA. Este sensor possui ampla faixa e alta resolução (1-65535lx) e, além disso, a variação da medição também é pequena (cerca de +/- 20%). Ele também pode funcionar de forma independente, sem qualquer componente externo.
Embora um sensor LDR também possa ser usado para controlar os dispositivos com base nas condições de iluminação, não é tão preciso. Usamos o sensor LDR para construir muitas aplicações de controle de luz:
- Circuito sensor de luz Arduino usando LDR
- Detector escuro usando LDR e 555 Timer IC
- Circuito LDR simples para detectar luz
- Lâmpada de mistura de cores Arduino usando RGB LED e LDR
Arduino
O diagrama de circuito para conectar o sensor de luz BH1750 ao Arduino é mostrado abaixo.
Os pinos de comunicação I2C SDA e SCL de BH1750 são conectados aos pinos A4 e A5 do Arduino, respectivamente, para comunicação I 2 C. Como sabemos, a tensão de operação do sensor é de 3,3 V, então VCC e GND do BH1750 estão conectados a 3,3 V e GND do Arduino. Para LCD, os pinos de dados (D4-D7) são conectados aos pinos digitais D2-D5 do Arduino e os pinos RS e EN são conectados aos D6 e D7 do Arduino. V0 do LCD é conectado ao potenciômetro e um potenciômetro de 10k é usado para controlar o brilho do LCD.
Programando Arduino para interface do sensor de luz BH1750
A parte de programação para usar este sensor LUX com Arduino é muito fácil. Embora exista uma biblioteca disponível para este sensor, também podemos usá-lo sem ela.
Em primeiro lugar, incluímos arquivos de cabeçalho para o protocolo LCD e I 2 C.
#incluir
Na função de configuração , inicializamos o LCD e o sensor e imprimimos a mensagem de abertura no LCD.
void setup () { Wire.begin (); lcd.begin (16,2); lcd.print ("BH1750 Light"); lcd.setCursor (0,1); lcd.print ("Sensor de intensidade"); atraso (2000); }
Aqui BH1750_Read e BH1750_Init funções são usadas para ler e escrever os valores Lux respectivamente. A função Wire.beginTransmission () é usada para iniciar a transmissão e a função Wire.requestFrom (endereço, 2) é usada para ler os registradores, onde 2 indica o número de registradores.
Além disso, Wire.endTransmission () é usado para encerrar a transmissão e a função Wire.write () é usada para ir para o registro desejado inserindo o endereço desse registro nele.
int BH1750_Read (endereço interno) { int i = 0; Wire.beginTransmission (endereço); Wire.requestFrom (endereço, 2); while (Wire.available ()) { buff = Wire.read (); i ++; } Wire.endTransmission (); return i; } void BH1750_Init (endereço interno) { Wire.beginTransmission (endereço); Wire.write (0x10); Wire.endTransmission (); }
Na função de loop , estamos imprimindo os valores de lux em tempo real no LCD. Primeiro compare o valor de retorno da função BH1750_Read com 2 e, em seguida, comece a imprimir os valores Lux se for igual a 2. Aqui os valores são comparados com 2 porque a função BH1750_Read retorna o valor da contagem de registro e estamos lendo apenas 2 registros. Então, quando chega a 2, o programa começa a imprimir os valores LUX da intensidade da luz.
Em seguida, uma fórmula é usada para obter os valores de ambos os registros e dividi-los por 1,2, que é a precisão da medição.
void loop () { int i; valor uint16_t = 0; BH1750_Init (BH1750address); atraso (200); if (2 == BH1750_Read (BH1750address)) { value = ((buff << 8) -buff) /1.2; lcd.clear (); lcd.print ("Intensidade em LUX"); lcd.setCursor (6,1); lcd.print (valor); } atraso (150); }
Por fim, ligue o Arduino e carregue o programa no Arduino. Assim que o programa é carregado, o LCD começa a mostrar a intensidade da luz nas unidades LUX. Você também pode variar os valores alterando a intensidade da luz ao redor do sensor, conforme demonstrado no Vídeo abaixo.