#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#define DHTPIN 2 // Pino do sensor DHT
#define DHTTYPE DHT22 // Tipo do sensor DHT22
#define RELAY_HUMID_PIN 7 // Pino do relé para controle de umidade
#define RELAY_TEMP_PIN 8 // Pino do relé para controle de temperatura
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Caracter personalizado para o símbolo de graus Celsius
byte degreeC[8] = {
B00111,
B00101,
B00111,
B00000,
B00000,
B00000,
B00000,
B00000
};
void setup() {
dht.begin();
lcd.init(); // Inicializa o LCD
lcd.backlight(); // Liga o backlight
lcd.clear(); // Limpa o LCD
// Define o caracter personalizado na memória do LCD
lcd.createChar(0, degreeC);
// Configura os pinos dos relés como saída
pinMode(RELAY_HUMID_PIN, OUTPUT);
pinMode(RELAY_TEMP_PIN, OUTPUT);
// Inicia com os relés desligados
digitalWrite(RELAY_HUMID_PIN, LOW);
digitalWrite(RELAY_TEMP_PIN, LOW);
}
void loop() {
float humidity = dht.readHumidity(); // Lê a umidade do sensor em %
float temperatureC = dht.readTemperature(); // Lê a temperatura em ºCelsius
// Verifica se houve erro na leitura
if (isnan(humidity) || isnan(temperatureC)) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Erro ao ler DHT");
delay(2000); // Aguarda 2 segundos
return;
}
// Mostra a humidade e temperatura no LCD
lcd.setCursor(0, 0);
lcd.print("Humid: ");
lcd.print(humidity);
lcd.print("%");
lcd.setCursor(0, 1);
lcd.print("Temp: ");
lcd.print(temperatureC);
lcd.write(byte(0)); // Símbolo de graus Celsius
lcd.print("C");
// Controle do relé para umidade (porta 7) (desumidificador)
if (humidity > 56.0) {
digitalWrite(RELAY_HUMID_PIN, HIGH); // Liga o relé
} else if (humidity < 45.0) {
digitalWrite(RELAY_HUMID_PIN, LOW); // Desliga o relé
}
// Controle do relé para temperatura (porta 8) (Aquecedor)
if (temperatureC < 17.0) {
digitalWrite(RELAY_TEMP_PIN, HIGH); // Liga o relé
} else if (temperatureC > 22.0) {
digitalWrite(RELAY_TEMP_PIN, LOW); // Desliga o relé
}
delay(10000); // Atualiza a cada 10 segundos
}