Praktikum Lampu Otomatis ESP32 dengan LDR dan Histeresis
Tutorial membaca LDR dengan ADC ESP32 dan mengendalikan lampu otomatis menggunakan dua threshold histeresis agar output stabil.
Artikel ini disusun sebagai panduan teknis Ruang IoT. Gunakan daftar isi untuk berpindah antarbagian dan ikuti langkah secara berurutan ketika artikel memuat praktik atau konfigurasi.
Praktikum ini membuat lampu otomatis berdasarkan intensitas cahaya menggunakan LDR dan ESP32. Alih-alih hanya memakai satu ambang, sistem menggunakan histeresis: lampu menyala ketika kondisi cukup gelap dan baru padam ketika cahaya sudah melewati batas yang lebih tinggi. Teknik ini mencegah output berkedip cepat saat nilai sensor berada tepat di sekitar threshold.
Tujuan praktikum
- Membaca sensor analog melalui ADC.
- Mengamati hubungan rangkaian pembagi tegangan dan nilai ADC.
- Menerapkan dua threshold untuk histeresis.
- Membedakan logika kontrol lokal dan telemetry IoT.
Rangkaian LDR
Buat pembagi tegangan menggunakan LDR dan resistor 10 kΩ. Titik tengah masuk ke pin ADC, misalnya GPIO 34 pada ESP32 klasik. Arah perubahan ADC tergantung posisi LDR dan resistor dalam pembagi, sehingga langkah pertama adalah mengamati data mentah pada kondisi terang dan gelap.
| Bagian | Koneksi |
|---|---|
| Titik ADC | GPIO 34 |
| Output lampu/LED | GPIO 25 |
| Resistor tetap | 10 kΩ sebagai titik awal |
| Catu sensor | 3.3V dan GND |
Program histeresis
const int LDR_PIN = 34;
const int LAMP_PIN = 25;
// Contoh asumsi: ADC makin besar saat kondisi makin gelap.
// Verifikasi arah ini pada rangkaian Anda.
const int DARK_ON = 2600;
const int BRIGHT_OFF = 1900;
bool lampOn = false;
void setup() {
Serial.begin(115200);
pinMode(LAMP_PIN, OUTPUT);
digitalWrite(LAMP_PIN, LOW);
}
void loop() {
int lightRaw = analogRead(LDR_PIN);
if (!lampOn && lightRaw >= DARK_ON) {
lampOn = true;
} else if (lampOn && lightRaw <= BRIGHT_OFF) {
lampOn = false;
}
digitalWrite(LAMP_PIN, lampOn ? HIGH : LOW);
Serial.printf("ldr=%d lamp=%s\n", lightRaw, lampOn ? "ON" : "OFF");
delay(250);
}Kalibrasi threshold
- Rekam nilai ADC di ruang terang.
- Tutup LDR secara bertahap dan rekam nilai pada kondisi yang Anda anggap “gelap”.
- Tentukan threshold ON di sekitar titik gelap yang diinginkan.
- Tentukan threshold OFF dengan jarak yang cukup dari threshold ON.
- Uji transisi lambat untuk memastikan lampu tidak berkedip.
Menjadikannya node IoT
Kirim ldr_raw dan lamp_state sebagai telemetry. Anda juga dapat menyimpan nilai threshold sebagai konfigurasi perangkat agar dapat diubah melalui antarmuka administrasi, tetapi perubahan remote sebaiknya divalidasi agar tidak menerima nilai di luar rentang ADC.
Pengembangan lanjutan
Tambahkan moving average untuk meredam noise, jadwal waktu sebagai syarat tambahan, atau mode manual yang mempunyai timeout sehingga sistem kembali ke mode otomatis. Untuk beban listrik nyata, gunakan modul dan proteksi yang sesuai; praktikum dasar lebih aman menggunakan LED atau beban DC rendah.
Referensi resmi dan bacaan lanjut
Gunakan dokumentasi resmi berikut untuk memeriksa API, kompatibilitas board, dan perubahan versi library:
Sudah memahami alurnya?
Praktikkan konsep yang baru dipelajari melalui project, perangkat ESP32, telemetry, dashboard, atau Virtual Lab di Ruang IoT.