Sistema de Iluminação Inteligente com Sensor de Luz BH1750FVI - MakerHero
Sistema de Iluminação Inteligente com Sensor de Luz

Sistema de Iluminação Inteligente com Sensor de Luz BH1750FVI Deixe um comentário

Neste tutorial, você aprenderá a criar um sistema de iluminação inteligente utilizando o sensor de luz BH1750FVI, um Arduino Uno R4 Minima e um anel de LEDs NeoPixel. Este projeto ajusta automaticamente o brilho dos LEDs com base na intensidade da luz ambiente, proporcionando uma iluminação eficiente e adaptativa para diversas aplicações, desde automação residencial até sistemas de iluminação inteligentes.

Sistema de Iluminação Inteligente com Sensor de Luz

Ao final deste tutorial, você terá um sistema funcional que não apenas responde às mudanças na iluminação ambiente, mas também exibe os níveis de luz e brilho em um display LCD, oferecendo uma interface clara e informativa.

Objetivos

O objetivo deste tutorial é guiar os entusiastas de eletrônica e desenvolvedores na criação de um sistema de iluminação inteligente utilizando o sensor de luminosidade BH1750FVI, um Arduino Uno R4 Minima, e um anel de LEDs NeoPixel. Ao seguir este tutorial, você aprenderá:

  • Compreender o Funcionamento do Sensor BH1750FVI: Entender como o BH1750FVI mede a intensidade da luz e converte em sinal digital para o microcontrolador.
  • Montar o Circuito: Conectar o sensor de luz BH1750FVI, o display LCD I2C 16×2, e o anel de LEDs NeoPixel ao Arduino Uno R4 Minima.
  • Implementar o Código: Escrever e carregar o código no Arduino para ajustar o brilho dos LEDs com base na leitura do sensor e exibir os dados no display LCD. Instalar as bibliotecas necessárias (Adafruit_NeoPixel, LiquidCrystal_I2C, e BH1750FVI) via Arduino Library Manager.
  • Visualizar o Resultado: Observar como o sistema ajusta automaticamente o brilho dos LEDs em resposta à iluminação ambiente e monitora as leituras no display LCD.

Materiais Necessários

Para seguir com este tutorial, você irá precisar dos seguintes componentes:

Materiais necessários

Como funciona o Sensor de Luz BH1750FVI?

O sensor de luz BH1750 é um dispositivo digital que mede a intensidade da luz em lux (lx). Ele é amplamente utilizado em projetos de eletrônica devido à sua precisão, baixo consumo de energia e facilidade de integração com microcontroladores como Arduino e Raspberry Pi.

Sensor de Luz BH1750FVI

O BH1750FVI opera utilizando um fotodiodo, que converte a luz incidente em uma corrente elétrica. Essa corrente é então amplificada e convertida em um sinal digital que pode ser lido por um microcontrolador. O sensor utiliza um conversor analógico-digital (ADC) interno para realizar essa conversão.

As principais características do BH1750 estão listadas abaixo:

  • Faixa de Medição: O BH1750FVI pode medir intensidades de luz que variam de 1 lux até 65535 lux.
  • Precisão e Resolução: O sensor oferece alta precisão e uma resolução de 1 lux, permitindo leituras muito detalhadas da intensidade da luz.
  • Interface de Comunicação: O sensor utiliza a interface I2C para comunicação com microcontroladores, o que simplifica muito a sua integração em projetos de eletrônica.
  • Consumo de Energia: O BH1750FVI é um sensor de baixo consumo de energia, ideal para aplicações alimentadas por bateria.

Para integrar o BH1750 com o Arduino ou outro microcontrolador, você precisa conectar os pinos de alimentação (VCC e GND) e os pinos de comunicação I2C (SCL e SDA).

Pinout do Sensor de Luz BH1750FVI

O sensor de luz BH1750FVI é um dispositivo fácil de usar, especialmente quando se trata de conectar a microcontroladores como Arduino. Abaixo está o pinout detalhado do sensor BH1750FVI:

Pinout do Sensor

  • VCC: Pino de alimentação. Tensão: 3V a 5V
  • GND: Pino de aterramento.
  • SDA: Linha de dados do barramento I2C. Utilizada para comunicação de dados entre o sensor e o microcontrolador.
  • SCL: Descrição: Linha de clock do barramento I2C. Utilizada para sincronização da comunicação de dados no barramento I2C.
  • ADDR: Pino de seleção de endereço I2C. Define o endereço I2C do sensor. Quando conectado ao GND, o endereço I2C é 0x23; quando conectado ao VCC, o endereço é 0x5C.

Circuito do Sensor de Luz BH1750FVI e Arduino

Na imagem abaixo está o esquema de ligações do sistema de iluminação inteligente com o Sensor de Luz BH1750:

Circuito eletrônico

As ligações realizadas são as seguintes:

Sensor de Luz BH1750FVI <-> Arduino Uno R4 Minima

VCC <-> 5V
GND <-> GND
SCL <-> SCL
SDA <-> SDA

Display LCD 16×2 I2C <-> Arduino Uno R4 Minima

VCC <-> 5V
GND <-> GND
SCL <-> SCL
SDA <-> SDA

Anel de LED RGB <-> Arduino Uno R4 Minima

GND <-> GND
VCC <-> VCC
IN <-> Pino 9

Código para Sensor de Luz BH1750FVI e Arduino

O código abaixo implementa um sistema que ajusta dinamicamente o brilho de um anel LEDs NeoPixel com base na leitura da intensidade luminosa de um sensor BH1750FVI. Além disso, ele exibe a intensidade de luz medida e o nível de brilho configurado em um display LCD I2C 16×2

As bibliotecas Adafruit_NeoPixel, LiquidCrystal_I2C, e BH1750FVI são necessárias e devem ser instaladas previamente através do Arduino Library Manager para garantir a comunicação I2C com o sensor de luz e o display LCD, e para o controle dos LEDs NeoPixel. 

// Programa: Sistema de Iluminação Inteligente com Sensor de Luz BH1750FVI
//Autor: Rosana Guse

// Inclui as bibliotecas utilizadas no código
#include <Adafruit_NeoPixel.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <BH1750FVI.h>

// Definições de pinagem e número de pixels
#define PIN        9
#define NUMPIXELS  24

// Definir valores RGB para os pixels
const uint8_t redValue = 0;
const uint8_t greenValue = 0;
const uint8_t blueValue = 255;

// Inicialização dos objetos
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); // Objeto NeoPixel para controle dos LEDs
LiquidCrystal_I2C lcd(0x27, 16, 2); // Objeto LCD I2C para exibição de informações
BH1750FVI LightSensor(BH1750FVI::k_DevModeContLowRes); // Objeto do sensor de luminosidade BH1750FVI

void setup() {
  Wire.begin(); // Inicializa a comunicação I2C
 
  lcd.init(); // Inicializa o LCD
  lcd.backlight(); // Liga o backlight do LCD

  LightSensor.begin(); // Inicializa o sensor de luminosidade BH1750FVI

  pixels.begin(); // Inicializa a fita de LEDs NeoPixel
  pixels.clear(); // Limpa todos os pixels
  pixels.setBrightness(10); // Define o brilho inicial
}

void loop() {
  // Lê o nível de luminosidade em lux
  uint16_t lux = LightSensor.GetLightIntensity();
 
  // Mapeia o valor de luminosidade para o brilho do LED (inverte o valor)
  const uint16_t minLux = 1;
  const uint16_t maxLux = 1000;
  uint8_t brightness = map(lux, minLux, maxLux, 255, 0); // Mapeia lux para o intervalo de brilho 0-255
  brightness = constrain(brightness, 0, 255); // Garante que o brilho está dentro do intervalo permitido

  pixels.setBrightness(brightness); // Define o brilho da fita de LED
 
  // Define a cor de todos os pixels
  for (int i = 0; i < NUMPIXELS; i++) {
    pixels.setPixelColor(i, pixels.Color(redValue, greenValue, blueValue)); // Define a cor de cada pixel
  }
  pixels.show(); // Mostra as mudanças na fita de LED

  // Atualiza o display LCD
  updateLCD(lux, brightness); // Atualiza as informações no LCD
 
  delay(1000); // Atraso entre as leituras de 1 segundo
  clearLCD(); // Limpa as informações antigas do LCD
}

// Função para atualizar as informações no LCD
void updateLCD(uint16_t lux, uint8_t brightness) {
  lcd.setCursor(0, 0); // Posiciona o cursor na primeira linha
  lcd.print("Lux: ");
  lcd.print(lux); // Exibe o valor de lux


  lcd.setCursor(0, 1); // Posiciona o cursor na segunda linha
  lcd.print("Brilho: ");
  lcd.print(brightness); // Exibe o valor de brilho
}

// Função para limpar o LCD
void clearLCD() {
  lcd.setCursor(5, 0); // Posiciona o cursor para limpar a informação de lux
  lcd.print("     "); // Limpa a informação anterior

  lcd.setCursor(9, 1); // Posiciona o cursor para limpar a informação de brilho
  lcd.print("     "); // Limpa a informação anterior
}

Funcionamento do Sistema de Iluminação Inteligente com BH1750FVI

O sistema de iluminação inteligente descrito utiliza um sensor de luminosidade BH1750FVI para medir a intensidade de luz ambiente e ajustar dinamicamente o brilho de um anel de LEDs NeoPixel. A principal função do BH1750FVI é fornecer leituras precisas da luz ambiente em unidades de lux, que são usadas para controlar o brilho dos LEDs de forma proporcional. Este ajuste dinâmico garante que os LEDs brilhem mais intensamente em condições de baixa luminosidade e diminuam o brilho em ambientes mais iluminados, economizando energia e melhorando a eficiência do sistema de iluminação.

O sistema também inclui um display LCD I2C 16×2 que exibe em tempo real a intensidade de luz medida pelo sensor (em lux) e o nível de brilho configurado para a fita de LEDs. Isso oferece uma interface clara e direta, permitindo que os usuários monitorem facilmente o funcionamento do sistema.

YouTube video

Este projeto é um excelente exemplo de como integrar diversos componentes eletrônicos para criar um sistema de iluminação adaptativo, que pode ser utilizado em diversas aplicações de automação residencial e sistemas de iluminação inteligentes.


Se você tiver dúvidas, sugestões ou experiências para compartilhar, fique a vontade para deixar um comentário abaixo. E para não perder nenhum conteúdo como este, não deixe de nos seguir no Instagram.

Faça seu comentário

Acesse sua conta e participe