#define BLYNK_TEMPLATE_ID "TMPL6bm-qoCbR"
#define BLYNK_TEMPLATE_NAME "Smart Library"
#define BLYNK_AUTH_TOKEN "DNN_9NeK9ra-8lkUpjconBO59eCbBAf_"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
// Definisi Pin sesuai rangkaianmu
const int pBising = 34; // Potensio
const int pAsap = 35; // Sensor Gas MQ-2
const int pGerak = 13; // Sensor PIR
const int trig = 5; // Ultrasonic Trig
const int echo = 18; // Ultrasonic Echo
const int bz = 12; // Buzzer
const int ledMerah = 2; // LED Merah (Peringatan)
const int ledHijau = 4; // LED Hijau (Aman)
bool statusPinjam = false; // Status peminjaman buku dari Blynk
BlynkTimer timer;
// Fungsi untuk membaca semua sensor dan menjalankan logika
void monitorLibrary() {
// 1. Membaca Sensor Suara & Asap
int nilaiSuara = analogRead(pBising);
int nilaiAsap = analogRead(pAsap);
Blynk.virtualWrite(V0, nilaiSuara);
Blynk.virtualWrite(V1, nilaiAsap);
// Logika Lampu: Jika berisik (> 2500) lampu jadi MERAH, jika tenang jadi HIJAU
if (nilaiSuara > 2500) {
digitalWrite(ledMerah, HIGH);
digitalWrite(ledHijau, LOW);
} else {
digitalWrite(ledMerah, LOW);
digitalWrite(ledHijau, HIGH);
}
// 2. Membaca Gerbang Keamanan (Ultrasonic)
digitalWrite(trig, LOW); delayMicroseconds(2);
digitalWrite(trig, HIGH); delayMicroseconds(10);
digitalWrite(trig, LOW);
long durasi = pulseIn(echo, HIGH);
int jarak = durasi * 0.034 / 2; // Rumus jarak dalam cm
// Logika Pencurian: Jika ada benda lewat (< 20cm) tapi buku BELUM di-scan pinjam
if (jarak < 20 && statusPinjam == false) {
tone(bz, 1000);
Blynk.virtualWrite(V2, 255); // Nyalakan LED Merah di aplikasi HP
} else {
Blynk.virtualWrite(V2, 0); // Matikan LED di HP
}
// 3. Logika Kebakaran (Asap)
if (nilaiAsap > 1500) {
tone(bz, 2000); // Suara alarm lebih melengking untuk kebakaran
}
// 4. Deteksi Gerakan di Lorong (PIR)
int gerakan = digitalRead(pGerak);
Blynk.virtualWrite(V3, gerakan * 255); // Kirim status gerak ke LED di HP
}
// Menerima input tombol "Status Pinjam" dari HP (V4)
BLYNK_WRITE(V4) {
statusPinjam = param.asInt();
}
// Menerima input tombol "Mute Alarm" dari HP (V5)
BLYNK_WRITE(V5) {
if (param.asInt() == 0) {
noTone(bz); // Matikan suara buzzer
}
}
void setup() {
pinMode(pGerak, INPUT);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
pinMode(bz, OUTPUT);
pinMode(ledMerah, OUTPUT);
pinMode(ledHijau, OUTPUT);
// Mulai koneksi ke Blynk
Blynk.begin(BLYNK_AUTH_TOKEN, "Wokwi-GUEST", "");
// Jalankan pemantauan setiap 1 detik
timer.setInterval(1000L, monitorLibrary);
}
void loop() {
Blynk.run();
timer.run();
}