Tutorial Belanja komponen

Tutorial › Cahaya

Pengingat Lampu Lupa Dimatikan

ESP-12ED0D1D2D3D43VGD5D6D7D8RXTXG3VA0GVUS3S2S1SCS0SKG3VENRSTGVINS+−Modul LDR KY-018

Kalau lampu ruangan masih menyala setelah jam pulang, dashboard menyala merah dan mengirim satu pesan pengingat. Hemat listrik di kantor, kelas, atau gudang tanpa perlu keliling mengecek.

Sensor LDR membaca terang ruangan seperti proyek 031. Jam diambil dari internet (NTP). Lampu dianggap lupa dimatikan kalau terang di atas 40% dan jam sudah lewat jamPulang (atau antara tengah malam dan jam 6 pagi). Pesan pengingat hanya dikirim sekali per kejadian, lalu disiapkan lagi setelah lampu benar-benar mati. Jam pulang bisa diubah dari slider di HP.

Komponen

KomponenQtyHarga
NodeMCU ESP8266 V3 (Lolin)1Rp42.000
Modul sensor cahaya LDR1Rp7.200
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)Rp52.700
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

Langkah 2: Siapkan dashboard Klenik

Lampu Lupa Dimatikanichibot/budi1234/p034/lupa
LUPA!
0 detik lalu
Terang Ruanganichibot/budi1234/p034/cahaya
0 – 10068%
0 detik lalu
Jam Pulangichibot/budi1234/p034/jampulang
1717 of 23
0 detik lalu
Pengingatichibot/budi1234/p034/log
17:42 lampu ruangan masih menyala!
0 detik lalu

Cara cepat: unduh p034.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
Lampu Lupa Dimatikan
ichibot/KODE/p034/lupaON = 1 “LUPA!”, OFF = 0
Gauge
Terang Ruangan
ichibot/KODE/p034/cahaya0–100 %
Slider Output
Jam Pulang
ichibot/KODE/p034/jampulang12–23
Text Log
Pengingat
ichibot/KODE/p034/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).

p034.inoUnduh .ino
// Proyek 034 - Pengingat Lampu Lupa Dimatikan
// 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_JAMPULANG = "ichibot/budi1234/p034/jampulang";
const char* TOPIK_CAHAYA    = "ichibot/budi1234/p034/cahaya";
const char* TOPIK_LUPA      = "ichibot/budi1234/p034/lupa";
const char* TOPIK_LOG       = "ichibot/budi1234/p034/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_LDR = A0;
const int MENTAH_GELAP = 900, MENTAH_TERANG = 80;   // hasil kalibrasi proyek 031
int jamPulang = 17;                   // lampu masih nyala setelah jam ini = lupa
bool sudahIngatkan = false;
unsigned long terakhir = 0;

void pesanMasuk(char* t, byte* isi, unsigned int panjang) {
  String p;
  for (unsigned int i = 0; i < panjang; i++) p += (char)isi[i];
  jamPulang = constrain(p.toInt(), 12, 23);
}

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

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); sambungWiFi(); configTime(7 * 3600, 0, "pool.ntp.org"); mqtt.setServer(BROKER, 1883); mqtt.setCallback(pesanMasuk); } void loop() { if (!mqtt.connected()) sambungMQTT(); mqtt.loop(); if (millis() - terakhir < 10000) return; terakhir = millis(); int terang = constrain(map(analogRead(PIN_LDR), MENTAH_GELAP, MENTAH_TERANG, 0, 100), 0, 100); bool lampuNyala = terang > 40; time_t t = time(nullptr); int jam = localtime(&t)->tm_hour; bool lupa = lampuNyala && (jam >= jamPulang || jam < 6); mqtt.publish(TOPIK_CAHAYA, String(terang).c_str()); mqtt.publish(TOPIK_LUPA, lupa ? "1" : "0", true); if (lupa && !sudahIngatkan) { mqtt.publish(TOPIK_LOG, (jamSekarang() + " lampu ruangan masih menyala!").c_str()); sudahIngatkan = true; // satu pesan per kejadian, tidak tiap 10 detik } if (!lampuNyala) sudahIngatkan = false; }

Langkah 4: Pahami kodenya

  1. Ambang 40% memisahkan lampu menyala dengan sisa cahaya dari luar. Kalau ruangan dekat jendela, siang hari bisa terbaca menyala. Karena itu jam juga dicek.
  2. Lupa = lampu menyala DAN sudah lewat jam pulang (atau dini hari).
  3. Penanda supaya pengingat tidak dikirim tiap 10 detik. Indikator di dashboard tetap merah selama lampu masih menyala.