from machine import Pin, ADC, PWM
import time
# =====================================================
# CONFIGURATION
# =====================================================
on = 1000
off = 0
INTERVAL = 500
DEBUG = True
gas_sensor = ADC(Pin(34))
button = Pin(4, Pin.IN, Pin.PULL_UP)
# Wrong hardware connections
led = Pin(2, Pin.OUT)
buzzer = PWM(Pin(18, Pin.OUT), freq=50)
def log(state, msg):
if DEBUG:
print("[{}] [{} ms] [{}]".format(state, time.ticks_ms(), msg))
# =====================================================
# SYSTEM VARIABLES
# =====================================================
alarm = False
alarm_acknowledged = False
log("START", "Initalizing system")
# =====================================================
# BUTTON INTERRUPT
# =====================================================
def button_isr(pin):
global alarm_acknowledged
alarm_acknowledged = True
buzzer.duty(off)
log("Disabling Alarm", "Attempt to disable alarm")
button.irq(
trigger=Pin.IRQ_FALLING,
handler=button_isr
)
# =====================================================
# OUTPUT CONTROL
# =====================================================
def alarm_on():
led.on()
buzzer.duty(on)
log("DANGER!", "Gas Leak")
def alarm_off():
led.off()
buzzer.duty(off)
log("Safe", ":)")
# =====================================================
# SYSTEM LOGIC
# =====================================================
def update_system(gas_value):
global alarm
global alarm_acknowledged
if gas_value > 3000:
alarm = True
if alarm_acknowledged == False:
alarm_on()
else:
alarm = False
alarm_acknowledged = False
alarm_off()
# =====================================================
# MAIN PROGRAM
# =====================================================
print("Gas Leak Detection Started")
last = 0
while True:
now = time.ticks_ms()
if time.ticks_diff(now, last) > INTERVAL:
gas_value = gas_sensor.read()
print("Gas Level:", gas_value)
update_system(gas_value)
if button.value() == 0:
alarm_acknowledged = True
buzzer.duty(off)
print("-" * 35)
log("Time check", f"ΔT = {now - last}")
print("-" * 35)
last = now