[经验分享] 【Follow me第二季第1期】基础任务三:接近检测

nemon   2024-8-31 19:07 楼主

基础任务三的要求是:设定安全距离并通过板载LED展示,检测到入侵时,发起声音报警。

 

开始的时候,我看了下视频培训的提示,说是可以用红外传感器的库来实现。可是我看了下ir库,发现功能是编解码。又看到有的网友用红外发射后再读取的方法,试了下效果不太好。于是就改用超声波来做。

超声波模块的用法是读取返回波的用时,然后乘以声速,计算出距离。这种方式也会受空气温度密度的影响,但是比红外准多了。

用的时候只要用VOUT供5V电,再占用2个IO就可以了:

import board,digitalio
import time
from adafruit_circuitplayground import cp 

echo_pin = digitalio.DigitalInOut(board.A1)
trigger_pin = digitalio.DigitalInOut(board.A2)
trigger_pin.switch_to_output()
 
def get_distance():
    trigger_pin.value = True
    time.sleep(0.00001)
    trigger_pin.value = False
    while echo_pin.value == False:
        pass
    start_time = time.monotonic()
    while echo_pin.value == True:
        pass
    end_time = time.monotonic()
    elapsed_time = end_time - start_time
    distance = elapsed_time * 34300
    return distance
 
while True:
    distance_cm = get_distance()
    m = distance_cm / 100
    inches = distance_cm / 254
    print(f"Distance: {m}m | {distance_cm} cm")
    cp.pixels.fill( (0,0,0) )
    if distance_cm <20:
        cp.pixels.fill( (255,0,0) )
        cp.play_file('distance.wav')
    time.sleep(0.5)

当距离小于20cm时,亮起红灯,并播放“注意保持距离”。

播放用的是标准库的play_file方法。按照官网的介绍 (https://learn.adafruit.com/circuitpython-made-easy-on-circuit-playground-express/play-file),声音文件支持PCM 16-bit 单声道 WAV格式,采样率22KHz。于是用goldwave5做了一下转换。顺便说一下,官网介绍的转换工具没goldwave5好用。

最后效果是这样的:


 

 

 

 

 

 

 

 

本帖最后由 nemon 于 2024-8-31 19:07 编辑

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复