如何在树莓派Pico上使用HC-SR04超声波测距模块呢?

超声波传感器使用声音脉冲和简单的计算来确定其自身与前方物体之间的距离。它们通常用于机器人中,以确保机器人不会行走或滚入障碍物。树莓派 pico 基于 rp2040 芯片的多功能微控制器板,当与超声波传感器(例如 hc-sr04)等传感器结合使用时,pico 成为测量距离、检测物体和创建智能自动化应用的理想平台。下面我们将了解如何在树莓派 pico 上使用超声波传感器。
材料清单
– 树莓派 pico
– hc-sr04 超声波传感器
– 跳线若干
– 面包板或 pico 扩展板
超声波传感器的引脚排列如下:
– vcc 引脚用于为传感器供电。它通常需要 5v 直流电源。
– trig 引脚用于向传感器发送触发信号。当高电平信号(通常为 5v)施加到该引脚时,传感器开始发射超声波。
– echo 引脚用于接收来自传感器的回波信号。当传感器发出的超声波击中物体并反弹回来时,传感器会在该引脚上产生脉冲。
– vcc 引脚是传感器的接地连接,应连接到电路的接地 (0v)。
hc-sr04 的测距过程
1. 树莓派向 trig 脚发送一个持续 10us 的脉冲信号。
2. hc-sr04 接收到树莓派发送的脉冲信号,开始发送超声波 (start sending ultrasoun),并把 echo置为高电平。然后准备接收返回的超声波。
3. 当 hc-sr04 接收到返回的超声波 (receive returned ultrasound) 时,把 echo 置为低电平。
从上述过程可以看出,echo 高电平持续的时间就是超声波从发射到返回所经过的时间间隔~
请对照下图接线。
pico 的 3v3 引脚连接到超声传感器的 vcc 引脚。
pico 的 gnd 引脚连接到超声传感器的 gnd 引脚。
pico 的 gpio 引脚 3 连接到超声传感器的 trig 引脚。
pico 的 gpio 引脚 2 连接到超声传感器的 echo 引脚。
编程
电路连接好之后,将树莓派 pico 连上 pc 并打开 thonny。
1、从计算机库导入 pin 类,然后导入 utime 库。前者用于控制 gpio 引脚,后者是基于时间的函数库。
from machine import pinimport utime  
2、创建两个新对象,触发器和回声。这些对象配置要与超声传感器一起使用的 pico 的 gpio 引脚。例如,我们的触发引脚用于发送电流脉冲,因此它是输出引脚。回波引脚接收反射的脉冲,因此回波是输入。
trigger = pin(3, pin.out)echo = pin(2, pin.in)  
3、创建一个函数 ultra(),其中将包含读取所需的代码。
def ultra():  
4、将触发引脚拉低,以确保其未激活,然后暂停两微秒。
trigger.low() utime.sleep_us(2)  
5、在将触发器引脚拉低之前,将触发器引脚拉高五秒钟。这将从超声波传感器发送一个短脉冲,然后关闭该脉冲。
trigger.high() utime.sleep_us(5) trigger.low()  
6、创建一个 while 循环以检查回波引脚。如果没有收到回波脉冲,则更新变量 signaloff,使其包含以微秒为单位的时间戳。
while echo.value() == 0: signaloff = utime.ticks_us()  
7、创建另一个 while 循环,这次检查是否已收到回声。这会将当前时间戳(以微秒为单位)存储到 signalon 变量中。
while echo.value() == 1: signalon = utime.ticks_us()  
8、创建一个新的 timepass 变量,该变量将存储脉冲离开传感器,撞击物体并作为回波返回传感器所花费的总时间值。
timepassed = signalon - signaloff  
9、创建一个新变量,距离。此变量将存储方程式的答案。我们将行进时间(经过的时间)乘以声速(343.2m/s,即每微秒 0.0343cm),该方程的乘积除以 2,因为我们不需要总行进距离,而只需从反对传感器。
distance = (timepassed * 0.0343) / 2  
10、打印一条消息到 python shell,显示距离。
print(the distance from object is ,distance,cm)  
11.现在,我们移出该函数,创建一个循环,该循环将每秒运行一次该函数。
while true: ultra() utime.sleep(1)  
下面是完整的代码:
from machine import pinimport utimetrigger = pin(3, pin.out)echo = pin(2, pin.in)def ultra(): trigger.low() utime.sleep_us(2) trigger.high() utime.sleep_us(5) trigger.low() while echo.value() == 0: signaloff = utime.ticks_us() while echo.value() == 1: signalon = utime.ticks_us() timepassed = signalon - signaloff distance = (timepassed * 0.0343) / 2 print(the distance from object is ,distance,cm)while true: ultra() utime.sleep(1)  
将代码作为 code.py 保存到树莓派 pico 上,然后单击 run 按钮以运行代码。在 python shell 中,您将看到每秒打印的距离。


RF采样:交错构建更快的ADC
单片机视频教程04:流水灯
华为P11渲染图曝光:高颜值、高性能,最美华为手机当之无愧
关于RFID射频识别技术在物资跟踪方面的应用
科技十足的健身房智能魔镜让健身变得乐趣十足
如何在树莓派Pico上使用HC-SR04超声波测距模块呢?
M2354错误注入攻击(Fault Injection Attack)防护
触摸屏结合PLC在闭环控制​变频节能系统中的应用
微软即将推出的Android驱动的Surface Duo
棉纺织设备中变频调速技术的应用探讨
飞兆半导体推出四通道集成式视频滤波器,可支持机顶盒和DVD
R类音频功率放大器CS83501E
液压系统有气怎么排除_液压系统进入空气故障排查
未来十年的逻辑工艺演进方向
PART1元器件健康状况面板及BOM查看器
微软飞利浦在放射诊断领域展开合作
具有极品音色的2X60W纯A类混合功放
九月预计上市 Windows 10秋季创意者更新版本号确定1709
高端市场PK!vivoXplay6的产品可用性齐名三星S8
【人工智能新基建系列3之2】智能影像辨识