from machine import Pin, PWM, ADC
import utime
# Define MQ-2 Gas Sensor
mq2 = ADC(Pin(26))
# Define Passive Buzzer (Use PWM)
buzzer = PWM(Pin(14))
buzzer.freq(1000) # Set frequency to 1 kHz
buzzer.duty_u16(0) # Ensure buzzer is off initially
# Define Stepper Motor Pins (Bipolar Stepper Motor)
stepper_pins = [Pin(16, Pin.OUT), Pin(17, Pin.OUT), Pin(18, Pin.OUT), Pin(19, Pin.OUT)]
# Step sequence for Bipolar Stepper Motor
stepper_seq = [
[1, 0, 1, 0], # Step 1
[0, 1, 1, 0], # Step 2
[0, 1, 0, 1], # Step 3
[1, 0, 0, 1], # Step 4
]
# Gas Threshold
THRESHOLD = 20000 # Adjust based on sensor calibration
def stepper_rotate(steps=256, delay=2):
"""Rotates stepper motor in forward direction"""
for _ in range(steps):
for step in stepper_seq:
for pin, val in zip(stepper_pins, step):
pin.value(val)
utime.sleep_ms(delay)
stepper_stop() # Stop motor after rotation
def stepper_stop():
"""Stops the stepper motor"""
for pin in stepper_pins:
pin.value(0)
def buzzer_beep(duration=1000):
"""Beeps buzzer for a given duration (supports active & passive buzzers)"""
buzzer.duty_u16(30000) # Turn ON buzzer
utime.sleep_ms(duration)
buzzer.duty_u16(0) # Turn OFF buzzer
while True:
gas_level = mq2.read_u16() # Read gas sensor value
print(f"Gas Level: {gas_level}") # Debug output
if gas_level > THRESHOLD:
print("Gas detected! Activating alarm and exhaust fan.")
buzzer_beep(1000) # Buzzer beeps for 1 second
stepper_rotate(256, 2) # Move stepper motor
else:
print("Gas level normal.")
stepper_stop() # Stop stepper motor if no gas detected
utime.sleep(1)