#include <LiquidCrystal.h>
#include <DHT.h>
bool btnOn=0;
bool btnOff=0;
// Configurações do sensor DHT22
#define DHTPIN 14 // O pino GPIO ao qual o DHT22 está conectado
#define DHTTYPE DHT22 // Define o tipo do sensor DHT
DHT dht(DHTPIN, DHTTYPE); // Inicializa o sensor DHT22
// Configurações dos relés e LEDs
int relay_pins[] = {12, 26, 27}; // Pinos GPIO aos quais os relés estão conectados
int led_pins[] = {10, 11, 13}; // Pinos GPIO aos quais os LEDs dos relés estão conectados
// Limites de temperatura para ativar os relés
float limiares_temperatura[] = {25.0, 30.0, 35.0};
// Configurações do LCD
LiquidCrystal lcd(4, 7, 3, 8, 9, 6);
// Função para ler a temperatura
float ler_temperatura() {
float t = dht.readTemperature();
if (isnan(t)) {
Serial.println("Erro ao ler o sensor DHT22. Verifique as conexões e o resistor de pull-up.");
return -1; // Retorna -1 em caso de erro
} else {
return t;
}
}
// Função para controlar os relés e LEDs
void controlar_relay(float temperatura, float limiares[]) {
for (int i = 0; i < 3; i++) {
if (temperatura >= limiares[i]) {
digitalWrite(relay_pins[i], HIGH); // Liga o relé
digitalWrite(led_pins[i], HIGH); // Acende o LED
} else {
digitalWrite(relay_pins[i], LOW); // Desliga o relé
digitalWrite(led_pins[i], LOW); // Apaga o LED
}
}
}
// Função para atualizar o display LCD
void atualizar_display(float setpoint, float temperatura) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperatura);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Setpoint: ");
lcd.print(setpoint);
lcd.print(" C");
}
// Função para ajustar o setpoint
float ajustar_setpoint(float setpoint, int incremento) {
setpoint += incremento;
return setpoint;
}
// Inicialização
float setpoint = 22.0;
int botao_up = 4; // Botão para aumentar o setpoint no pino 4
int botao_down = 17; // Botão para diminuir o setpoint no pino 17
void setup() {
Serial.begin(9600);
dht.begin(); // Inicializa o sensor DHT22
lcd.begin(16, 2);
pinMode(botao_up, INPUT);
pinMode(botao_down, INPUT);
for (int i = 0; i < 3; i++) {
pinMode(relay_pins[i], OUTPUT);
pinMode(led_pins[i], OUTPUT);
}
lcd.print("Controle de Temp");
delay(1000);
}
void loop() {
// Leitura da temperatura
float temperatura = ler_temperatura();
// Controle dos relés e LEDs
controlar_relay(temperatura, limiares_temperatura);
// Ajuste do setpoint
if (digitalRead(botao_up) == HIGH) {
setpoint = ajustar_setpoint(setpoint, 1);
delay(200); // Debounce para o botão
}
if (digitalRead(botao_down) == HIGH) {
setpoint = ajustar_setpoint(setpoint, -1);
delay(200); // Debounce para o botão
}
// Atualização do display
if (temperatura != -1) {
atualizar_display(setpoint, temperatura);
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Erro no sensor");
}
delay(2000); // Espera por 2 segundos antes de ler novamente
}