Tutorial Belanja komponen

Tutorial › Keamanan

Alarm Jendela Sensor Magnet

ESP-12ED0D1D2D3D43VGD5D6D7D8RXTXG3VA0GVUS3S2S1SCS0SKG3VENRSTGVINN12Saklar magnet MC-38 (2 kabel)+S+−Modul buzzer aktif KY-012

Saklar magnet MC-38 dipasang di jendela. Saat alarm diaktifkan dari HP dan jendela dibuka, buzzer berbunyi terus dan Klenik mencatat kejadiannya. Bunyi hanya berhenti kalau alarm dimatikan dari HP. Menutup jendela kembali tidak menghentikannya.

MC-38 dibaca seperti proyek 088: magnet dekat berarti LOW (tertutup), magnet jauh berarti HIGH (terbuka). Status jendela selalu dikirim, entah alarm aktif atau tidak, jadi kamu tetap tahu jendela mana yang lupa ditutup.

Kalau jendela dibuka saat switch Siaga aktif, variabel berbunyi menjadi true dan tetap true walaupun jendela ditutup lagi. Ini prinsip alarm sungguhan: penyusup tidak bisa menghentikan sirine hanya dengan menutup jendela. Satu-satunya cara mematikannya adalah switch Siaga.

Komponen

KomponenQtyHarga
NodeMCU ESP8266 V3 (Lolin)1Rp42.000
MC-38 Reed Switch Magnetic Sensor Door Window Se1Rp8.500
Modul buzzer aktif KY-0121Rp7.500
Kabel jumper male-female 10 cm (isi 10)isi 10, terpakai 21Rp3.500
Kabel jumper female-female 10 cm (isi 10)isi 10, terpakai 31Rp3.500
Kabel micro USB data 30 cmopsional, kalau belum punya kabel micro USB data1Rp11.700
Total (tanpa opsional)Rp65.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
Saklar magnet MC-38 (2 kabel) 1→D5 GPIO14biru
Saklar magnet MC-38 (2 kabel) 2→Ghitam
Modul buzzer aktif KY-012 S→D2 GPIO4kuning
Modul buzzer aktif KY-012 +→3Vmerah
Modul buzzer aktif KY-012 −→Ghitam

Langkah 2: Siapkan dashboard Klenik

Alarm Siagaichibot/budi1234/p115/siaga
Siaga
0 detik lalu
Jendelaichibot/budi1234/p115/jendela
TERBUKA
0 detik lalu
Sirineichibot/budi1234/p115/alarm
BERBUNYI!
0 detik lalu
Catatanichibot/budi1234/p115/log
Alarm jendela AKTIF
JENDELA DIBUKA saat alarm aktif!
Alarm jendela mati
0 detik lalu

Cara cepat: unduh p115.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 Siaga
ichibot/KODE/p115/siagapayload ON / OFF
Indikator Boolean
Jendela
ichibot/KODE/p115/jendelaON = 1 “TERBUKA”, OFF = 0
Indikator Boolean
Sirine
ichibot/KODE/p115/alarmON = 1 “BERBUNYI!”, OFF = 0
Text Log
Catatan
ichibot/KODE/p115/logmenampilkan teks masuk

Langkah 3: Upload kode

Library: PubSubClient (Nick O'Leary). Board di Arduino IDE: NodeMCU 1.0 (ESP-12E 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).

p115.inoUnduh .ino
// Proyek 115 - Alarm Jendela Sensor Magnet
// Board: NodeMCU ESP8266 V3 | Dashboard: klenik.ichibot.id
#include <ESP8266WiFi.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/p115/alarm";
const char* TOPIK_LOG     = "ichibot/budi1234/p115/log";
const char* TOPIK_SIAGA   = "ichibot/budi1234/p115/siaga";
const char* TOPIK_JENDELA = "ichibot/budi1234/p115/jendela";

const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
const int JENDELA = D5, SIRINE = D2;
bool siaga = false, berbunyi = false, terbukaTadi = false;

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");
  if (!siaga && berbunyi) {
    berbunyi = false;
    mqtt.publish(TOPIK_ALARM, "0", true);
  }
  mqtt.publish(TOPIK_LOG, siaga ? "Alarm jendela AKTIF" : "Alarm jendela 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(JENDELA, INPUT_PULLUP); pinMode(SIRINE, OUTPUT); sambungWiFi(); mqtt.setServer(BROKER, 1883); mqtt.setCallback(pesanMasuk); } void loop() { if (!mqtt.connected()) sambungMQTT(); mqtt.loop(); bool terbuka = digitalRead(JENDELA) == HIGH; // magnet menjauh = jendela dibuka if (terbuka != terbukaTadi) { terbukaTadi = terbuka; mqtt.publish(TOPIK_JENDELA, terbuka ? "1" : "0", true); if (terbuka && siaga && !berbunyi) { berbunyi = true; // terus bunyi walau jendela ditutup lagi mqtt.publish(TOPIK_ALARM, "1", true); mqtt.publish(TOPIK_LOG, "JENDELA DIBUKA saat alarm aktif!"); } } digitalWrite(SIRINE, berbunyi && (millis() / 250) % 2); }

Langkah 4: Pahami kodenya

  1. Alarm "mengunci": sekali terpicu, sirine terus berbunyi sampai dimatikan dari HP.
  2. Bunyi putus-putus 4 kali per detik, lebih menarik perhatian daripada bunyi panjang.