from machine import Pin
from machine import ADC
from utime import sleep_us, sleep
from machine import time_pulse_us
led1 = Pin(15, Pin.OUT)
led2 = Pin(2, Pin.OUT)
trig = Pin(21, Pin.OUT)
echo = Pin(19, Pin.IN)
gas_sensor = ADC(Pin(4))
gas_sensor.atten(ADC.ATTN_11DB)
ldr = ADC(Pin(0))
ldr.atten(ADC.ATTN_11DB)
DANGER_DIST = 15
VEHICLE_DIST = 30
GAS_LIMIT = 2000
LIGHT_THRESHOLD = 1500
red_light = led1
tunnel_light = led2
def get_distance():
trig.value(0)
sleep_us(2)
trig.value(1)
sleep_us(10)
trig.value(0)
duration = time_pulse_us(echo, 1, 30000)
if duration < 0:
return None
return (duration * 0.0343) / 2
# STATE FUNC
def distance_state(d):
if d is None:
return "NO SIGNAL"
elif d < DANGER_DIST:
return "TOO CLOSE"
elif d < VEHICLE_DIST:
return "VEHICLE"
else:
return "CLEAR"
def gas_state(g):
if g > GAS_LIMIT:
return "DANGER"
else:
return "SAFE"
def light_state(l):
if l < LIGHT_THRESHOLD:
return "DARK"
else:
return "LIGHT"
# MAIN LOOP
while True:
distance = get_distance()
gas_value = gas_sensor.read()
light_value = ldr.read()
dist_status = distance_state(distance)
gas_status = gas_state(gas_value)
light_status = light_state(light_value)
system_status = "ENERGY SAVE"
# TOO CLOSE OBJECT (RED LED)
if dist_status == "TOO CLOSE":
red_light.value(1)
tunnel_light.value(0)
system_status = "OBJECT DANGER"
# VEHICLE DETECTED (LIGHT ON)
elif dist_status == "VEHICLE":
tunnel_light.value(1)
red_light.value(0)
system_status = "VEHICLE PRESENT"
# DARK AREA (LIGHT ON)
elif light_status == "DARK":
tunnel_light.value(1)
red_light.value(0)
system_status = "DARK AREA"
# SAFE (EVERYTHING OFF)
else:
system_status = "ENERGY SAVE"
tunnel_light.value(0)
red_light.value(0)
print("Distance:", dist_status,
"| Gas:", gas_status,
"| Light:", light_status,
"| System:", system_status)
sleep(1)