Tutorial Belanja komponen

Tutorial › Servo & Motor

Palang Parkir Mini

ESP32-WROOM-32D23D22TX0RX0D21D19D18D5TX2RX2D4D2D15GND3V3ENVPVND34D35D32D33D25D26D27D14D12D13GNDVINMG90−+SServo MG90 (coklat −, merah +, oranye S)GND+OUTENSensor IR KY-032

Model palang parkir: mobil mainan mendekat, sensor IR melihatnya, palang servo naik, lalu turun 2 detik setelah mobil lewat. Klenik menghitung mobil yang masuk dan bisa mengunci palang saat parkiran penuh.

Sensor KY-032 memancarkan inframerah dan menerima pantulannya. Kalau ada benda di depannya (5-15 cm, diatur dengan trimpot), pin OUT menjadi LOW. ESP32 menaikkan palang (servo ke 90°) dan menambah hitungan mobil.

Palang tidak langsung turun saat sensor kosong. ESP32 menunggu 2 detik untuk memastikan mobil sudah lewat seluruhnya, karena celah di antara roda bisa membuat sensor sesaat tidak melihat apa-apa. Selama sensor masih melihat mobil, hitungan 2 detik diulang.

Switch Kunci membuat palang tidak mau naik, seperti saat parkiran penuh. Mobil yang sudah di depan sensor tetap tertahan.

Komponen

KomponenQtyHarga
ESP32 DOIT DevKit V1 30 pin1Rp75.000
Servo MG90 Metal Gear Micro 9g Tower Pro 180 Der1Rp33.950
Sensor IR KY-0321Rp7.500
Kabel jumper male-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)Rp119.950
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
Servo MG90 (coklat −, merah +, oranye S) −→GNDcoklat
Servo MG90 (coklat −, merah +, oranye S) +→VINmerah
Servo MG90 (coklat −, merah +, oranye S) S→D13 GPIO13oranye
Sensor IR KY-032 GND→GNDhitam
Sensor IR KY-032 +→3V3merah
Sensor IR KY-032 OUT→D27 GPIO27biru

Langkah 2: Siapkan dashboard Klenik

Palangichibot/budi1234/p098/palang
NAIK
0 detik lalu
Mobil Masukichibot/budi1234/p098/jumlah
0 – 5012
0 detik lalu
Kunci Palang (penuh)ichibot/budi1234/p098/kunci
Kunci
0 detik lalu
Reset Hitunganichibot/budi1234/p098/reset
Reset
0 detik lalu

Cara cepat: unduh p098.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
Palang
ichibot/KODE/p098/palangON = 1 “NAIK”, OFF = 0
Gauge
Mobil Masuk
ichibot/KODE/p098/jumlah0–50
Switch
Kunci Palang (penuh)
ichibot/KODE/p098/kuncipayload ON / OFF
Switch
Reset Hitungan
ichibot/KODE/p098/resetpayload ON / OFF

Langkah 3: Upload kode

Library: PubSubClient (Nick O'Leary), ESP32Servo. Board di Arduino IDE: ESP32 Dev 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).

p098.inoUnduh .ino
// Proyek 098 - Palang Parkir Mini
// Board: ESP32 DOIT DevKit V1 | Dashboard: klenik.ichibot.id
#include <WiFi.h>
#include <PubSubClient.h>
#include <ESP32Servo.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_JUMLAH = "ichibot/budi1234/p098/jumlah";
const char* TOPIK_RESET  = "ichibot/budi1234/p098/reset";
const char* TOPIK_KUNCI  = "ichibot/budi1234/p098/kunci";
const char* TOPIK_PALANG = "ichibot/budi1234/p098/palang";

const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
Servo palang;
const int PIN_SERVO = 13, SENSOR = 27;   // KY-032 OUT: LOW saat ada benda
const int TURUN = 0, NAIK = 90;
const unsigned long JEDA_TURUN = 2000;   // palang turun 2 detik setelah mobil lewat
bool terbuka = false, kunci = false;
unsigned long kosongSejak = 0;
int jumlahMobil = 0;

void pesanMasuk(char* t, byte* isi, unsigned int panjang) {
  String topik = t;
  String p;
  for (unsigned int i = 0; i < panjang; i++) p += (char)isi[i];
  if (topik == TOPIK_KUNCI) kunci = (p == "ON");     // parkiran penuh/tutup: palang tidak naik
  else if (topik == TOPIK_RESET && p == "ON") {
    jumlahMobil = 0;
    mqtt.publish(TOPIK_JUMLAH, "0");
    mqtt.publish(TOPIK_RESET, "OFF");
  }
}

void langganan() {
  mqtt.subscribe(TOPIK_KUNCI);
  mqtt.subscribe(TOPIK_RESET);
}

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(SENSOR, INPUT); palang.setPeriodHertz(50); palang.attach(PIN_SERVO, 500, 2400); palang.write(TURUN); sambungWiFi(); mqtt.setServer(BROKER, 1883); mqtt.setCallback(pesanMasuk); } void loop() { if (!mqtt.connected()) sambungMQTT(); mqtt.loop(); bool adaMobil = digitalRead(SENSOR) == LOW; if (adaMobil) { kosongSejak = 0; if (!terbuka && !kunci) { terbuka = true; palang.write(NAIK); jumlahMobil++; mqtt.publish(TOPIK_PALANG, "1"); mqtt.publish(TOPIK_JUMLAH, String(jumlahMobil).c_str()); } } else if (terbuka) { if (kosongSejak == 0) kosongSejak = millis(); if (millis() - kosongSejak > JEDA_TURUN) { terbuka = false; palang.write(TURUN); mqtt.publish(TOPIK_PALANG, "0"); } } }

Langkah 4: Pahami kodenya

  1. Palang turun setelah sensor kosong 2 detik berturut-turut. Jeda ini juga mencegah palang menghantam mobil yang berhenti sesaat di bawahnya.
  2. Mobil hanya dihitung sekali, saat palang mulai naik, bukan selama mobil berada di depan sensor.
  3. Pasang lengan palang (stik es krim) saat servo di posisi TURUN, lalu sesuaikan sudut kalau palang kurang tegak.