Tutorial Belanja komponen

Tutorial › Jarak & Gerak

Sensor Gerak PIR Kirim Peringatan

ESP-12ED0D1D2D3D43VGD5D6D7D8RXTXG3VA0GVUS3S2S1SCS0SKG3VENRSTGVINVCCOUTGNDPIR HC-SR501

Sensor PIR mendeteksi orang yang bergerak sampai jarak ±7 m. Setiap gerakan dicatat dengan jamnya di dashboard. Mode siaga bisa dinyalakan saat ruangan seharusnya kosong.

PIR (passive infrared) tidak memancarkan apa-apa. Sensor ini menangkap perubahan panas tubuh yang bergerak di depan lensa putihnya. Keluarannya HIGH selama ada gerakan, ditambah waktu tahan yang diatur trimpot oranye. Setelah dinyalakan, PIR butuh 30-60 detik "pemanasan" dan bisa salah deteksi selama itu. HC-SR501 diberi daya 5V dari pin VU, tapi keluarannya hanya 3,3V, jadi aman langsung ke D5.

Komponen

KomponenQtyHarga
NodeMCU ESP8266 V3 (Lolin)1Rp42.000
Sensor gerak PIR HC-SR5011Rp15.000
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)Rp60.500
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→VUmerah
PIR HC-SR501 OUT→D5 GPIO14kuning
PIR HC-SR501 GND→Ghitam

Langkah 2: Siapkan dashboard Klenik

Gerakanichibot/budi1234/p041/gerak
ADA GERAK
0 detik lalu
Mode Siagaichibot/budi1234/p041/siaga
Siaga
0 detik lalu
Catatan Gerakanichibot/budi1234/p041/log
21:14 ada gerakan (ke-1)
21:15 ada gerakan (ke-2)
0 detik lalu

Cara cepat: unduh p041.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
Indikator Boolean
Gerakan
ichibot/KODE/p041/gerakON = 1 “ADA GERAK”, OFF = 0
Switch
Mode Siaga
ichibot/KODE/p041/siagapayload ON / OFF
Text Log
Catatan Gerakan
ichibot/KODE/p041/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).

p041.inoUnduh .ino
// Proyek 041 - Sensor Gerak PIR Kirim Peringatan
// Board: NodeMCU ESP8266 V3 | Dashboard: klenik.ichibot.id
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <time.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_SIAGA = "ichibot/budi1234/p041/siaga";
const char* TOPIK_GERAK = "ichibot/budi1234/p041/gerak";
const char* TOPIK_LOG   = "ichibot/budi1234/p041/log";

const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
String jamSekarang() {
  time_t t = time(nullptr);
  char buf[6];
  strftime(buf, sizeof(buf), "%H:%M", localtime(&t));
  return String(buf);
}
const int PIN_PIR = D5;               // OUT HC-SR501: HIGH saat ada gerakan
bool siaga = true, gerakTadi = false;
int jumlah = 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");
}

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(PIN_PIR, INPUT); sambungWiFi(); configTime(7 * 3600, 0, "pool.ntp.org"); mqtt.setServer(BROKER, 1883); mqtt.setCallback(pesanMasuk); Serial.println("PIR pemanasan 30-60 detik..."); } void loop() { if (!mqtt.connected()) sambungMQTT(); mqtt.loop(); bool gerak = digitalRead(PIN_PIR); if (gerak != gerakTadi) { gerakTadi = gerak; mqtt.publish(TOPIK_GERAK, gerak ? "1" : "0"); if (gerak && siaga) { jumlah++; mqtt.publish(TOPIK_LOG, (jamSekarang() + " ada gerakan (ke-" + String(jumlah) + ")").c_str()); } } }

Langkah 4: Pahami kodenya

  1. Keluaran PIR sudah berupa HIGH/LOW yang jelas, jadi tidak perlu pull-up.
  2. Status dikirim hanya saat berubah: awal gerakan dan saat PIR kembali tenang.
  3. Catatan dengan jam hanya dibuat dalam mode siaga. Indikator di dashboard tetap jalan untuk melihat aktivitas.