首页 动态 版块 商城 我的
 退出
游客  
等级:
金币:
经验值:

超声波测距雷达系统设定阈值报警Python/C++编程 树莓派与ESP32使用例程

  9040 
 1
RASPI   ydxhuo.com 

一:传感器介绍

Image

 

HC-SR04 是一款专为近距离精准测距设计的高性价比超声波传感器,基于回声定位原理实现非接触式距离检测,凭借稳定性能、灵活适配性和广泛场景覆盖,成为智能硬件、工业控制与创意电子项目的核心感知部件。

1.声波原理

HC-SR04 超声波测距传感器的工作原理基于声波反射测距法,模仿蝙蝠的回声定位机制,通过发射高频超声波、在接收反射的回波,在编程计算声波往返时间来换算目标距离,全程为非接触式检测,不损伤被测量物体。那么在现实生活中实际存在的物体都能被检测到,包括水和玻璃。


核心的工作流程(4 步完整闭环)

  1. 触发测距指令

    控制器(如树莓派 Pico、Arduino、ESP32等单片机)向传感器的引脚发Trig送一个 10μs 以上的高电平脉冲,这个脉冲是启动一次测距的 “指令信号”。收到指令后,传感器内部电路立即进入工作状态。

  2. 发射高频超声波脉冲

    传感器的发射探头(T)会自动发射 8 组频率为 40kHz 的超声波脉冲。那么40kHz 的声波属于人耳无法听到的超声波频段,具备传播方向性强、能量集中的特点,适合近距离精准测距。

  3. 接收反射回波

    超声波脉冲遇到被测物体后会发生反射,形成回波信号。会由传感器的接收探头(R)会捕捉到反射回波,一旦检测到回波,传感器会立即将Echo引脚的电平从低电平切换为高电平。

  4. 2.距离换算

    Echo引脚的高电平持续时长,就是超声波从发射到接收的往返总时间

    控制器通过捕获这个高电平的时间长度,结合声波在空气中的传播速度,就能计算出传感器到被测物体的距离,核心公式如下:

    • 单程时间 = 高电平持续时间 ÷ 2
    • 距离(cm)= 单程时间(μs)÷ 58
    • 距离(m)= 声波速度(340m/s)× 单程时间(s)

    注:声波速度受温度和不同物体的影响,常温下(20℃)下约为 340m/s,温度每变化 1℃,速度会增减约 0.6m/s。


3.参数原理图

Image



HC-SR04原理图模块全套资料🛒超声波产品链接

二:树莓派例程

1.树莓派接线图

以树莓派Pico开发板为例,提醒: 请按下图的引脚标识接线,务必不能接错。如果接错线通电后会导致设备烧毁!

Image

2.Python程序


hcsr04下载这个hcsr04的源代码上传至树莓派pico文件内,直接运行查看数据(如下图)

如果你还没有搭建好树莓派Python编程环境可参考这个帖子→:如何搭建Python编程环境


Image


3.代码解析

引脚配置:

Trig 引脚配置为输出模式,用于发送触发信号,Echo 引脚配置为输入模式,用于接收回响信号


测量函数:

measure_distance()函数实现了完整的测距逻辑

使用time_pulse_us()函数精确测量 Echo 引脚高电平持续时间

通过公式计算距离,并进行四舍五入处理


距离计算公式:

声速在空气中约为 343.2 米 / 秒 = 0.03432 厘米 / 微秒

超声波往返一次,所以需要除以 2

最终公式:距离(厘米) = 时间(微秒) × 0.0343 ÷ 2


注意事项:

避免在强电磁干扰环境中使用,可能影响测量精度,测量距离过近(<2cm)或过远(>400cm)时会测量不准确,对于光滑平面,测量精度较高;对于柔软或不规则表面,精度可能下降,建议两次测量之间保留至少 50ms 的间隔,避免回声干扰


4.添加报警显示功能

上面的程序只是测试传感器功能是否正常,我们要再次升级功能让其脱离电脑也能使用,那么我们加个显示屏和报警器。实现将测距数据展现在显示屏上并且可设定低于阈值报警。通过扩展板上的ABCD按键来调节阈值。请严格按下图的引脚标识进行连接,务必不能接错,接错会损坏设备!

Image



5.升级Python程序

超声波测距+显示屏源代码下载这个源代码Zip压缩包,在解压出来将里面所有文件全部上传至树莓派pico文件内,直接运行查看数据(如下图)


下载源代码并解压后,上传至树莓派Pico内,通电后可遮挡超声波探头测试距离,距离越近报警声频率越高(如下)

按键功能:A阈值调节,BC加减数字,D保存阈值

6.视频演示

 

7.代码解析

引脚配置:

将蜂鸣器配置GP0引脚,输出高电平就能触发报警声


报警功能:

ALARM_THRESHOLD:报警触发阈值(30cm)

MIN_INTERVAL/MAX_INTERVAL:控制蜂鸣器鸣叫间隔的范围


核心逻辑 :根据距离动态调整蜂鸣器频率

1. 报警条件判断 :当距离小于 30cm 时进入报警模式

2. 距离范围限制 :确保距离在 2-30cm 的有效区间内,避免计算异常

3. 频率计算 :ratio:将距离转换为 0~1 的比例(2cm 对应 0,20cm 对应 1),使用四次方关系(ratio**4)计算间隔时间,使近距离的频率提升更显著(非线性变化),蜂鸣器控制:通过高低电平交替产生声音,间隔时间越短,频率越高,非报警状态:距离≥30cm 时,蜂鸣器保持低电平

三:ESP32/Arduino例程

1.ESP32接线图

本次以ESP32-S3主板为例按下图接好连接线,务必注意不可接反,否则会烧毁传感器。

Image



2.C++程序

HC-SR04 下载HC-SR04这个源代码直接用Arduino IDE编译上传程序打开串口监视查看(如下图)


Image


3.逻辑解析

ESP32 (GPIO 13) 发送 10 微秒脉冲 └──> 超声波发射器发出声波 └──> 遇到障碍物折返 ┌─── 超声波接收器收到回波 ESP32 (GPIO 14) 记录声波往返高电平时间 (duration) └──> 超出 25ms (即 >400cm) 直接判定为“无效” └──> 计算:距离 = (时间 × 0.0343 cm/us) ÷ 2


关键代码段详解

pulseIn(ECHO_PIN, HIGH, 25000)

作用:测量 Echo 引脚维持高电平的微秒数。


超时限制(25000us):由于声波往返 400 cm 耗时约 23.3 毫秒,设置 25 毫秒(25000 微秒)超时。超过这个时间传感器如果没收到回波,函数会直接返回 0,避免 ESP32 死等或计算出几千厘米的假数据。


float distanceCm = duration * SOUND_SPEED / 2.0;

作用:将时间转化为物理距离。


运算逻辑:SOUND_SPEED 为 0.0343 cm/μs(即空气声速 343 m/s)。因为声波经历了从传感器到障碍物“往复”两次的路程,所以最终结果除以 2 得到单程距离。

if (duration == 0 || distanceCm > 400.0 || distanceCm < 2.0)


作用:软件滤波边界检测。

原理:HC-SR04 的物理极限是 2 cm ~ 400 cm。因传感器超出测量距离没收到回波导致的异常值,都会被这个条件直接拦截


四:技术支持

联系人:张工
电话:0755-32914578
QQ:2251000002
微信:扫下方二维码添加,请备注来意

提供:人工智能,IOT物联网,工控数显,嵌入式软硬件开发,科创教育,产品定制,生产,方案解决...



作者签名: www.ydxhuo.com   楼主  2025-08-03 17:42:29
回复列表
wujun
2F
wujun
2026-01-18 21:29:30 1
不错啊
共0条回复,点击查看回复
【评论】   
Powered by YDXHUO _VERSION
© 2017-2026 跃动芯火版权
您的IP: 216.73.217.50 , 2026-07-27 07:34:23
Powered by YDXHUO _VERSION
© 2017-2026 跃动芯火版权
(36) 分享
分享

请保存二维码或复制链接进行分享

取消
免责声明
1、本站资源,均来自网络与个人作者,所有资源和文章仅限用于学习和研究目的 。
2、不得用于商业或非法用途,否则,一切责任由该用户承担 !

侵权删除请致信 E-Mail:ydxho@qq.com
已有0次打赏