Tutorial Belanja komponen

Tutorial › Lampu & LED

Lampu Lalu Lintas Mini

ESP-12ED0D1D2D3D43VGD5D6D7D8RXTXG3VA0GVUS3S2S1SCS0SKG3VENRSTGVINMKH−3 LED + 3 resistor 330 Ω (kaki − disatukan)

Tiga LED berganti merah, hijau, kuning seperti lampu perempatan. Lama lampu hijau diatur dari HP, ada tombol darurat untuk menahan merah, dan setiap pergantian tercatat di dashboard.

Program menyimpan fase sekarang (0 merah, 1 hijau, 2 kuning) dan kapan fase itu dimulai. Setiap loop() dicek: kalau lama fase sudah habis, pindah ke fase berikutnya. Urutannya mengikuti lampu sungguhan: merah ke hijau, hijau ke kuning, kuning ke merah. Merah 5 detik dan kuning 2 detik tetap, hijau mengikuti slider. Setiap pergantian dikirim sebagai teks ke widget Text Log.

Komponen

KomponenQtyHarga
NodeMCU ESP8266 V3 (Lolin)1Rp42.000
LED 5 mm merah (isi 10)LED merah, isi 101Rp2.500
LED 5 mm kuning (isi 10)LED kuning, isi 101Rp2.500
LED 5 mm hijau (isi 10)LED hijau, isi 101Rp2.850
Resistor 330 Ω (isi 10)isi 10, terpakai 31Rp1.800
Breadboard mini 170 titik1Rp4.875
Kabel jumper male-female 10 cm (isi 10)isi 10, terpakai 41Rp3.500
Kabel micro USB data 30 cmopsional, kalau belum punya kabel micro USB data1Rp11.700
Total (tanpa opsional)Rp60.025
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
3 LED + 3 resistor 330 Ω (kaki − disatukan) M→D1 GPIO5merah
3 LED + 3 resistor 330 Ω (kaki − disatukan) K→D2 GPIO4kuning
3 LED + 3 resistor 330 Ω (kaki − disatukan) H→D5 GPIO14hijau
3 LED + 3 resistor 330 Ω (kaki − disatukan) −→Ghitam

Langkah 2: Siapkan dashboard Klenik

Mode Otomatisichibot/budi1234/p004/otomatis
Otomatis
0 detik lalu
Daruratichibot/budi1234/p004/darurat
Tahan merah
Belum pernah ditekan
Lama Hijauichibot/budi1234/p004/hijau
8detik8 of 30detik
0 detik lalu
Lampu Sekarangichibot/budi1234/p004/lampu
MERAH
HIJAU
KUNING
MERAH
0 detik lalu

Cara cepat: unduh p004.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
Switch
Mode Otomatis
ichibot/KODE/p004/otomatispayload ON / OFF
Switch
Darurat
ichibot/KODE/p004/daruratpayload ON / OFF
Slider Output
Lama Hijau
ichibot/KODE/p004/hijau2–30 detik
Text Log
Lampu Sekarang
ichibot/KODE/p004/lampumenampilkan 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).

p004.inoUnduh .ino
// Proyek 004 - Lampu Lalu Lintas Mini
// 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    = "ichibot/budi1234/p004/lampu";
const char* TOPIK_OTOMATIS = "ichibot/budi1234/p004/otomatis";
const char* TOPIK_HIJAU    = "ichibot/budi1234/p004/hijau";
const char* TOPIK_DARURAT  = "ichibot/budi1234/p004/darurat";

const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
const int MERAH = D1, KUNING = D2, HIJAU = D5;
bool otomatis = true;
int detikHijau = 5;                   // lama lampu hijau, diatur dari slider
int fase = 0;                         // 0 merah, 1 hijau, 2 kuning
unsigned long mulai = 0;

void nyalakan(int f) {
  fase = f;
  mulai = millis();
  digitalWrite(MERAH, f == 0);
  digitalWrite(HIJAU, f == 1);
  digitalWrite(KUNING, f == 2);
  const char* nama[] = {"MERAH", "HIJAU", "KUNING"};
  mqtt.publish(TOPIK_LAMPU, nama[f]);
}

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_HIJAU) detikHijau = constrain(p.toInt(), 2, 30);
  else if (topik == TOPIK_DARURAT && p == "ON") { otomatis = false; nyalakan(0); }
}

void langganan() {
  mqtt.subscribe(TOPIK_OTOMATIS);
  mqtt.subscribe(TOPIK_HIJAU);
  mqtt.subscribe(TOPIK_DARURAT);
}

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(MERAH, OUTPUT); pinMode(KUNING, OUTPUT); pinMode(HIJAU, OUTPUT); sambungWiFi(); mqtt.setServer(BROKER, 1883); mqtt.setCallback(pesanMasuk); nyalakan(0); } void loop() { if (!mqtt.connected()) sambungMQTT(); mqtt.loop(); if (!otomatis) return; unsigned long lama[] = {5000, (unsigned long)detikHijau * 1000, 2000}; if (millis() - mulai >= lama[fase]) { int urutan[] = {1, 2, 0}; // merah -> hijau -> kuning -> merah nyalakan(urutan[fase]); } }

Langkah 4: Pahami kodenya

  1. Satu angka untuk mengingat lampu mana yang sedang menyala. Menyimpan fase sebagai angka membuat urutannya mudah ditulis sebagai larik.
  2. f == 0 bernilai true (HIGH) hanya saat fase merah. Tiga baris ini memastikan selalu tepat satu LED yang menyala.
  3. Tombol darurat mematikan mode otomatis dan menahan merah. Untuk jalan lagi, nyalakan ulang switch Mode Otomatis.
  4. Tabel fase berikutnya: dari 0 (merah) ke 1 (hijau), dari 1 ke 2 (kuning), dari 2 kembali ke 0.