Tutorial Belanja komponen

Tutorial › Keamanan

Alarm Rumah: PIR + Magnet + Sirine

ESP32-WROOM-32D23D22TX0RX0D21D19D18D5TX2RX2D4D2D15GND3V3ENVPVND34D35D32D33D25D26D27D14D12D13GNDVINVCCOUTGNDPIR HC-SR501N12Saklar magnet MC-38 (2 kabel)+S+−Modul buzzer aktif KY-012

Alarm rumah seperti buatan pabrik: sensor magnet di pintu depan dan PIR di ruang tengah. Kalau pintu dibuka, ada waktu 15 detik untuk mematikan alarm dari HP. Gerakan di dalam rumah saat alarm aktif langsung membunyikan sirine.

Dua sensor diperlakukan berbeda, mengikuti cara kerja alarm rumah sungguhan. Pintu depan adalah jalan masuk pemilik rumah, jadi saat pintu dibuka alarm memberi jeda masuk 15 detik, ditandai bip pelan setiap detik. Kalau alarm tidak dimatikan dalam 15 detik, sirine berbunyi.

PIR di dalam rumah tidak diberi jeda. Gerakan saat alarm aktif berarti ada orang yang masuk lewat jalan lain (jendela, atap). Pengecualiannya, selama jeda masuk berjalan, PIR diabaikan supaya pemilik yang baru masuk tidak langsung memicu alarm.

Semua pemicu memakai satu fungsi picu() yang mencatat penyebabnya, sehingga dari Text Log kamu tahu dari mana alarm berasal.

Komponen

KomponenQtyHarga
ESP32 DOIT DevKit V1 30 pin1Rp75.000
Sensor gerak PIR HC-SR5011Rp15.000
MC-38 Reed Switch Magnetic Sensor Door Window Se1Rp8.500
Modul buzzer aktif KY-0121Rp7.500
Kabel jumper female-female 10 cm (isi 10)isi 10, terpakai 61Rp3.500
Kabel jumper male-female 10 cm (isi 10)isi 10, terpakai 21Rp3.500
Kabel micro USB data 30 cmopsional, kalau belum punya kabel micro USB data1Rp11.700
Total (tanpa opsional)Rp113.000
Daftar komponen proyek ini otomatis masuk ke pesan. Hapus yang sudah kamu punya sebelum dikirim.

Langkah 1: Rangkai komponen

Sambungkan kabel sesuai gambar di atas. Kalau gambar dan tabel terlihat berbeda, ikuti tabel.

DariKeKabel
PIR HC-SR501 VCC→VINmerah
PIR HC-SR501 OUT→D27 GPIO27kuning
PIR HC-SR501 GND→GNDhitam
Saklar magnet MC-38 (2 kabel) 1→D25 GPIO25biru
Saklar magnet MC-38 (2 kabel) 2→GNDhitam
Modul buzzer aktif KY-012 S→D26 GPIO26oranye
Modul buzzer aktif KY-012 +→VINmerah
Modul buzzer aktif KY-012 −→GNDhitam

Langkah 2: Siapkan dashboard Klenik

Alarm Rumahichibot/budi1234/p117/siaga
Aktif
0 detik lalu
Sirineichibot/budi1234/p117/alarm
BERBUNYI!
0 detik lalu
Catatan Alarmichibot/budi1234/p117/log
Alarm rumah AKTIF
Pintu dibuka, 15 detik untuk mematikan alarm
Alarm rumah mati
0 detik lalu

Cara cepat: unduh p117.json, ganti budi1234 dengan KODE-mu, lalu import di Klenik (menu titik tiga → Export / Import → Import → Ganti total). Langkah lengkapnya ada di Panduan Klenik.

WidgetTopicSetting
Switch
Alarm Rumah
ichibot/KODE/p117/siagapayload ON / OFF
Indikator Boolean
Sirine
ichibot/KODE/p117/alarmON = 1 “BERBUNYI!”, OFF = 0
Text Log
Catatan Alarm
ichibot/KODE/p117/logmenampilkan teks masuk

Langkah 3: Upload kode

Library: PubSubClient (Nick O'Leary). Board di Arduino IDE: ESP32 Dev Module. Isi dulu nama WiFi dan password di bagian ISI DULU, lalu ganti budi1234 di baris topic dengan KODE-mu, lalu upload dan buka Serial Monitor (115200).

p117.inoUnduh .ino
// Proyek 117 - Alarm Rumah: PIR + Magnet + Sirine
// Board: ESP32 DOIT DevKit V1 | Dashboard: klenik.ichibot.id
#include <WiFi.h>
#include <PubSubClient.h>

// ===== ISI DULU =====
const char* WIFI_NAMA = "nama-wifi-kamu";
const char* WIFI_PASS = "password-wifi-kamu";

// topic MQTT: ganti budi1234 dengan KODE-mu (sama dengan di dashboard Klenik)
const char* TOPIK_ALARM = "ichibot/budi1234/p117/alarm";
const char* TOPIK_LOG   = "ichibot/budi1234/p117/log";
const char* TOPIK_SIAGA = "ichibot/budi1234/p117/siaga";

const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
const int PIR = 27, PINTU = 25, SIRINE = 26;
const unsigned long JEDA_MASUK = 15000;   // waktu untuk mematikan alarm setelah pintu dibuka
bool siaga = false, berbunyi = false;
unsigned long pintuDibukaPada = 0;

void picu(const char* sebab) {
  if (berbunyi) return;
  berbunyi = true;
  mqtt.publish(TOPIK_ALARM, "1", true);
  mqtt.publish(TOPIK_LOG, (String("ALARM: ") + sebab).c_str());
}

void pesanMasuk(char* t, byte* isi, unsigned int panjang) {
  String p;
  for (unsigned int i = 0; i < panjang; i++) p += (char)isi[i];
  siaga = (p == "ON");
  berbunyi = false;
  pintuDibukaPada = 0;
  mqtt.publish(TOPIK_ALARM, "0", true);
  mqtt.publish(TOPIK_LOG, siaga ? "Alarm rumah AKTIF" : "Alarm rumah mati");
}

void langganan() {
  mqtt.subscribe(TOPIK_SIAGA);
}

sambungWiFi() dan sambungMQTT(): sama di semua proyek (klik untuk lihat)void sambungWiFi() { WiFi.begin(WIFI_NAMA, WIFI_PASS); Serial.print("WiFi"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(" OK, IP " + WiFi.localIP().toString()); } void sambungMQTT() { while (!mqtt.connected()) { if (mqtt.connect(WiFi.macAddress().c_str())) { Serial.println("Terhubung ke Klenik"); langganan(); } else { Serial.println("Broker gagal, coba lagi 3 detik"); delay(3000); } } }
void setup() { Serial.begin(115200); pinMode(PIR, INPUT); pinMode(PINTU, INPUT_PULLUP); pinMode(SIRINE, OUTPUT); sambungWiFi(); mqtt.setServer(BROKER, 1883); mqtt.setCallback(pesanMasuk); } void loop() { if (!mqtt.connected()) sambungMQTT(); mqtt.loop(); if (siaga && !berbunyi) { if (digitalRead(PINTU) == HIGH && !pintuDibukaPada) { pintuDibukaPada = millis(); // pintu depan: beri waktu untuk mematikan alarm mqtt.publish(TOPIK_LOG, "Pintu dibuka, 15 detik untuk mematikan alarm"); } if (pintuDibukaPada && millis() - pintuDibukaPada > JEDA_MASUK) picu("pintu dibuka, alarm tidak dimatikan"); if (digitalRead(PIR) == HIGH && !pintuDibukaPada) picu("gerakan di dalam rumah"); } bool bip = pintuDibukaPada && !berbunyi && (millis() / 1000) % 2 && (millis() % 1000) < 80; // bip pelan saat menunggu digitalWrite(SIRINE, (berbunyi && (millis() / 200) % 2) || bip); }

Langkah 4: Pahami kodenya

  1. Waktu jeda masuk. Alarm pabrikan biasanya 15-30 detik.
  2. PIR hanya memicu kalau tidak sedang jeda masuk.
  3. Bip pendek 80 ms setiap 2 detik selama jeda masuk, sebagai pengingat untuk mematikan alarm.