#include "DHT.h"
#include <LiquidCrystal_I2C.h>
#define DHTPIN 2
#define DHTTYPE DHT22
#define PIR_PIN 3
#define MQ_PIN A0
#define BUZZER_PIN 4
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
float scoreSeguranca = 100.0;
bool presencaDetectada = false;
void setup() {
Serial.begin(9600);
// Ligando o display
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(" Iniciando IAQ ");
lcd.setCursor(0, 1);
lcd.print(" Sentinela ");
delay(2000);
pinMode(PIR_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
dht.begin();
Serial.println("Sistema Pronto!");
}
void loop() {
float umidade = dht.readHumidity();
float temperatura = dht.readTemperature();
int valorGas = analogRead(MQ_PIN);
presencaDetectada = digitalRead(PIR_PIN);
int ppmCO2 = map(valorGas, 0, 1023, 400, 2000);
scoreSeguranca = 100.0;
if (ppmCO2 > 800) scoreSeguranca -= (ppmCO2 - 800) * 0.05;
if (umidade < 40 || umidade > 60) scoreSeguranca -= 15;
if (presencaDetectada) scoreSeguranca -= 10;
if (scoreSeguranca < 0) scoreSeguranca = 0;
Serial.print("CO2: "); Serial.print(ppmCO2); Serial.print(" ppm | ");
Serial.print("Umid: "); Serial.print(umidade); Serial.print("% | ");
Serial.print("SCORE: "); Serial.println(scoreSeguranca);
// Imprime no Display LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("CO2:");
lcd.print(ppmCO2);
lcd.print(" ");
lcd.print(presencaDetectada ? "P:SIM" : "P:NAO");
lcd.setCursor(0, 1);
lcd.print("SCORE: ");
lcd.print(scoreSeguranca, 1);
// Alarme
if (scoreSeguranca < 50) {
lcd.print(" !");
tone(BUZZER_PIN, 1000);
delay(500);
noTone(BUZZER_PIN);
delay(500);
} else {
delay(2000);
}
}