#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#define SOUND_PIN 34
#define RELAY_PIN 23
#define DHTPIN 4 // Pino conectado ao DHT22
#define DHTTYPE DHT22 // Define o tipo de sensor DHT
int threshold = 2000;
bool relayState = false;
int lastSoundValue = -1;
int lasttemp = -1;
int lastumid = -1;
LiquidCrystal_I2C lcd(0x27, 16, 2);
DHT dht(DHTPIN, DHTTYPE);
int auxsom = 0;
int auxtemp = 0;
int auxtemp2 = 0;
void setup() {
Serial.begin(115200);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
Wire.begin(21, 22); // SDA, SCL
lcd.init();
lcd.backlight();
dht.begin();
lcd.clear();
}
void limpalinha(int linha){
lcd.setCursor(0, linha);
lcd.print(" ");
}
void limpalinha0p(){
lcd.setCursor(4, 0);
lcd.print(" ");
}
void emergenciasom() {
Serial.println("Buzzer ligado...");
limpalinha(0);
lcd.setCursor(0, 0);
lcd.print("ALERTA,som excessivo");
auxsom = 1;
}
void emergenciatemperatura(){
limpalinha(1);
lcd.setCursor(0, 1);
lcd.print("ALERTA,alta temp");
auxtemp = 1;
}
void loop() {
int soundValue = analogRead(SOUND_PIN);
float temperatura = dht.readTemperature();
float umidade = dht.readHumidity();
Serial.print("Nivel de som: ");
Serial.println(soundValue);
Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.println(" C");
Serial.print("Umidade: ");
Serial.print(umidade);
Serial.println("%");
if (soundValue > threshold) {
if (!relayState) {
digitalWrite(RELAY_PIN, HIGH);
relayState = true;
Serial.println("ALERTA: Buzzer ativado!");
} else {
if (auxsom == 0){
emergenciasom();
}
}
} else {
if (relayState) {
digitalWrite(RELAY_PIN, LOW);
relayState = false;
Serial.println("Buzzer desativado.");
auxsom = 0;
}
}
if (soundValue != lastSoundValue && soundValue < 2000) {
limpalinha0p();
lcd.setCursor(0, 0);
lcd.print("Som: ");
lcd.print(soundValue);
lastSoundValue = soundValue;
auxsom = 0;
}
if (temperatura != lasttemp && temperatura <= 40){
if(temperatura > -10){
lcd.setCursor(0, 1);
lcd.print("T:");
lcd.print(temperatura, 1);
lcd.print("C ");
lasttemp = temperatura;
auxtemp = 0;
}else if(temperatura < -10){
lcd.setCursor(0, 1);
lcd.print("T:");
lcd.print(temperatura, 1);
lcd.print("C");
lasttemp = temperatura;
auxtemp = 0;
}
}
if(umidade != lastumid && temperatura <= 40){
if (umidade != 100){
lcd.setCursor(8, 1);
lcd.print("U:");
lcd.print(umidade, 1);
lcd.print("% "); // Espaço extra para limpar lixo de tela
lastumid = umidade;
}else if (umidade = 100){
lcd.setCursor(8, 1);
lcd.print("U:");
lcd.print(umidade, 0);
lcd.print("% "); // Espaço extra para limpar lixo de tela
lastumid = umidade;
}
}
// Alerta de temperatura alta
if (temperatura > 40 && auxtemp == 0) {
emergenciatemperatura();
int auxtemp2 = 1;
} else if (temperatura <= 40){
int auxtemp = 0;
if (auxtemp2 = 1){
lcd.setCursor(0, 1);
lcd.print("T:");
lcd.print(temperatura, 1);
lcd.print("C ");
lasttemp = temperatura;
if (umidade != 100){
lcd.setCursor(8, 1);
lcd.print("U:");
lcd.print(umidade, 1);
lcd.print("% "); // Espaço extra para limpar lixo de tela
lastumid = umidade;
}else if (umidade = 100){
lcd.setCursor(8, 1);
lcd.print("U:");
lcd.print(umidade, 0);
lcd.print("% "); // Espaço extra para limpar lixo de tela
lastumid = umidade;
}
auxtemp2 = 0;
}
}
delay(200);
}