//Welcome in the project Moch Rijki Supriyatna:("MRS_Iky")
//Sistem Keamanan Rumah ESP32 Notif To the Telegram
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// Konfigurasi pin
#define DHTPIN 15
#define DHTTYPE DHT22
#define PIR_PIN 14
#define MQ2_PIN 34
#define BUZZER_PIN 13
#define LED_PIN 12
#define RELAY_PIN 27
// Threshold untuk deteksi gas
#define MQ2_THRESHOLD 400
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Variabel waktu
unsigned long lastReadTime = 0;
const unsigned long readInterval = 5000;
void setup() {
Serial.begin(115200);
// Inisialisasi pin
pinMode(PIR_PIN, INPUT);
pinMode(MQ2_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(RELAY_PIN, OUTPUT);
// Inisialisasi modul
dht.begin();
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Sistem Siaga...");
delay(1000);
lcd.clear();
}
void loop() {
unsigned long now = millis();
// Baca sensor
int pirState = digitalRead(PIR_PIN);
int gasLevel = analogRead(MQ2_PIN);
float suhu = dht.readTemperature();
float kelembaban = dht.readHumidity();
// Tampilkan suhu dan kelembaban setiap 5 detik
if (now - lastReadTime > readInterval) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Suhu:");
lcd.print(suhu);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Hum:");
lcd.print(kelembaban);
lcd.print("%");
Serial.println("Update Data Lingkungan:");
Serial.printf("Suhu: %.1f C | Kelembaban: %.1f %% | Gas: %d\n", suhu, kelembaban, gasLevel);
lastReadTime = now;
}
// Deteksi bahaya
if (pirState == HIGH || gasLevel > MQ2_THRESHOLD) {
lcd.clear();
lcd.setCursor(0, 0);
if (pirState == HIGH) {
lcd.print("Intruder Detected!");
Serial.println("Telegram: Detected Motion!");
} else {
lcd.print("Gas Detected!");
Serial.println("Telegram: Gas Leakage Alert!");
}
// Aktifkan alarm
digitalWrite(BUZZER_PIN, HIGH);
digitalWrite(LED_PIN, HIGH);
digitalWrite(RELAY_PIN, HIGH);
delay(2000); // Alarm aktif selama 2 detik
} else {
digitalWrite(BUZZER_PIN, LOW);
digitalWrite(LED_PIN, LOW);
digitalWrite(RELAY_PIN, LOW);
}
}