Início
/
Projetos Arduino
/
Projetos Squids
/
Básico
/
Projeto104 - Como medir a iluminação ambiente com o sensor BH1750 e Arduino
Projeto104 - Como medir a iluminação ambiente com o sensor BH1750 e Arduino
Angelo Luis Ferreira | 29/06/2022
Acessos: 2.966
Básico - Projeto 104
Medindo a iluminância(lux) com o sensor BH1750FVI e Aduino
Objetivo
O objetivo deste projeto é mostrar como utilizar o sensor de luz BH1750 junto com o Arduino para determinar a quantidade de luz que incide sobre o sensor, medida em LUX, e mostrar o resultado em um display LCD. Para isto, vamos utilizar o módulo GY-302 ou o módulo GY-30 que possuem o sensor de luz BH1750FVI e geram o mesmo resultado. Utilizaremos também a biblioteca BH1750 para facilitar a determinação dos valores resultantes.
Definições

Obs.: Geralmente os módulos GY-30 e GY-302 não são fornecidos com os pinos soldados.
Módulos GY-30 e o GY-302:
1. Como possuem o sensor de luminosidade BH1750FVI (datasheet) como base, estes módulos são capazes de determinar o nível de iluminação (iluminância) que incide sobre o sensor, medido em lux (lx). Portanto, os módulos GY-30 e GY-302 são utilizados para medir a quantidade de luz dentro do ambiente onde está localizado o sensor.
2. O circuito integrado BH1750FVI é capaz de medir a intensidade da luz em lux na faixa de 1 a 65535 lx, sendo ideal para aplicação em sistemas de controle de iluminação automática.

3. Os módulos possuem interface I2C de comunicação, facilitando a montagem e a conexão com o Arduino.
4. Os módulos possuem conversor AD de 16 bits (para transformar sinal analógico em sinal digital) e funcionam com tensões entre 3 e 5Vcc (corrente contínua) .
5. módulos GY-30 e GY-302 são similares e retornam valores de iluminância com a mesma precisão. Se diferem apenas pelas suas dimensões e disposição dos seus pinos de conexão.
Conceitos importantes
Luz ou luz visível é a radiação eletromagnética dentro da parte do espectro eletromagnético que é percebida pelo olho humano. A luz visível é geralmente definida como tendo comprimentos de onda na faixa de 400–700 nanômetros, entre o infravermelho e o ultravioleta. Wikipédia

Fluxo luminoso é a radiação total emitida em todas as direções por uma fonte luminosa ou fonte de luz que pode produzir estímulo visual. Estes comprimentos de onda estão compreendidos entre 380 a 780 nm. Sua unidade é o lúmen (ln). Wikipédia

Iluminamento, intensidade de iluminação ou iluminância é uma grandeza de luminosidade que faz a relação entre o fluxo luminoso que incide na direção perpendicular a uma superfície e a sua área. Na prática, é a quantidade de luz dentro de um ambiente. Sua unidade é o lux (lúmen/m2). Wikipédia
A importância de se medir a iluminância em ambientes, além de possibilitar a automação, pode servir como referência para projetos de iluminação residencial ou comercial. A partir de normas padronizadas podemos projetar ambientes com luminosidade adequada para o conforto visual dos usuários. Veja como exemplo a norma ABNT NBR 5413 que estabelece os valores de iluminâncias médias mínimas para iluminação artificial em interiores. A seguir mostramos uma tabela com alguns exemplos de valores médios de iluminânica:

Referências
Projeto103 - Como usar o sensor BH1750 com Arduino sem auxílio de biblioteca específica
Projeto 48 - Como controlar um display LCD com o módulo I2C
Projeto 38 - Controlando um display LCD (instalação e comandos básicos) (Caso não possua um módulo I2C e queria adaptar o projeto para usar o display LCD)
Aplicação
Para fins didáticos e em sistemas de controle de iluminação automático ou apenas circuitos para medição da luz ambiente nos mais diversos tipos de projetos robóticos ou de automação residencial. É muito utilizado em sistemas que detectam a luminosidade para um ajuste de eficaz da iluminação, por exemplo.
Componentes necessários
Referência
|
Componente
|
Quantidade
|
Imagem
|
Observação
|
Protoboard |
Protoboard 830 pontos |
1 |
 |
No mínimo utilizar protoboard com 830 pontos
|
Jumpers |
Kit cabos ligação macho / macho |
1 |
 |
|
Módulo Sensor de Luminisidade |
Módulo Sensor de Luz GY-30 ou GY-0302
|
1 |
 |
Especificações:
Módulo sensor de luminosidade GY-302 ou GY-30
CI BH1750FVI (datasheet)
Tensão de operação 3 a 5V DC Faixa de medição 1 à 65.535 Lux Interface I2C Conversor AD 16 bits Dimensões 18,5 x 13,9mm
|
Display LCD
|
Display LCD 16X2 (com pinos soldados) |
1 |
 |
LCD que utilize o controlador HD44780 (veja na descrição ou datasheet do componente)
O display poderá ser de qualquer cor (fundo verde, azul ou vermelho)
|
Módulo I2C para display LCD
|
Módulo I2C com CI PCF8574 |
1 |
 |
O módulo I2C poderá vir separado ou já soldado no display LCD
(datasheet)
Se você não possui um módulo I2C para display LCD, poderá adaptar o projeto para o display LCD sem o adaptador.
|
Arduino UNO R3 |
Arduino UNO |
1 |
 |
Você poderá utilizar uma placa Arduino UNO original ou similar
|
Montagem do Circuito
Conecte os componentes no Protoboard como mostra a figura abaixo. Verifique cuidadosamente os cabos de ligação antes de ligar seu Arduino. Lembre-se que o Arduino deve estar totalmente desconectado da força enquanto você monta o circuito.

Observação: O módulo BH1750 poderá ser conectado no Arduino nas fontes de energia 3.3V ou 5V (Vcc), pois de acordo com o seu datasheet, o módulo funciona perfeitamente em ambas tensões. É importante lembrar também que o display LCD opera somente na tensão de 5V.
Atenção
1. Veja na imagem abaixo a "pinagem" do módulo GY-302 (à esquerda) e o módulo GY-30, que funcionam com a interface I2C.

2. Observe nas imagens que os módulos GY-302 e Gy-30 possuem os pinos de alimentação Vcc e GND e os pinos de interface I2C: SCL (Clock), SDA (Data) e ADDR (Address).
2.1. Pino Vcc: Deve ser conectado com o pino 3,3V ou 5V do Arduino. O sensor possui tensão de operação de 3 a 5Vcc.
2.2. Pino GND: Deve ser conectado no GND do Arduino.
2.3. Para a interface I2C, vamos usar os pinos SCL, SDA. Faça a conexão dos pinos SCL e SDA com o Arduino da seguinte forma:
Obs.: No nosso exemplo usamos o Arduino Uno.
Arduino Uno |
A5 |
A4 |
Arduino Nano |
A5 |
A4 |
Arduino Mega |
21 |
20 |
Leonardo/Micro |
3 |
2 |
2.4. O pino ADDR pode ser usado, por exemplo, para ligar dois sensores no mesmo microcontrolador ou quando o módulo é utilizado sem uma biblioteca específica. Quando usamos o pino ADDR em nível alto, o endereço de conexão I2C opera no endereço 0x5C, e com o pino em nível baixo, 0x23. Leia o Projeto103 - Como usar o sensor BH1750 com Arduino sem auxílio de biblioteca específica
Obs.: Quando adicionamos uma biblioteca pronta para calcular o resultado obtido pelo leitura de um único sensor BH1750, a utilização do pino ADDR pode ser opcional. Portanto, vamos optar por não utilizar o pino ADDR nesse projeto, entretanto, se o pino ADDR estiver conectado no Vcc ou no GND do Arduino, o resultado será o mesmo.
3. No projeto, vamos utilizar também um display LCD 16x2 com controlador HD44780, que se adapta aos mais diversos projetos com vários modelos de placas e microcontroladores. Este display possui 16 colunas por 2 linhas com backlight (luz de fundo) verde, azul ou vermelha e tem 16 pinos para a conexão.
4. Para a montagem do display com adaptador, entenda a estrutura do módulo I2C para display LCD 16x2 / 20X4:

4.1. Na lateral do adaptador encontramos 4 pinos, sendo: 2 pinos para alimentação (Vcc e GND) e 2 pinos para conexão com a interface I2C (SDA e SCL) que deverão estar conectados nos pinos analógicos A4 (SDA) e A5 (SCL) do Arduino Uno ou nos pinos A20 (SDA) e A21 (SCL) do Arduino Mega 2560. Veja a tabela abaixo com onde temos as principais placas Arduino e suas conexões com o I2C.

4.2. Para controlar o contraste do display, utilize o potenciômetro de ajuste de contraste. O jumper lateral, quando utilizado, permite que a luz do fundo (backlight) seja controlada pelo programa ou permaneça apagada.

4.3. A seleção de endereço do adaptador I2C para display LCD, na maioria dos módulos fornecidos no mercado já vêm configurados com o com o endereço 0x27. Se você não sabe qual endereço que o seu módulo I2C e/ou módulo RTC DS3231 está configurado, baixe o seguinte "sketch":
DOWNLOAD - I2C_scanner.ino
2.3.1 Após instalar e rodar o sketch acima, abra o monitor serial que mostrará qual é o endereço que o seu módulo I2C está configurado:

4.3.2 Nos casos em que módulo I2C estiver configurado com uma faixa de endereços diferente do endereço 0X27 altere a alinha de programação -> LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE); com o endereço correto.
4.4. Para saber mais sobre a montagem e utilização de display LCD com módulo I2C leia: Projeto 48 - Como controlar um display LCD com o módulo I2C.
5. A montagem do nosso exemplo foi realizada em um protoboard com 400 pontos e com um display LCD com comunicação via protocolo I2C. Verifique sempre se o seu protoboard possui linhas de alimentação contínuas ou separadas.

Incluindo a biblioteca BH1750
Para utilizarmos o módulo BH1750 incluiremos a biblioteca BH1750, que obtém a leitura da intensidade luminosa do ambiente de forma facilitada, sem precisamos conhecer mais profundamente alguns detalhes do sensor.
Instalação da biblioteca
1. No IDE do Arduino, acesse a aba Sketch, selecione [Incluir Biblioteca] e depois [Gerenciar Bibliotecas...].

2. No campo de pesquisa digite BH1750. Localizada a biblioteca BH1750 (by Christopher Laws) clique no botão [Instalar].

Para saber detalhes desta biblioteca clique aqui.
3. Após a instalação, observe que aparecerá a informação que a biblioteca foi instalada.

Incluindo a biblioteca LiquidCrystal_I2C
Atenção: Caso você opte pela utilização do display de LCD sem o módulo I2C, siga os procedimentos do Projeto 38 - Controlando um display LCD (instalação e comandos básicos) e não instale a biblioteca abaixo.
1. Para que o módulo I2C funcione corretamente é necessário adicionarmos a biblioteca LiquidCrystal_I2C no IDE do Arduino. Uma das grandes vantagens das placas Arduino é a diversidade de bibliotecas disponíveis que podem ser utilizadas em seus programas. Estas bibliotecas podem ser criadas para a linguagem "C" ou especificamente para o Arduino, reduzindo drasticamente o tempo gasto com programação. Veja a tabela Coletânea de bibliotecas para módulos.
Download dos arquivos da biblioteca LiquidCrystal_I2C
DOWNLOAD - NewliquidCrystal_1.3.4.zip
Para saber detalhes desta biblioteca clique aqui.
Instalando a biblioteca pelo IDE do Arduino
2. Após fazer o download do arquivo NewliquidCrystal_1.3.4.zip com todos os arquivos da biblioteca compactados no formato zip, abra o IDE do Arduino e siga o tutorial: Como incluir uma biblioteca no IDE do Arduino.
3. Para instalação e utilização da biblioteca para o módulo I2C como comunicação para um display LCD siga o tutorial: Projeto 48 - Como controlar um display LCD com o módulo I2C.
Biblioteca Wire
1. Para realizar a comunicação via protocolo I2C (comunicação com 2 fios: clock (SCL) e dado (SDA) podemos utilizar a biblioteca Wire.h que já vem instalada por padrão no IDE do Arduino.
2. A biblioteca Wire.h é responsável por conter as funções necessárias para gerenciar a comunicação entre os dispositivos através do protocolo I2C.
3. Muitas bibliotecas específicas para módulos e sensores com comunicação I2C já tem incluído a biblioteca Wire no seu escopo. Entretanto, é recomendável utilizar sempre essa biblioteca quando utilizarmos a comunicação via protocolo I2C, afim de evitarmos possíveis erros de comunicação.
Código do Projeto (Sketch)
1. Faça o download e abra o arquivo projeto104.ino no IDE do Arduino: DOWNLOAD - projeto104.ino
Obs. 1: Nos casos em que módulo I2C estiver configurado com um endereço diferente do endereço 0X27, altere a alinha de programação -> LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE); com o endereço correto. - Veja o tutorial Projeto 48 - Como controlar um display LCD com o módulo I2C
Obs. 2: Se estiver utilizando um display de LCD 20 X 4, altere o comando de inicialização para lcd.begin (20,4);
Obs.3: Se não possuir o módulo I2C utilize apenas o display LCD conforme Projeto 38 - Controlando um display LCD (instalação e comandos básicos) .
2. Se preferir, copie e cole o código abaixo no IDE do Arduino:
/*******************************************************************************
*
* 104 - Usando o módulo BH1750 para medir a iluminação ambiente em lux
* Autor: Angelo Luis Ferreira
* 22/08/2022
* http://squids.com.br/arduino
*
*******************************************************************************/
#include <Wire.h> // biblioteca para comunicação I2C
#include <BH1750.h> // biblioteca para sensor BH1750
#include <LiquidCrystal_I2C.h> // biblioteca para o display LCD I2C
// objetos (conforme bibliotecas)
BH1750 sensor; // cria o objeto sensor
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE); // cria o objeto lcd
void setup() {
// inicializações
Serial.begin(9600); // inicializa a comunicação serial
sensor.begin(); // incializa o BH1750
lcd.begin(16,2); // inicializa o lcd 16X2 com I2C
}
void loop() {
showLux();
delay(250);
}
void showLux() {
// le os valores do sensor de lux
uint16_t lux = sensor.readLightLevel();
// mostra as informacoes no LCD
lcd.setCursor(0, 0);
lcd.print(" Ilum. Ambiente");
lcd.setCursor(0, 1);
lcd.print("Lumin.: lux");
lcd.setCursor(8, 1);
lcd.print(lux);
}
Vídeo
Como o projeto deve funcionar
1. Ao rodar o programa, será exibido no display LCD a quantidade de luz (iluminância) medida em um ponto ambiente, no caso no local onde se encontra o sensor BH750. Essa informação é importante, pois serve de referência para adequarmos a iluminação de um ambiente de acordo com os valores definidos em normas.
1.1. Muita luz pode causar sensação de desconforto, e pouca luz pode prejudicar não só a visão mas também atrapalhar a produtividade das tarefas diárias.
1.2. Veja alguns valores de iluminância recomendados pelas normas da ABNT para os seguintes ambientes de uma residência:
a) Escritório e biblioteca – 300 lux
b) Cozinha e banheiro – 200 lux
c) Sala estar, jantar e dormitório – 150 lux
d) Hall, escada, despensa e garagem – 100 lux
2. Com esse projeto você poderá conferir se as especificações de luminosidade nos ambientes da sua casa estão corretos.
Desafios
Com base neste projeto, resolva o seguinte desafio: Desafio 95
O anúncio abaixo ajuda a manter o Squids Arduino funcionando
Comentários