from machine import Pin, time_pulse_us
import time
# ----- Ultrasonic Sensor Pins -----
TRIG = [Pin(2, Pin.OUT), Pin(4, Pin.OUT), Pin(6, Pin.OUT), Pin(8, Pin.OUT)]
ECHO = [Pin(3, Pin.IN), Pin(5, Pin.IN), Pin(7, Pin.IN), Pin(9, Pin.IN)]
# ----- LEDs for each slot -----
LED = [Pin(10, Pin.OUT), Pin(11, Pin.OUT), Pin(12, Pin.OUT), Pin(13, Pin.OUT)]
# ----- Buzzer -----
BUZZER = Pin(15, Pin.OUT)
# ----- Threshold for slot detection (cm) -----
THRESHOLD = 10
# ----- Measure distance function -----
def measure_distance(trig, echo):
trig.low()
time.sleep_us(2)
trig.high()
time.sleep_us(10)
trig.low()
duration = time_pulse_us(echo, 1, 30000) # max 30ms
if duration < 0:
return -1
distance = (duration / 2) / 29.1
return distance
# ----- Main Loop -----
while True:
slot_status = []
for i in range(4):
dist = measure_distance(TRIG[i], ECHO[i])
if dist != -1 and dist < THRESHOLD:
slot_status.append("Occupied")
LED[i].on() # LED ON if occupied
else:
slot_status.append("Free")
LED[i].off() # LED OFF if free
# Print slot status to serial monitor
print("---- Parking Status ----")
for i in range(4):
print(f"Slot {i+1}: {slot_status[i]}")
# Buzzer alert if all slots full
if slot_status.count("Occupied") == 4:
print("Parking Full! Buzzer ON")
BUZZER.high()
else:
BUZZER.low()
print("------------------------\n")
time.sleep(1)
Loading
pi-pico-w
pi-pico-w