今日目標
今天我們要打造一個在日常汽車中極為常見的實用系統——智慧倒車雷達,透過超音波感測器來精準衡量距離,結合無源蜂鳴器產生非阻塞室的警示音。距離離障礙物越近,蜂鳴器發出聲音的頻率就會越高,當進入極危險距離時更會發出長鳴警報。
程式碼
import time
from machine import Pin,PWM
trig=Pin(5,Pin.OUT)
echo=Pin(18,Pin.IN)
buzzer_pwm=PWM(Pin(19),freq=2000,duty=0)
def get_distance():
trig.value(0)
time.sleep_us(2)
trig.value(1)
time.sleep_us(10)
trig.value(0)
pulse_time=machine.time_pulse_us(echo,1,30000)
if pulse_time<0:
return 999.0
distance=(pluse_time*0.0343)/2
return distance
def beep(duration_ms):
buzzer_pwm.duty(512)
time.sleep_ms(duration_ms)
buzzer_pwm.duty(0)
print("===智慧倒車雷達警報系統啟動===")
last_beep_time=0
while True:
dist=get_distance()
now=time.ticks_ms()
print(f"目前障礙物距離:{dist:.1f}cm")
if dist>30:
buzzer_pwm.duty(0)
time.sleep_ms(200)
elif 15<dist<=30:
if time.ticks_diff(now,last_beep_time)>=500:
beep(60)
last_beep_time=now
time.sleep_ms(50)
elif 7<dist<=15:
if time.ticks_diff(now,last_beep_time)>=150:
beep(40)
last_beep_time=now
time.sleep_ms(30)
else:
buzzer_pwm.duty(512)
time.sleep_ms(100)
心得
今天我們打造了一個完整的實用物聯網情境,透過時間差距演算法(time.ticks_diff),我們不需要寫笨重的time.sleep()就能實現非阻賽式的不同頻率嗶嗶聲,讓超音波測距與警報聲能流暢並行運作。