news 2026/9/25 2:16:52

超声波模块Python API完全参考:HCSR04类从构造到distance_cm()全解析(附示例代码)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
超声波模块Python API完全参考:HCSR04类从构造到distance_cm()全解析(附示例代码)

超声波模块Python API完全参考:HCSR04类从构造到distance_cm()全解析(附示例代码)

【免费下载链接】CupCode_HC-SR04超声波传感器模块源师兄扩展项目: 超声波模块 | 由源师兄组织创建项目地址: https://gitcode.com/yuanshixiong/ultrasonic-module

源师兄出品的CupCode_HC-SR04 超声波传感器模块是一个基于源师兄主控板的超声波测距扩展:只需 Trig / Echo 两根数字引脚连线,即可测量前方障碍物的距离,并按厘米或毫米输出读数。整个驱动核心就是 library/sonar.py 里的一个HCSR04类——本文带你从构造函数到distance_cm()测距方法,完整掌握这份超声波模块 Python API,新手也能一次上手 📡

一、HC-SR04 超声波模块是什么?如何接线 🔌

HC-SR04 是一款四线数字测距传感器(不是 I²C 设备):向传感器发一个触发脉冲,它发出超声波并接收回波,用「高电平持续时间」换算出距离。接线只需 4 根线:

传感器引脚接法
VCC5V 电源
GNDGND(务必与主控共地,否则回波无法计时)
Trig数字引脚(积木可选 P0 / P1 / P2 / P8 / P12~P16)
Echo另一个数字引脚(可选范围同上)

⚠️ 两个易踩的坑:① Trig 与 Echo不可接反(Trig 是输出、Echo 是输入);② Echo 输出为 5V 高电平,若主控引脚不耐 5V,建议先经电平转换再接入。

二、构造 HCSR04 实例:2 个必选参数 + 1 个可选

打开 library/sonar.py 可以看到构造函数签名:

from sonar import HCSR04 sonar = HCSR04(0, 1) # Trig=P0,Echo=P1 sonar = HCSR04(0, 1, echo_timeout_us=30000) # 显式指定回波超时
参数说明
trigger_pin触发引脚编号(数字引脚,如0对应 P0),内部设为输出,初始化时拉低
echo_pin回波引脚编号,内部设为输入
echo_timeout_us(可选)回波超时时间(微秒),默认 30000 µs,约对应 5 m 量程;超时则判定「超出测量范围」

构造完成后,你就有了一个可以反复调用测距的HCSR04实例。

三、核心方法 distance_cm():一次调用拿到厘米距离 🎯

d = sonar.distance_cm() # 例如返回 23.45(厘米)

这一行背后做了三件事:

  1. 触发:Trig 引脚输出 10 µs 高电平脉冲,启动一次测距;
  2. 计时:测量 Echo 引脚高电平的持续时间(time_pulse_us);
  3. 换算:按声速 343 m/s(即 0.0343 cm/µs)计算,因声波是往返传播所以除以 2,最后保留两位小数返回。

返回值的三种情况要记牢:

返回值含义
浮点数(如23.45)有效距离,单位厘米
0有回波但距离无效
None回波超时:超出量程(默认约 5 m)、目标表面倾斜或为吸音材料

💡 需要毫米读数?直接sonar.distance_cm() * 10即可,但必须先判断返回值不是None,否则乘法会抛异常。

四、示例代码:连续测距 + 避障判断 🤖

把上面两部分组合起来,就是一个最常用的超声波测距程序:

from sonar import HCSR04 import utime sonar = HCSR04(0, 1) # Trig=P0,Echo=P1 while True: d = sonar.distance_cm() if d is not None and d < 20: print("⚠️ 前方有障碍物!距离:", d, "cm") else: print("当前距离:", d) utime.sleep_ms(500) # 每 0.5 秒测一次

把d < 20的阈值改大改小,就能快速实现不同灵敏度的超声波避障逻辑。

五、零代码方案:一块「超声波距离值」积木搞定

如果你用图形化积木编程,category.json 中注册的超声波分类下自带一块积木,无需手写任何代码:

只需三个下拉选择:

  • 单位:厘米/毫米;
  • Trig 为/Echo 为:必须与实际接线一一对应。

积木生成的 Python 代码定义在 blocksdef.js 中,等价于:

from sonar import HCSR04 ultra_1 = HCSR04(0, 1) # 以 Echo 引脚命名实例,如 ultra_1 ultra_1.distance_cm() # 选「毫米」时自动 * 10

可见积木与手写 API 是完全同源的——理解了HCSR04,也就完全看懂了积木底层在做什么。

六、一分钟排障:读数不对怎么办?🔍

现象原因与对策
读数一直为 0检查 Trig/Echo 是否接反、积木引脚选择是否与接线一致;确认 5V 已供电、GND 已共地
返回None超出测量范围:默认 30000 µs 超时效应约 5 m 量程,缩短距离或更换测量目标;也可调小echo_timeout_us
毫米模式报错超量程时distance_cm()返回None,None * 10会抛异常,取毫米值前先判空
读数跳动明显超声波对角度、表面材质敏感,属正常现象;建议多次测量取平均,或固定传感器避免抖动
引脚冲突请从下拉提供的 P0 / P1 / P2 / P8 / P12~P16 中选择,避免与板上其他功能冲突

七、项目文件速查表 📁

文件作用
library/sonar.py核心源码:HCSR04类(构造 +distance_cm())
README.md硬件接线、积木与 Python API 完整文档
blocksdef.js积木定义及其生成的 Python 代码
category.json积木分类「超声波」注册配置
config.json扩展名称、描述等元信息
images/ohcode_extend_1.png「超声波距离值」积木示意图

掌握HCSR04构造函数 +distance_cm()这一个方法,就掌握了这个超声波模块 Python API 的全部能力:三行代码完成构造与测距,剩下的只是把距离读数用进你的避障、停车、液位检测等创意项目里吧!

【免费下载链接】CupCode_HC-SR04超声波传感器模块源师兄扩展项目: 超声波模块 | 由源师兄组织创建项目地址: https://gitcode.com/yuanshixiong/ultrasonic-module

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/25 2:14:03

VC2015编译libssh-0.10.3静态库:工控遗留项目SSH通信方案

简介&#xff1a;本资源为VC2015编译的libssh-0.10.3静态库&#xff0c;面向需要在Windows平台C/C项目中集成SSH功能的开发者。libssh是开源SSH协议实现库&#xff0c;支持SSH1与SSH2&#xff0c;可完成远程登录、文件传输及加密网络服务等任务&#xff1b;静态库形式让开发者无…

作者头像 李华
网站建设 2026/9/25 2:13:24

CMake 3.24.4 Windows x86_64 官方二进制包深度解析

简介&#xff1a;本资源为CMake 3.24.4官方Windows x64版本完整安装包&#xff0c;面向C开发者、跨平台项目构建工程师及高校计算机专业学生&#xff0c;用于替代系统自带或旧版CMake&#xff0c;解决现代C项目&#xff08;如支持C20/23、CUDA、Apple Silicon交叉编译等&#x…

作者头像 李华
网站建设 2026/9/25 2:11:48

微信桌面版实时消息捕获技术原理与实现

简介&#xff1a;这是一套面向开发者与安全研究人员的微信聊天记录实时监控与查询工具源码&#xff0c;聚焦于微信私聊及群聊内容的本地化捕获与结构化访问。资源提供完整的Python后端服务实现&#xff0c;含HTTP服务入口、聊天历史管理、数据源适配及日志配置等核心模块&#…

作者头像 李华
网站建设 2026/9/25 2:10:55

win10下yolox tensorrt模型部署

TensorRT系列之 Win10下yolov8 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov8 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov7 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov6 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov5 tensorrt模型加速部署…

作者头像 李华
网站建设 2026/9/25 2:09:05

【Python深度学习】LSTM网络使用时间分布层

在神经网络模型中,当涉及时间序列或序列数据时,通常需要将网络结构与时间步保持一致。时间分布层(TimeDistributed) 是 Keras 中的一个关键组件,尤其在与 LSTM 层组合时。TimeDistributed 层的作用在于允许模型的每个时间步对输入序列独立应用某一层,实现逐步处理的特性。…

作者头像 李华