#include <Wire.h> // Biblioteca para comunicação I2C
#include <LiquidCrystal_I2C.h> // Biblioteca para controlar o display LCD via I2C
#include "DHT.h" // Biblioteca para o sensor DHT
#define DHTPIN 2 // Pino onde o DHT22 está conectado
#define DHTTYPE DHT22 // Definindo o tipo do sensor DHT
DHT dht(DHTPIN, DHTTYPE); // Inicializando o sensor DHT
// Configuração do display LCD I2C (endereço 0x27, 16 colunas, 2 linhas)
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Definições dos pinos
#define RED_PIN 13 // Pino para o LED vermelho
#define GREEN_PIN 12 // Pino para o LED verde
#define BLUE_PIN 11 // Pino para o LED azul
#define BUZZER_PIN 6 // Pino para o buzzer
#define RESET_BUTTON_PIN 7 // Pino para o botão de reset
bool alarmActive = false; // Variável para controlar o estado do alarme
bool buttonState = HIGH; // Estado atual do botão
bool lastButtonState = HIGH; // Estado anterior do botão
void setup() {
lcd.begin(16, 2); // Inicializar o display LCD com 16 colunas e 2 linhas
lcd.backlight(); // Ligar o backlight do display
pinMode(RED_PIN, OUTPUT); // Configurando o pino do LED vermelho como saída
pinMode(GREEN_PIN, OUTPUT); // Configurando o pino do LED verde como saída
pinMode(BLUE_PIN, OUTPUT); // Configurando o pino do LED azul como saída
pinMode(BUZZER_PIN, OUTPUT); // Configurando o pino do buzzer como saída
pinMode(RESET_BUTTON_PIN, INPUT_PULLUP); // Configurando o botão como entrada com resistor pull-up interno
dht.begin(); // Inicializando o sensor DHT22
}
void loop() {
// Leitura do estado atual do botão
buttonState = digitalRead(RESET_BUTTON_PIN);
// Verifica se o botão foi pressionado (mudança de estado de HIGH para LOW)
if (buttonState == LOW && lastButtonState == HIGH) {
if (alarmActive) {
noTone(BUZZER_PIN); // Desliga o buzzer
alarmActive = false; // Desativa o alarme
}
}
// Atualiza o último estado do botão para a próxima leitura
lastButtonState = buttonState;
delay(2000); // Aguardar 2 segundos entre leituras
float humidity = dht.readHumidity(); // Ler a umidade do sensor DHT22
// Verifica se a leitura do sensor foi bem-sucedida
if (isnan(humidity)) {
lcd.setCursor(0, 0);
lcd.print("Erro leitura"); // Exibe mensagem de erro no display
return;
}
// Mostrar a umidade no display LCD
lcd.clear();
lcd.setCursor(0, 0); // Definir o cursor para a linha superior
lcd.print("Umidade: ");
lcd.print(humidity); // Exibe a umidade lida
lcd.print("%");
// Verifica a faixa da umidade e toma as ações correspondentes
if (humidity <= 30) {
// Condição crítica
lcd.setCursor(5, 1); // Centraliza o texto na linha inferior
lcd.print("Critico");
setLEDColor(255, 0, 0); // Define o LED como vermelho
tone(BUZZER_PIN, 1000); // Aciona o buzzer
alarmActive = true; // Ativar o alarme
} else if (humidity > 30 && humidity <= 70) {
// Condição moderada
lcd.setCursor(4, 1); // Centraliza o texto na linha inferior
lcd.print("Moderado");
setLEDColor(255, 255, 0); // Define o LED como amarelo
noTone(BUZZER_PIN); // Desliga o buzzer
alarmActive = false; // Desativar o alarme
} else {
// Condição boa
lcd.setCursor(6, 1); // Centraliza o texto na linha inferior
lcd.print("Bom");
setLEDColor(0, 255, 0); // Define o LED como verde
noTone(BUZZER_PIN); // Desliga o buzzer
alarmActive = false; // Desativar o alarme
}
}
// Função para controlar a cor do LED RGB
void setLEDColor(int red, int green, int blue) {
analogWrite(RED_PIN, red); // Define a intensidade do LED vermelho
analogWrite(GREEN_PIN, green); // Define a intensidade do LED verde
analogWrite(BLUE_PIN, blue); // Define a intensidade do LED azul
}