#Michelle
from machine import Pin, ADC
import time
import os
#Setup Pin Connections
onboard_led = Pin(25, Pin.OUT)
first_red_led = Pin(14, Pin.OUT)
first_green_led = Pin(12, Pin.OUT)
first_yellow_led = Pin(9, Pin.OUT)
second_red_led = Pin(6, Pin.OUT)
second_green_led = Pin(4, Pin.OUT)
second_yellow_led = Pin(1, Pin.OUT)
buzzer = Pin(17, Pin.OUT)
buzzer.value(0)
gas_sensor = ADC(Pin(27))
#safe limit for gas concentration
safe_limit = 30 #Gas level baseline for danger
#Create a file to save gas level readings
filename = "gas_reading.csv"
if filename not in os.listdir():
with open(filename, "w") as f:
f.write("Seconds, gas_level\n")
#Setup Counter and Reading Interval
seconds_passed = 0 #Counts since program/pico start
reading_interval = 1 #time between each gas reading
#warm up Gas Sensor
print("Warming up the gas sensor for 60 seconds...")
for seconds in range(1, 61):
seconds_passed += 1
print("Warm up: {} seconds".format(seconds_passed))
#Blink onboard LED during warm-up
onboard_led.value(1)
time.sleep(0.5)
onboard_led.value(0)
time.sleep(0.5)
onboard_led.value(1)
time.sleep(0.5)
print ("Warm up complete!!!")
onboard_led.value(1)
# Gas sensor reading
print("Now reading gas levels every {} seconds".format( reading_interval))
while True:
# read gas level and convert it to percentage
raw_value = gas_sensor.read_u16() #Lowest level is 0 and highest level is 65535
#convert raw value to percentage
gas_level = (raw_value / 65535) *100
gas_percentage = round(gas_level, 1) #Round gas level in 1 decimal place
#Print gas levels in precentage and the seconds_passed
print("Gas Level: {}% at {} seconds".format(gas_percentage, seconds_passed))
with open(filename, "a") as f:
f.write("{},%\n".format(seconds_passed,gas_percentage))
#Main Logic of Smart Gas Detection Machine
#When gas_precentage is above the safe limit
if gas_percentage >= 21:
first_red_led.value(1)
second_red_led.value(1)
time.sleep(1)
first_red_led.value(0)
second_red_led.value(0)
time.sleep(0.5)
first_red_led.value(0)
second_red_led.value(0)
buzzer.value(1)
time.sleep(1)
buzzer.value(0)
time.sleep(1)
buzzer.value(1)
elif gas_percentage >= 11 and gas_percentage <= 20:
first_yellow_led.value(1)
second_yellow_led.value(1)
time.sleep(1)
first_yellow_led.value(0)
second_yellow_led.value(0)
time.sleep(0.5)
first_yellow_led.value(0)
second_yellow_led.value(0)
# When gas_percentage is below safe limit
else:
first_green_led(1)
second_green_led(1)
time.sleep(1)
first_green_led.value(0)
second_green_led.value(0)
time.sleep(1)
first_green_led(1)
second_green_led(1)
time.sleep(1)
first_green_led(0)
second_green_led(0)
first_red_led.value(0)
second_red_led.value(0)
buzzer.value(0)
seconds_passed += reading_interval
time.sleep(reading_interval)