#include <DHT.h> // Biblioteca para o sensor DHT22
#include <LiquidCrystal.h> // Biblioteca para o display LCD
#define DHTPIN 14 // Pino do sensor DHT22 (porta 14)
#define DHTTYPE DHT22 // Tipo do sensor DHT22
#define TRIG_PIN 3 // Pino TRIG do sensor ultrassônico HC-SR04 (porta 3)
#define ECHO_PIN 2 // Pino ECHO do sensor ultrassônico HC-SR04 (porta 2)
#define LED_PIN 13 // Pino do LED
#define BUZZER_PIN 1 // Pino do buzzer
// Definindo os pinos para o LCD com base nas novas conexões
LiquidCrystal lcd(8, 14, 5, 6, 7); // Pinos RS (8), D4 (14), D5 (5), D6 (6), D7 (7)
DHT dht(DHTPIN, DHTTYPE);
unsigned long previousMillis = 0;
const long interval = 3000;
void setup() {
Serial.begin(9600);
lcd.begin(16, 2); // Configura o LCD para 16 colunas e 2 linhas
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
dht.begin(); // Inicializa o DHT22
lcd.setCursor(0, 0);
lcd.print("Inicializando...");
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
float temp = dht.readTemperature(); // Lê a temperatura do DHT22
float dist = medirDistancia(); // Mede a distância usando o HC-SR04
// Verifica se as leituras dos sensores são válidas
if (isnan(temp)) {
Serial.println("Falha ao ler o sensor DHT!");
lcd.setCursor(0, 0);
lcd.print("Erro no DHT22 ");
} else {
// Exibe os dados no LCD e no monitor serial
lcd.setCursor(0, 0); // Move o cursor para a primeira linha
lcd.print("Temp: ");
lcd.print(temp);
lcd.print(" C");
lcd.setCursor(0, 1); // Move o cursor para a segunda linha
lcd.print("Dist: ");
lcd.print(dist);
lcd.print(" cm");
Serial.print("Temperatura: ");
Serial.print(temp);
Serial.print(" C, Distancia: ");
Serial.print(dist);
Serial.println(" cm");
}
// Sistema de alertas
if (temp > 30 || (dist > 0 && dist < 20)) { // Verifica se a distância é válida (> 0)
digitalWrite(LED_PIN, HIGH); // Liga o LED
tone(BUZZER_PIN, 1000); // Ativa o buzzer
Serial.println("ALERTA: Temperatura alta ou distância curta!");
} else {
digitalWrite(LED_PIN, LOW); // Desliga o LED
noTone(BUZZER_PIN); // Desativa o buzzer
}
}
}
float medirDistancia() {
// Função para medir a distância usando o HC-SR04
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH, 30000); // Timeout de 30ms para segurança
float distance = duration * 0.034 / 2;
if (duration == 0 || distance > 400) {
Serial.println("Falha ao ler a distância!");
return -1; // Retorna -1 em caso de falha na leitura
}
return distance;
}