from machine import Pin, PWM, time_pulse_us
import dht
import time
# =====================================
# SMART PARKING & EV CHARGING STATION
# ESP32 + MicroPython
# =====================================
# PIN SENSOR
TRIG = Pin(5, Pin.OUT)
ECHO = Pin(18, Pin.IN)
PIR = Pin(19, Pin.IN)
BUTTON = Pin(23, Pin.IN, Pin.PULL_UP)
DHT_PIN = dht.DHT22(Pin(4))
# PIN AKTUATOR
SERVO = PWM(Pin(13), freq=50)
RELAY = Pin(14, Pin.OUT)
LED_R = Pin(25, Pin.OUT)
LED_G = Pin(26, Pin.OUT)
LED_B = Pin(27, Pin.OUT)
BUZZER = PWM(Pin(32), freq=1000)
# KONFIGURASI
BATAS_JARAK = 15
BATAS_SUHU = 40
slot_terisi = False
charging = False
waktu_mulai = 0
durasi_total = 0
tombol_lama = 1
tombol_terakhir = 0
# =====================================
# LED RGB
# =====================================
def lampu(merah, hijau, biru):
LED_R.value(merah)
LED_G.value(hijau)
LED_B.value(biru)
# =====================================
# BUZZER
# =====================================
def bunyi(frekuensi=1000, durasi=200):
BUZZER.freq(frekuensi)
BUZZER.duty(512)
time.sleep_ms(durasi)
BUZZER.duty(0)
# =====================================
# SERVO PALANG
# =====================================
def buka_palang():
SERVO.duty(77)
print("Palang TERBUKA")
def tutup_palang():
SERVO.duty(26)
print("Palang TERTUTUP")
# =====================================
# SENSOR HC-SR04
# =====================================
def baca_jarak():
TRIG.value(0)
time.sleep_us(2)
TRIG.value(1)
time.sleep_us(10)
TRIG.value(0)
try:
durasi = time_pulse_us(ECHO, 1, 30000)
if durasi < 0:
return 999
return durasi / 58
except Exception:
return 999
# =====================================
# CHARGING
# =====================================
def mulai_charging(suhu):
global charging, waktu_mulai
if not slot_terisi:
print("Charging gagal: slot kosong")
bunyi(1500, 200)
return
if suhu is None or suhu >= BATAS_SUHU:
print("Charging gagal: suhu tidak aman")
bunyi(2000, 300)
return
if not charging:
charging = True
waktu_mulai = time.ticks_ms()
RELAY.value(1)
print("CHARGING AKTIF")
def hentikan_charging():
global charging, durasi_total
if charging:
durasi_total += time.ticks_diff(
time.ticks_ms(), waktu_mulai
)
charging = False
RELAY.value(0)
print("CHARGING NONAKTIF")
def baca_durasi():
if charging:
berjalan = time.ticks_diff(
time.ticks_ms(), waktu_mulai
)
return (durasi_total + berjalan) // 1000
return durasi_total // 1000
# =====================================
# PROGRAM UTAMA
# =====================================
print("SMART PARKING & EV CHARGING")
print("MicroPython ESP32 dimulai")
tutup_palang()
RELAY.value(0)
lampu(0, 1, 0)
while True:
try:
# BACA SENSOR
jarak = baca_jarak()
gerakan = PIR.value()
suhu = None
kelembapan = None
try:
DHT_PIN.measure()
suhu = DHT_PIN.temperature()
kelembapan = DHT_PIN.humidity()
except Exception:
print("DHT22 belum terbaca")
kendaraan = jarak < BATAS_JARAK
suhu_bahaya = (
suhu is None or suhu >= BATAS_SUHU
)
# DETEKSI KENDARAAN MASUK
if kendaraan and not slot_terisi:
slot_terisi = True
buka_palang()
bunyi(1000, 150)
# DETEKSI KENDARAAN KELUAR
if not kendaraan and slot_terisi and not charging:
slot_terisi = False
tutup_palang()
# TOMBOL CHARGING
tombol = BUTTON.value()
sekarang = time.ticks_ms()
if (
tombol_lama == 1
and tombol == 0
and time.ticks_diff(
sekarang, tombol_terakhir
) > 300
):
tombol_terakhir = sekarang
if charging:
hentikan_charging()
else:
mulai_charging(suhu)
tombol_lama = tombol
# PERINGATAN SUHU
if suhu_bahaya:
lampu(1, 0, 0)
if charging:
hentikan_charging()
elif charging:
lampu(0, 0, 1)
elif slot_terisi:
lampu(1, 0, 0)
else:
lampu(0, 1, 0)
# MONITORING
print("\n--- STATUS PARKIR ---")
print("Jarak:", round(jarak, 1), "cm")
print("Slot:", "TERISI" if slot_terisi else "KOSONG")
print("PIR:", "ADA GERAKAN" if gerakan else "NORMAL")
print("Suhu:", suhu, "C")
print("Kelembapan:", kelembapan, "%")
print("Charging:", "AKTIF" if charging else "MATI")
print("Durasi:", baca_durasi(), "detik")
if gerakan:
print("Peringatan: gerakan terdeteksi")
if suhu_bahaya:
print("PERINGATAN SUHU TINGGI / SENSOR ERROR")
time.sleep(2)
except Exception as error:
print("Kesalahan program:", error)
time.sleep(2)
Loading
esp32-devkit-c-v4
esp32-devkit-c-v4