//Prof. Tiago Façanha
/*
Projete um protótipo de segurança e assistência no ESP32
que utilize o Sensor PIR para detectar movimento e o Sensor
Ultrassônico para medir a proximidade.
- O sistema deve alertar o usuário através de um Buzzer
(frequência variável conforme a distância) e exibir o status
em tempo real em um LCD I2C.
- Quando o PIR não detectar presença, o sistema deve entrar em
modo de economia, desligando os sensores ativos.
*/
#include <LiquidCrystal_I2C.h>
const int trigger = 14;
const int echo = 27;
const int led = 13;
const int buzzer = 12;
const int pir = 26;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
pinMode(pir, INPUT);
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
pinMode(led, OUTPUT);
pinMode(buzzer, OUTPUT);
// Inicializa o display LCD
lcd.init();
lcd.backlight();
lcd.print("Sistema Ta On!");
Serial.begin(115200);
}
// Função para medir distância
long lerDistancia() {
digitalWrite(trigger, LOW);
delayMicroseconds(2);
digitalWrite(trigger, HIGH);
delayMicroseconds(10);
digitalWrite(trigger, LOW);
return pulseIn(echo, HIGH) * 0.034 / 2;
}
// Função para gerenciar alertas sonoros
void gerenciarBuzzer(long distancia) {
if (distancia < 20) {
tone(buzzer, 1000); // Som contínuo
} else if (distancia < 100) {
tone(buzzer, 1000, 100); // Bips intermitentes
delay(distancia * 5);
} else {
noTone(buzzer);
}
}
void loop() {
if (digitalRead(pir)) {
long dist = lerDistancia();
lcd.setCursor(0, 0);
lcd.print("Presenca: OK ");
lcd.setCursor(0, 1);
lcd.print("Dist: ");
lcd.print(dist);
lcd.print("cm ");
gerenciarBuzzer(dist);
} else {
lcd.setCursor(0, 0);
lcd.print("Modo: Standby ");
lcd.setCursor(0, 1);
lcd.print("Vaga Livre ");
noTone(buzzer);
}
delay(100); // Estabilidade do sistema
}