用你的电子设备有很多方法来检测运动和距离。在另一个教程中,我们展示了如何使用PIR运动传感器与树莓皮皮.PIRs用于报警系统,它利用红外光探测房间里移动的物体,在一些项目中很有用,例如,你希望用户在设备前挥手来激活它。我们的教程如何构建树莓派洗手定时器使用pir。
另一方面,超声波传感器利用声波脉冲和简单的计算来确定它们与前面物体之间的距离。它们通常用于机器人,以确保机器人不会行走或撞到障碍物。我们也在树莓派厕纸提醒来判断我们什么时候没面包了。在本教程中,我们将使用一个超声波距离传感器,HC-SR04+,来快速确定物体与树莓派Pico的距离。
对于这个项目,您将需要
树莓皮皮超声传感器的硬件设置
这款专用超声波传感器与Raspberry Pi Pico GPIO上使用的3V逻辑兼容。HC-SR04P和HC-SR04+兼容3V和5V逻辑,是Raspberry Pi Pico、Pi和Arduino项目的理想选择。
2.将HC-SR04P超声传感器插入接线板。
3.连接3V3引脚树莓派皮科的到VCC引脚o超声波传感器采用公对公跳线。
4.连接GND引脚在树莓派皮科上到GND脚使用跳线的超声波传感器。
5.连接触发销超声波传感器的到GPIO引脚3树莓派皮科的。
6.连接Echo引脚从超声波传感器到GPIO引脚2树莓派皮科的。
树莓皮皮超声传感器的软件设置
电路建立后,连接你的树莓皮皮和打开桑尼应用程序。
1.从机器库导入Pin类,然后导入utime库。前者用于控制GPIO管脚,后者是一个基于时间的函数库。
从机器进口引脚进口utime
2.创建两个新对象,trigger和echo。这些对象配置了用于超声波传感器的Pico的GPIO管脚。例如,我们的触发器引脚用于发送电流脉冲,因此它是一个输出引脚。回波管脚接收反射的脉冲,因此回波是一个输入。
trigger = Pin(3, Pin. out) echo = Pin(2, Pin. in)
3.创建一个函数ultra()其中将包含读取所需的代码。
def超():
4.把扳机销拉低,为了确保它不是活动的,请暂停两微秒。
utime.sleep_us trigger.low () (2)
5.在将触发器引脚拉低之前,将触发器引脚高拉五个微发送。这将从超声波传感器发送一个短脉冲,然后关闭脉冲。
trigger.high () utime.sleep_us (5) trigger.low ()
6.创建一个while循环来检查echo引脚。如果没有接收到回波脉冲,则更新一个变量signaloff,使其包含一个以微秒为单位的时间戳。
While echo.value() == 0: signaloff = utime.ticks_us()
7.创建另一个while循环,这次检查是否收到了回调。这将以微秒为单位将当前时间戳存储到signalon变量中。
echo.value() == 1: signalon = utime.ticks_us()
8.创建一个新变量,timepassed,它将存储脉冲离开传感器,击中物体并作为回声返回到传感器的总时间值。
Timepassed = signalon - signaloff
9.创建一个新变量distance。这个变量将存储这个方程的答案。我们将旅行时间(经过的时间)乘以声速(343.2米/秒,即0.0343厘米/微秒),这个等式的乘积除以2,因为我们不需要总旅行距离,只需要物体到传感器的距离。
距离= (timepassed * 0.0343) / 2
10。打印一条消息到Python Shell显示的距离。
打印("The distance from object is ",distance,"cm")
11.我们现在离开函数创建一个循环每秒钟运行一次函数。
while True: ultra() utime.sleep(1)
以下是完整的代码:
完整的代码清单
utime.sleep_us(5) trigger.low() while echo.value() == 0: signaloff = utime.ticks_us() while echo.value() == 1:/ 2 print("The distance from object is ",distance,"cm") while True: ultra() utime.sleep(1)
将代码以code.py的形式保存到Raspberry Pi Pico中,并单击绿色箭头运行代码。在Python Shell中,您将看到每秒打印的距离。