#include <DHT.h> // Biblioteca para controle do sensor DHT
#include <LiquidCrystal.h> // Biblioteca para controle do display LCD
#define pinDHT 6 // Define o pino 6 para o sensor DHT
#define model DHT22 // Define o modelo do sensor como DHT22
DHT dht(pinDHT, model); // Cria objeto 'dht' com pino e modelo do sensor
LiquidCrystal lcd(13, 12, 11, 5, 4, 3, 2); // Inicializa o LCD com os pinos definidos
float umidade; // Variável para armazenar a umidade
long tempo; // Variável para armazenar o tempo de referência
long atual; // Variável para armazenar o tempo atual
long tempoAlternancia = 3000; // Tempo de alternância (3 segundos)
bool mostrarLCD = true; // Flag para alternar entre umidade e estado do ventilador
bool estadoVentilador = true; // Flag para registrar estado do ventilador (relay)
int botao = 8; // Pino do botão
void setup() {
dht.begin(); // Inicializa o sensor DHT
lcd.begin(16, 2); // Inicializa o display LCD com 16 colunas e 2 linhas
pinMode(20, OUTPUT); // Led VERDE
pinMode(21, OUTPUT); // Led VERMELHO
pinMode(0, OUTPUT); // Relé para controlar dispositivo
pinMode(botao, INPUT_PULLUP); // Botão com resistor pull-up
Serial.begin(9600); // Inicializa a comunicação serial
tempo = millis(); // Armazena o tempo inicial
}
void loop() {
atual = millis(); // Atualiza o tempo atual
umidade = dht.readHumidity(); // Lê a umidade do sensor
// 1) CONFERIR UMIDADE IDEAL //
if (umidade < 50) {
digitalWrite(20, LOW); // Led VERDE desliga.
digitalWrite(21, HIGH); // Led VERMELHO liga.
digitalWrite(0, LOW); // Relé é desligado.
estadoVentilador = false;
}
else if (umidade > 50 && umidade < 80) {
digitalWrite(20, HIGH); // Led VERDE liga.
digitalWrite(21, LOW); // Led VERMELHO desliga.
digitalWrite(0, LOW); // Relé é desligado.
estadoVentilador = false;
}
else if (umidade > 80) {
digitalWrite(20, LOW); // Led VERDE desliga.
digitalWrite(21, HIGH); // Led VERMELHO liga.
digitalWrite(0, HIGH); // Relé é ligado.
estadoVentilador = true;
}
// Verifica o tempo e alterna a exibição
if (atual - tempo >= tempoAlternancia) {
mostrarLCD = !mostrarLCD; // Alterna entre mostrar umidade ou estado do ventilador
tempo = atual; // Atualiza o tempo de referência para o próximo ciclo de 3 segundos
}
// 2) MOSTRAR UMIDADE NO LCD //
if (mostrarLCD) {
lcd.clear();
lcd.setCursor(0, 0); // Move o cursor para a primeira linha
lcd.print("Umidade: "); // Exibe o título "Umidade: "
lcd.setCursor(0, 1); // Move o cursor para a segunda linha
lcd.print(" "); // Limpa a linha para garantir que não haja valores antigos
lcd.setCursor(0, 1); // Move o cursor de volta para a segunda linha
lcd.print(umidade, 1); // Exibe a umidade com 1 casa decimal
lcd.print(" %"); // Exibe o símbolo de porcentagem
delay(3000);
}
else {
lcd.clear();
lcd.print("Ventilador: "); // Exibe o título "Ventilador:"
lcd.setCursor(0, 1); // Move o cursor para a segunda linha
if (estadoVentilador) {
lcd.print("Ligado"); // Exibe ventilador ligado
} else {
lcd.print("Desligado"); // Exibe ventilador desligado
}
delay(3000);
}
// 3) CONTROLE MANUAL POR BOTÃO //
if (digitalRead(botao) == 0) {
estadoVentilador = true;
digitalWrite(20, LOW); // Led VERDE desliga.
digitalWrite(21, HIGH); // Led VERMELHO liga.
lcd.clear();
lcd.setCursor(0, 0); // Move o cursor para a primeira linha
lcd.print("Ventilador: "); // Exibe o título "Ventilador:"
lcd.setCursor(0, 1); // Move o cursor para a segunda linha
lcd.print("Ligado"); // Exibe ventilador ligado
delay(3000);
}
}