from machine import Pin, time_pulse_us , PWM
from time import sleep_us, sleep
# === BUZZER ===
buzzer = PWM(Pin(15))
def tone(freq, duration):
if freq < 1:
buzzer.duty(0)
else:
buzzer.freq(int(freq))
buzzer.duty(512)
sleep(duration)
buzzer.duty(0)
def silent(t):
buzzer.duty(0)
sleep(t)
# === CONFIGURATION ===
TRIGGER_PIN = 26
ECHO_PIN = 25
MAX_DISTANCE_CM = 400
ECHO_TIMEOUT_US = int((MAX_DISTANCE_CM / 0.0343) * 2)
# === SETUP PINS ===
trigger = Pin(TRIGGER_PIN, Pin.OUT)
echo = Pin(ECHO_PIN, Pin.IN)
def check_distance():
trigger.value(0)
sleep_us(2)
trigger.value(1)
sleep_us(10)
trigger.value(0)
pulse = time_pulse_us(echo, 1, ECHO_TIMEOUT_US)
if pulse < 0:
return None
return pulse
def distance_cm():
pulse_time = check_distance()
if pulse_time is None:
return None
return (pulse_time * 0.0343) / 2
while True:
d_cm = distance_cm()
print("Distance:", d_cm, "cm")
if d_cm is None:
silent(0.2)
continue
if d_cm < 50:
freq = (50 - d_cm) * 50 # distance → frequency
# enforce minimum frequency
if freq < 200:
freq = 200
tone(freq, 0.1)
else:
silent(0.2)
sleep(0.05)