Sensor getar SW-420 ditempel di brankas, kotak uang, atau laci. Ketukan sekali diabaikan, tetapi guncangan terus-menerus seperti dicongkel atau diangkat membuat sirine berbunyi dan Klenik langsung memberi tahu.
Di dalam SW-420 ada pegas kecil yang bersentuhan dengan logam saat bergetar. Komparator di modul mengubahnya menjadi sinyal HIGH di pin DO, dan kepekaannya diatur dengan trimpot.
Satu ketukan atau pintu yang tertutup keras juga menghasilkan getaran. Karena itu NodeMCU menghitung jumlah awal getaran dalam jendela waktu 2 detik. Alarm baru terpicu kalau ada 5 getaran atau lebih dalam 2 detik, yang khas untuk guncangan terus-menerus. Setelah 2 detik, hitungan dimulai dari nol lagi.
Komponen
| Komponen | Qty | Harga |
|---|---|---|
| NodeMCU ESP8266 V3 (Lolin) | 1 | Rp42.000 |
| SW-420 Sensor Getar Vibration Module Getaran Ard | 1 | Rp8.500 |
| Modul buzzer aktif KY-012 | 1 | Rp7.500 |
| Kabel jumper female-female 10 cm (isi 10)isi 10, terpakai 6 | 1 | Rp3.500 |
| Kabel micro USB data 30 cmopsional, kalau belum punya kabel micro USB data | 1 | Rp11.700 |
| Total (tanpa opsional) | Rp61.500 |
Langkah 1: Rangkai komponen
Sambungkan kabel sesuai gambar di atas. Kalau gambar dan tabel terlihat berbeda, ikuti tabel.
| Dari | Ke | Kabel | |
|---|---|---|---|
| Sensor getar SW-420 VCC | → | 3V | merah |
| Sensor getar SW-420 GND | → | G | hitam |
| Sensor getar SW-420 DO | → | D5 GPIO14 | biru |
| Modul buzzer aktif KY-012 S | → | D2 GPIO4 | kuning |
| Modul buzzer aktif KY-012 + | → | 3V | merah |
| Modul buzzer aktif KY-012 − | → | G | hitam |
Langkah 2: Siapkan dashboard Klenik
Cara cepat: unduh p116.json, ganti budi1234 dengan KODE-mu, lalu import di Klenik (menu titik tiga → Export / Import → Import → Ganti total). Langkah lengkapnya ada di Panduan Klenik.
| Widget | Topic | Setting |
|---|---|---|
| Switch Alarm Siaga | ichibot/KODE/p116/siaga | payload ON / OFF |
| Indikator Boolean Brankas | ichibot/KODE/p116/alarm | ON = 1 “DIBONGKAR!”, OFF = 0 |
| Text Log Catatan | ichibot/KODE/p116/log | menampilkan 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).
// Proyek 116 - Alarm Getaran Brankas
// 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/p116/alarm";
const char* TOPIK_SIAGA = "ichibot/budi1234/p116/siaga";
const char* TOPIK_LOG = "ichibot/budi1234/p116/log";
const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
const int GETAR = D5, SIRINE = D2;
const int BATAS_GETAR = 5; // jumlah getaran dalam 2 detik yang dianggap bongkar paksa
bool siaga = false, berbunyi = false, tadi = LOW;
int getaran = 0;
unsigned long jendela = 0;
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;
mqtt.publish(TOPIK_ALARM, "0", true);
}
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(GETAR, INPUT);
pinMode(SIRINE, OUTPUT);
sambungWiFi();
mqtt.setServer(BROKER, 1883);
mqtt.setCallback(pesanMasuk);
}
void loop() {
if (!mqtt.connected()) sambungMQTT();
mqtt.loop();
bool sekarang = digitalRead(GETAR); // SW-420: HIGH saat bergetar
if (sekarang == HIGH && tadi == LOW) { // hitung tiap awal getaran
if (millis() - jendela > 2000) { jendela = millis(); getaran = 0; }
getaran++;
if (siaga && !berbunyi && getaran >= BATAS_GETAR) {
berbunyi = true;
mqtt.publish(TOPIK_ALARM, "1", true);
mqtt.publish(TOPIK_LOG, ("Brankas diguncang! " + String(getaran) + " getaran dalam 2 detik").c_str());
}
}
tadi = sekarang;
digitalWrite(SIRINE, berbunyi && (millis() / 200) % 2);
}Langkah 4: Pahami kodenya
- Yang dihitung hanya perubahan dari diam ke getar, bukan lamanya getar. Satu getaran panjang tetap terhitung satu.
- Jendela waktu 2 detik. Getaran pertama setelah jeda panjang memulai hitungan baru.
- Kepekaan alarm. Turunkan ke 3 untuk lebih peka, naikkan kalau alarm terpicu oleh truk yang lewat.