Tingkat terang ruangan tampil sebagai persen di HP. Proyek ini juga mengajarkan kalibrasi: mengubah angka mentah sensor menjadi skala yang masuk akal.
LDR (light dependent resistor) makin kecil hambatannya saat terkena cahaya. Di modul KY-018, LDR dipasang dengan resistor tetap membentuk pembagi tegangan, sehingga pin S mengeluarkan tegangan yang berubah mengikuti cahaya. Arah perubahannya (terang jadi besar atau kecil) tergantung cara modul dirakit. Karena itu kode memakai dua angka kalibrasi, MENTAH_GELAP dan MENTAH_TERANG, yang kamu isi dari hasil pengamatan sendiri.
Komponen
| Komponen | Qty | Harga |
|---|---|---|
| NodeMCU ESP8266 V3 (Lolin) | 1 | Rp42.000 |
| Modul sensor cahaya LDR | 1 | Rp7.200 |
| Kabel jumper female-female 10 cm (isi 10)isi 10, terpakai 3 | 1 | Rp3.500 |
| Kabel micro USB data 30 cmopsional, kalau belum punya kabel micro USB data | 1 | Rp11.700 |
| Total (tanpa opsional) | Rp52.700 |
Langkah 1: Rangkai komponen
Sambungkan kabel sesuai gambar di atas. Kalau gambar dan tabel terlihat berbeda, ikuti tabel.
| Dari | Ke | Kabel | |
|---|---|---|---|
| Modul LDR KY-018 S | → | A0 | kuning |
| Modul LDR KY-018 + | → | 3V | merah |
| Modul LDR KY-018 − | → | G | hitam |
Langkah 2: Siapkan dashboard Klenik
Cara cepat: unduh p031.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 |
|---|---|---|
| Gauge Tingkat Cahaya | ichibot/KODE/p031/cahaya | 0–100 % |
| Chart Cahaya Sepanjang Hari | ichibot/KODE/p031/cahaya | 0–100 % |
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 031 - Sensor Cahaya LDR ke Dashboard
// 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_CAHAYA = "ichibot/budi1234/p031/cahaya";
const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
const int PIN_LDR = A0;
// Kalibrasi: lihat angka mentah di Serial Monitor saat LDR ditutup jari dan saat disenter HP
const int MENTAH_GELAP = 900;
const int MENTAH_TERANG = 80;
unsigned long terakhir = 0;
void langganan() {}
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();
mqtt.setServer(BROKER, 1883);
}
void loop() {
if (!mqtt.connected()) sambungMQTT();
mqtt.loop();
if (millis() - terakhir < 1000) return;
terakhir = millis();
int mentah = analogRead(PIN_LDR);
int terang = constrain(map(mentah, MENTAH_GELAP, MENTAH_TERANG, 0, 100), 0, 100);
mqtt.publish(TOPIK_CAHAYA, String(terang).c_str());
Serial.printf("mentah %d -> terang %d%%\n", mentah, terang);
}Langkah 4: Pahami kodenya
- Langkah kalibrasi: upload, buka Serial Monitor, tutup LDR rapat dengan jari dan catat angkanya (gelap), lalu sorot dengan senter HP dan catat lagi (terang).
map()bisa memetakan rentang terbalik. Kalau di modulmu gelap justru angka kecil, cukup tukar isi kedua konstanta.