Tutorial Belanja komponen

Tutorial › Cahaya

Deteksi Laser Putus (Laser Tripwire)

ESP-12ED0D1D2D3D43VGD5D6D7D8RXTXG3VA0GVUS3S2S1SCS0SKG3VENRSTGVINS+−Modul LDR KY-018+S+−Modul buzzer aktif KY-012+−Laser titik 5 mW (arahkan ke LDR)

Sinar laser ditembakkan melintang pintu atau lorong ke sebuah LDR. Begitu ada yang lewat dan memutus sinarnya, buzzer berbunyi dan dashboard mencatat kejadiannya, seperti adegan film pencurian.

Saat sinar laser mengenai LDR, angka A0 rendah dan stabil. Saat sinar terputus, LDR kembali membaca cahaya ruangan dan angkanya naik jauh. Ambang dihitung otomatis saat NodeMCU menyala (angka saat terkena laser + 150). Jadi laser harus sudah tepat mengenai LDR waktu alat dinyalakan. Switch Siaga mematikan alarm tanpa mematikan alat.

Komponen

KomponenQtyHarga
NodeMCU ESP8266 V3 (Lolin)1Rp42.000
Modul sensor cahaya LDR1Rp7.200
Laser titik 5 mW (tabung)1Rp25.000
Modul buzzer aktif KY-0121Rp7.500
Breadboard mini 170 titik1Rp4.875
Kabel jumper female-female 10 cm (isi 10)isi 10, terpakai 81Rp3.500
Kabel micro USB data 30 cmopsional, kalau belum punya kabel micro USB data1Rp11.700
Total (tanpa opsional)Rp90.075
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
Modul LDR KY-018 S→A0kuning
Modul LDR KY-018 +→3Vmerah
Modul LDR KY-018 −→Ghitam
Modul buzzer aktif KY-012 S→D2 GPIO4biru
Modul buzzer aktif KY-012 +→3Vmerah
Modul buzzer aktif KY-012 −→Ghitam
Laser titik 5 mW (arahkan ke LDR) +→3Vmerah
Laser titik 5 mW (arahkan ke LDR) −→Ghitam

Langkah 2: Siapkan dashboard Klenik

Sinar Laserichibot/budi1234/p038/putus
TERPUTUS
0 detik lalu
Siagaichibot/budi1234/p038/siaga
Siaga
0 detik lalu
Kejadianichibot/budi1234/p038/log
Sinar terputus! (ke-1)
Sinar terputus! (ke-2)
0 detik lalu

Cara cepat: unduh p038.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
Sinar Laser
ichibot/KODE/p038/putusON = 1 “TERPUTUS”, OFF = 0
Switch
Siaga
ichibot/KODE/p038/siagapayload ON / OFF
Text Log
Kejadian
ichibot/KODE/p038/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).

p038.inoUnduh .ino
// Proyek 038 - Deteksi Laser Putus (Laser Tripwire)
// 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_SIAGA = "ichibot/budi1234/p038/siaga";
const char* TOPIK_LOG   = "ichibot/budi1234/p038/log";
const char* TOPIK_PUTUS = "ichibot/budi1234/p038/putus";

const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
const int PIN_LDR = A0, BUZZER = D2;
int ambang = 0;                       // dihitung otomatis saat menyala
bool siaga = true, putusTadi = false;
unsigned long bunyiSampai = 0;
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(BUZZER, OUTPUT); delay(500); int kena = analogRead(PIN_LDR); // laser harus sudah tepat mengenai LDR saat menyala ambang = kena + 150; // sinar terhalang = angka naik jauh di atas ini Serial.printf("Laser kena: %d, ambang putus: %d\n", kena, ambang); sambungWiFi(); mqtt.setServer(BROKER, 1883); mqtt.setCallback(pesanMasuk); } void loop() { if (!mqtt.connected()) sambungMQTT(); mqtt.loop(); bool putus = analogRead(PIN_LDR) > ambang; if (putus && !putusTadi && siaga) { jumlah++; digitalWrite(BUZZER, HIGH); bunyiSampai = millis() + 1500; mqtt.publish(TOPIK_LOG, ("Sinar terputus! (ke-" + String(jumlah) + ")").c_str()); } if (putus != putusTadi) mqtt.publish(TOPIK_PUTUS, putus ? "1" : "0"); putusTadi = putus; if (bunyiSampai && (long)(millis() - bunyiSampai) >= 0) { digitalWrite(BUZZER, LOW); bunyiSampai = 0; } }

Langkah 4: Pahami kodenya

  1. Ambang otomatis. Angka 150 adalah jarak aman antara "kena laser" dan "terputus". Kalau ruangan sangat terang, perkecil angkanya.
  2. Bereaksi hanya di awal pemutusan, jadi orang yang berdiri di jalur sinar dihitung satu kali.
  3. Status UTUH/TERPUTUS selalu dilaporkan, walaupun siaga dimatikan. Siaga hanya mengatur buzzer dan catatan kejadian.