from machine import Pin
import time
import utime
print("Hello, Pi Pico")
# Ultrasonik HC-SR04
trigger = Pin(2, Pin.OUT)
echo = Pin(3, Pin.IN)
# LED
led_hijau = Pin(6, Pin.OUT)
led_merah = Pin(7, Pin.OUT)
# Relay ultrasonik
relay2 = Pin(4, Pin.OUT)
# Relay MQ2
relay_mq2 = Pin(5, Pin.OUT)
# MQ2 sensor (digital pin)
DO_PIN = Pin(26, Pin.IN)
# Konstanta batas jarak
MIN_LEVEL = 10
MAX_LEVEL_HIJAU = 20
MAX_LEVEL_MERAH = 40
# State relay
relay2_aktif = False
relay_mq2_aktif = False
# Fungsi baca jarak ultrasonik
def read_distance():
trigger.low()
time.sleep_us(2)
trigger.high()
time.sleep_us(10)
trigger.low()
while echo.value() == 0:
signal_off = time.ticks_us()
while echo.value() == 1:
signal_on = time.ticks_us()
time_passed = signal_on - signal_off
distance = (time_passed * 0.0343) / 2 # dalam cm
return distance
# Loop utama
while True:
try:
# ====== Baca sensor ======
jarak = read_distance()
gas_state = DO_PIN.value()
print("Jarak: {:.1f} cm".format(jarak))
# ====== Logika 10 - 20 cm ======
if MIN_LEVEL <= jarak <= MAX_LEVEL_HIJAU:
led_hijau.value(1)
led_merah.value(0)
# Jika gas terdeteksi → aktifkan relay_mq2
if gas_state == 0 and not relay_mq2_aktif:
relay_mq2.value(1)
relay_mq2_aktif = True
print("Status: 10-20cm + GAS DETECTED → relay_mq2 ON")
# Jika gas tidak terdeteksi → relay_mq2 tetap OFF
elif gas_state == 1 and not relay_mq2_aktif:
relay_mq2.value(0)
relay_mq2_aktif = False
print("Status: 10-20cm + NO GAS → relay_mq2 OFF")
# Jika relay_mq2 sudah aktif → tetap aktif sampai JARAK > 20 cm
elif relay_mq2_aktif:
print("Status: relay_mq2 tetap AKTIF")
# relay2 OFF di kondisi ini
relay2.value(0)
relay2_aktif = False
# ====== Logika 21 - 40 cm ======
elif MAX_LEVEL_HIJAU < jarak <= MAX_LEVEL_MERAH:
led_hijau.value(0)
led_merah.value(1)
# Aktifkan relay2 jika belum aktif
if not relay2_aktif:
relay2.value(1)
relay2_aktif = True
print("Status: 21-40cm → relay2 ON")
# relay_mq2 OFF di kondisi ini
relay_mq2.value(0)
relay_mq2_aktif = False
# ====== Reset relay2 jika kembali ke bawah 10cm ======
elif jarak < MIN_LEVEL:
led_hijau.value(0)
led_merah.value(0)
# Reset relay2 jika aktif
if relay2_aktif:
relay2.value(0)
relay2_aktif = False
print("Status: <10cm → relay2 OFF")
# relay_mq2 OFF jika jarak < 10cm
relay_mq2.value(0)
relay_mq2_aktif = False
# ====== Di luar range lain → semua OFF ======
else:
led_hijau.value(0)
led_merah.value(0)
relay2.value(0)
relay2_aktif = False
relay_mq2.value(0)
relay_mq2_aktif = False
print("Status: Di luar range → Semua OFF")
except Exception as e:
print("Error:", e)
time.sleep(1)