from machine import Pin, time_pulse_us
import time
# Setup pins
pir = Pin(15, Pin.IN)
trig = Pin(4, Pin.OUT)
echo = Pin(5, Pin.IN)
led = Pin(13, Pin.OUT)
def get_distance():
# Send a 10us pulse to trigger ultrasonic
trig.off()
time.sleep_us(2)
trig.on()
time.sleep_us(10)
trig.off()
# Measure echo pulse width in microseconds
duration = time_pulse_us(echo, 1, 30000) # timeout 30ms
# Calculate distance (speed of sound = 34300 cm/s)
# Distance = (duration / 2) / 29.1
distance = (duration / 2) / 29.1
return distance
def blink_led(times, delay_ms):
for _ in range(times):
led.on()
time.sleep_ms(delay_ms)
led.off()
time.sleep_ms(delay_ms)
while True:
if pir.value() == 1:
# Motion detected by PIR
distance = get_distance()
print("Motion detected! Distance:", distance, "cm")
if distance < 20 and distance > 0:
# Intruder alert - blink LED rapidly
for _ in range(10):
led.on()
time.sleep(0.1)
led.off()
time.sleep(0.1)
else:
# No close object detected, LED off
led.off()
else:
# No motion, LED off
led.off()
time.sleep(0.2)