Tutorial Belanja komponen

Tutorial › Cahaya

Lampu Teras Otomatis Malam Hari

ESP-12ED0D1D2D3D43VGD5D6D7D8RXTXG3VA0GVUS3S2S1SCS0SKG3VENRSTGVINS+−Modul LDR KY-018SRD-05VDCL HDC+DC−INNOCOMNCRelay 1 ch 5V (jumper H)+−Baterai 3×AA (4,5V)USBVCCGNDSoket USB + lampu USB

Lampu menyala sendiri saat hari gelap dan mati saat terang. Lampu mobil yang lewat sekilas tidak membuatnya padam-nyala, dan dari HP kamu bisa mengatur kepekaannya atau mengendalikan lampu manual.

Sensor dan kalibrasinya sama dengan proyek 031. Lampu baru menyala kalau gelap bertahan 30 detik berturut-turut, dan baru mati kalau terang melewati batas + 15%. Dua syarat ini mencegah lampu bereaksi pada bayangan, awan, atau sorot lampu kendaraan. Untuk latihan, bebannya lampu USB 5V lewat relay dan 3 baterai AA. Polanya sama dengan lampu teras sungguhan.

Komponen

KomponenQtyHarga
NodeMCU ESP8266 V3 (Lolin)1Rp42.000
Modul sensor cahaya LDR1Rp7.200
Modul relay 1 channel 5V1Rp17.000
Soket USB female ke pin DIP1Rp3.500
Lampu USB mini1Rp8.775
Holder baterai 3×AA + kabelbaterai AA dibeli terpisah1Rp6.000
Kabel jumper female-female 10 cm (isi 10)isi 10, terpakai 61Rp3.500
Kabel micro USB data 30 cmopsional, kalau belum punya kabel micro USB data1Rp11.700
Total (tanpa opsional)Rp87.975
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
Relay 1 ch 5V (jumper H) DC+→VUoranye
Relay 1 ch 5V (jumper H) DC−→Ghitam
Relay 1 ch 5V (jumper H) IN→D1 GPIO5biru
Baterai 3×AA (4,5V) +→Relay 1 ch 5V (jumper H) COMmerah
Relay 1 ch 5V (jumper H) NO→Soket USB + lampu USB VCCmerah
Soket USB + lampu USB GND→Baterai 3×AA (4,5V) −hitam

Langkah 2: Siapkan dashboard Klenik

Cahaya Luarichibot/budi1234/p032/cahaya
0 – 10012%
0 detik lalu
Lampu Terasichibot/budi1234/p032/lampu/status
NYALA
0 detik lalu
Mode Otomatisichibot/budi1234/p032/otomatis
Otomatis
0 detik lalu
Lampu Manualichibot/budi1234/p032/lampu
Lampu
Belum pernah ditekan
Batas Gelapichibot/budi1234/p032/batas
25%25 of 90%
0 detik lalu

Cara cepat: unduh p032.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
Gauge
Cahaya Luar
ichibot/KODE/p032/cahaya0–100 %
Indikator Boolean
Lampu Teras
ichibot/KODE/p032/lampu/statusON = 1 “NYALA”, OFF = 0
Switch
Mode Otomatis
ichibot/KODE/p032/otomatispayload ON / OFF
Switch
Lampu Manual
ichibot/KODE/p032/lampupayload ON / OFF
Slider Output
Batas Gelap
ichibot/KODE/p032/batas5–90 %

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).

p032.inoUnduh .ino
// Proyek 032 - Lampu Teras Otomatis Malam Hari
// 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_LAMPU_STATUS = "ichibot/budi1234/p032/lampu/status";
const char* TOPIK_CAHAYA       = "ichibot/budi1234/p032/cahaya";
const char* TOPIK_OTOMATIS     = "ichibot/budi1234/p032/otomatis";
const char* TOPIK_BATAS        = "ichibot/budi1234/p032/batas";
const char* TOPIK_LAMPU        = "ichibot/budi1234/p032/lampu";

const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
const int PIN_LDR = A0, PIN_RELAY = D1;
const int MENTAH_GELAP = 900, MENTAH_TERANG = 80;   // isi dengan hasil kalibrasi proyek 031
int batas = 25;                       // nyala kalau terang di bawah 25%
bool otomatis = true, lampu = false;
unsigned long terakhir = 0, gelapSejak = 0;

void atur(bool nyala) {
  lampu = nyala;
  digitalWrite(PIN_RELAY, nyala ? HIGH : LOW);
  mqtt.publish(TOPIK_LAMPU_STATUS, nyala ? "1" : "0", true);
}

void pesanMasuk(char* t, byte* isi, unsigned int panjang) {
  String topik = t, p;
  for (unsigned int i = 0; i < panjang; i++) p += (char)isi[i];
  if (topik == TOPIK_OTOMATIS) otomatis = (p == "ON");
  else if (topik == TOPIK_BATAS) batas = constrain(p.toInt(), 5, 90);
  else if (topik == TOPIK_LAMPU && !otomatis) atur(p == "ON");
}

void langganan() {
  mqtt.subscribe(TOPIK_OTOMATIS);
  mqtt.subscribe(TOPIK_BATAS);
  mqtt.subscribe(TOPIK_LAMPU);
}

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_RELAY, OUTPUT); sambungWiFi(); mqtt.setServer(BROKER, 1883); mqtt.setCallback(pesanMasuk); } void loop() { if (!mqtt.connected()) sambungMQTT(); mqtt.loop(); if (millis() - terakhir < 1000) return; terakhir = millis(); int terang = constrain(map(analogRead(PIN_LDR), MENTAH_GELAP, MENTAH_TERANG, 0, 100), 0, 100); mqtt.publish(TOPIK_CAHAYA, String(terang).c_str()); if (!otomatis) return; // harus gelap 30 detik berturut-turut: lampu mobil lewat atau awan tidak memicu if (terang < batas) { if (!gelapSejak) gelapSejak = millis(); } else gelapSejak = 0; if (!lampu && gelapSejak && millis() - gelapSejak > 30000) atur(true); if (lampu && terang > batas + 15) atur(false); }

Langkah 4: Pahami kodenya

  1. Mencatat sejak kapan cahaya berada di bawah batas. Begitu terang lagi, catatan dikosongkan dan hitungan mulai dari awal.
  2. Syarat nyala: belum menyala, sudah gelap, dan gelapnya sudah lebih dari 30 detik.
  3. Syarat mati memakai batas yang lebih tinggi. LDR jangan diletakkan di bawah lampu itu sendiri, karena cahaya lampu akan terbaca sebagai siang.