#include <DHTesp.h>
#include <ESP32Servo.h>
// Definição dos pinos e tipos de sensores
const int DHT_PIN = 19; // Pino onde o DHT22 está conectado
const int MQ2_PIN = 34; // Pino do sensor de gás
const int LED_ALERTA = 16; // LED de alerta de gás
const int BUZZER = 17; // Buzzer para gás
const int PIR_PIN = 35; // Pino do sensor de presença (PIR)
const int LED_PIR = 23; // LED de alerta do sensor de presença
const int BUZZER_PIR = 18; // Buzzer para o alerta de presença (sirene policial)
const int leds[] = {13, 12, 14, 27, 26, 25, 33, 32, 15, 4, 5, 2};
const char* comodos[] = {
"Garagem", "Sala Jantar/Estar", "W.C. Inferior", "Cozinha", "Serviço",
"Suíte Jr.", "W.C. Jr.", "Suíte Master", "Sacada", "Fachada/Jardim",
"Closet", "W.C. Master"
};
const int numLeds = 12;
DHTesp dhtSensor; // Instancia o sensor DHT
Servo servoMotor; // Instancia o servo motor
const int BOTAO_PIN = 22; // Pino do botão para abrir/fechar o portão
bool portaoAberto = false; // Variável para controlar o estado do portão
void setup() {
Serial.begin(115200);
// Inicialização do sensor DHT22
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
// Inicialização dos pinos de LEDs e sensores
for (int i = 0; i < numLeds; i++) {
pinMode(leds[i], OUTPUT);
digitalWrite(leds[i], LOW); // Todos começam desligados
}
pinMode(MQ2_PIN, INPUT);
pinMode(LED_ALERTA, OUTPUT);
pinMode(BUZZER, OUTPUT);
pinMode(PIR_PIN, INPUT);
pinMode(LED_PIR, OUTPUT);
pinMode(BUZZER_PIR, OUTPUT);
pinMode(BOTAO_PIN, INPUT_PULLUP); // Configura o pino do botão com pull-up interno
// Inicializa o servo motor
servoMotor.attach(21); // Pino 21 para controle do servo
digitalWrite(LED_ALERTA, LOW);
digitalWrite(BUZZER, LOW);
digitalWrite(LED_PIR, LOW);
digitalWrite(BUZZER_PIR, LOW);
Serial.println("Projeto de Automação Inicializado.");
}
void loop() {
// Leitura do Sensor MQ-2 (detecção de gás)
int leituraGas = analogRead(MQ2_PIN);
if (leituraGas > 2000) {
alertaGas();
}
// Leitura do Sensor PIR (detecção de presença)
int presenca = digitalRead(PIR_PIN);
if (presenca == HIGH) {
alertaPresenca();
}
// Leitura do Sensor DHT (Temperatura e Umidade)
TempAndHumidity data = dhtSensor.getTempAndHumidity();
if (isnan(data.temperature) || isnan(data.humidity)) {
Serial.println("Falha na leitura do sensor DHT!");
} else {
Serial.print("Temperatura: ");
Serial.print(data.temperature, 2);
Serial.println(" °C");
Serial.print("Umidade: ");
Serial.print(data.humidity, 1);
Serial.println(" %");
Serial.println("---");
}
// Controle do Servo (portão)
if (digitalRead(BOTAO_PIN) == LOW) { // Botão pressionado (LOW porque é pull-up)
abrirOuFecharPortao();
delay(500); // Debounce do botão
}
// Controle via Serial para LEDs
if (Serial.available()) {
String comando = Serial.readStringUntil('\n');
comando.trim(); // Remove espaços extras
if (comando.equalsIgnoreCase("ON")) {
ligarTodos();
} else if (comando.equalsIgnoreCase("OFF")) {
desligarTodos();
} else if (comando.equalsIgnoreCase("ABRIR PORTAO")) {
abrirOuFecharPortao(); // Comando para abrir/fechar o portão via Serial
} else {
int num = comando.toInt();
if (num >= 1 && num <= numLeds) {
int ledIndex = num - 1;
digitalWrite(leds[ledIndex], !digitalRead(leds[ledIndex]));
Serial.print("LED ");
Serial.print(num);
Serial.print(" - ");
Serial.print(comodos[ledIndex]);
Serial.print(" agora está ");
Serial.println(digitalRead(leds[ledIndex]) ? "LIGADO" : "DESLIGADO");
} else {
Serial.println("Comando inválido! Digite de 1 a 12, 'ON', 'OFF' ou 'ABRIR PORTAO'.");
}
}
}
delay(2000); // Atraso para evitar leituras excessivas
}
// Função para abrir ou fechar o portão
void abrirOuFecharPortao() {
if (portaoAberto) {
Serial.println("Fechando o portão...");
servoMotor.write(0); // Fechar o portão (pode variar de acordo com seu servo)
portaoAberto = false;
} else {
Serial.println("Abrindo o portão...");
servoMotor.write(90); // Abrir o portão (pode variar de acordo com seu servo)
portaoAberto = true;
}
}
// Função para ligar todos os LEDs
void ligarTodos() {
for (int i = 0; i < numLeds; i++) {
digitalWrite(leds[i], HIGH);
}
Serial.println("Todos os LEDs foram LIGADOS.");
}
// Função para desligar todos os LEDs
void desligarTodos() {
for (int i = 0; i < numLeds; i++) {
digitalWrite(leds[i], LOW);
}
Serial.println("Todos os LEDs foram DESLIGADOS.");
}
// Função para ativar o alerta de gás
void alertaGas() {
Serial.println("🚨 Vazamento de gás detectado! 🚨");
for (int i = 0; i < 10; i++) {
digitalWrite(LED_ALERTA, HIGH);
tone(BUZZER, 1000); // Som agudo
delay(250);
digitalWrite(LED_ALERTA, LOW);
noTone(BUZZER);
delay(250);
}
}
// Função para ativar o alerta de presença
void alertaPresenca() {
Serial.println("🚨 Alerta de Presença Detectada! 🚨");
for (int i = 0; i < 3; i++) {
digitalWrite(LED_PIR, HIGH);
tone(BUZZER_PIR, 1500); // Som de sirene policial
delay(250);
digitalWrite(LED_PIR, LOW);
noTone(BUZZER_PIR);
delay(250);
}
}
Garagem
Sala
WC inf
Cozinha
Serviço
Suíte Jr.
WC Jr.
Suíte Master
Closet
Sacada
Fachada/Jardim
WC Master
Buzzer Gás
Buzzer Presença
Alarme Movimento
Alarme Gás