Projeto104 - Como medir a iluminação ambiente com o sensor BH1750 e Arduino

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 Resultado de imagem para protoboard 830v

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 Módulo I2C display LCD Arduino

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.

MICROCONTROLADOR SCL SDA
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:

Módulo I2C - Detalhes

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

×

Infomações do site / SEO








×

Adicionar Marcadores