import utime
from machine import I2C, Pin, Timer
from pico_i2c_lcd import I2cLcd
rooms = [
{"trigger": Pin(2, Pin.OUT), "echo": Pin(3, Pin.IN)},
{"trigger": Pin(4, Pin.OUT), "echo": Pin(5, Pin.IN)},
{"trigger": Pin(6, Pin.OUT), "echo": Pin(7, Pin.IN)}
]
i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)
lcd = I2cLcd(i2c, 0x27, 2, 16)
def measure_distance(trigger, echo):
trigger.value(0)
utime.sleep_us(2)
trigger.value(1)
utime.sleep_us(10)
trigger.value(0)
start_time = utime.ticks_us()
while echo.value() == 0:
start_time = utime.ticks_us()
end_time = utime.ticks_us()
while echo.value() == 1:
end_time = utime.ticks_us()
duration = utime.ticks_diff(end_time, start_time)
distance = (duration * 0.0343) / 2
return distance
def monitor_rooms(t):
lcd.clear()
for i, room in enumerate(rooms):
distance = measure_distance(room["trigger"], room["echo"])
print(f"Room {i + 1} Distance: {distance} cm")
if distance < 100:
lcd.clear()
lcd.putstr(f"Burglar: Room {i + 1}")
print(f"Motion detected in Room {i + 1}")
utime.sleep(2)
return
tim = Timer(mode=Timer.PERIODIC, freq=1, callback=monitor_rooms)