树莓派超声波测距仪实战:从HC-SR04到LCD显示的完整项目
1. 项目概述用树莓派打造一个超声波测距仪最近在整理工作室的物料发现角落里躺着一个闲置的HC-SR04超声波模块和一个1602 LCD显示屏。看着手边正在跑着轻量服务的树莓派4B一个想法冒了出来为什么不把它们组合起来做一个实时显示距离的测距仪呢这听起来像是一个经典的入门项目但实际做下来你会发现从硬件连接到软件编程再到数据稳定性的优化里面有不少值得琢磨的细节。这个项目非常适合刚接触树莓派GPIO和Python编程的朋友它能让你快速理解传感器数据采集、处理和显示的全流程。最终你将得到一个可以测量前方障碍物距离通常2cm到400cm范围内并将读数实时显示在LCD屏幕上的小装置。无论是用来监测桌面物品的摆放还是作为更复杂项目比如简易避障小车的前置传感器模块都是一个非常实用的起点。2. 核心硬件选型与连接原理2.1 硬件清单与功能解析要实现这个超声波测距显示系统我们需要几样核心硬件。首先是主控板我选用的是树莓派4B它的GPIO引脚丰富、计算能力强足以轻松处理传感器数据。传感器方面HC-SR04超声波模块几乎是电子爱好者的标配它价格低廉、原理直观通过发射和接收超声波来测算距离。显示部分我选择了经典的1602 LCD字符液晶屏它能显示16列2行字符足以清晰展示距离数值和单位。此外你还需要一些杜邦线母对母进行连接以及一个为LCD屏幕供电的可调电位器通常为10kΩ用于调节屏幕对比度。这里重点说说HC-SR04的工作原理因为它直接决定了我们代码的编写逻辑。这个模块有四个引脚VCC电源、Trig触发、Echo回响和GND接地。其工作流程是树莓派向Trig引脚发送一个至少10微秒的高电平脉冲这会触发模块发射一束8个40kHz的超声波。超声波遇到物体反射回来被模块接收。此时Echo引脚会输出一个高电平脉冲这个脉冲的宽度与超声波往返的时间成正比。我们只需要在代码中测量这个高电平脉冲的持续时间然后利用声速约343米/秒即34300厘米/秒计算出距离。公式很简单距离 (高电平时间 * 声速) / 2。除以2是因为时间是往返的。2.2 电路连接与安全注意事项正确的硬件连接是项目成功的第一步接线错误轻则无法工作重则可能损坏树莓派或传感器。树莓派4B的GPIO引脚采用40针排列我们需要准确找到对应的物理引脚编号。对于HC-SR04模块VCC连接到树莓派的物理引脚2 (5V电源)。GND连接到树莓派的物理引脚6 (接地)。Trig (触发)连接到树莓派的物理引脚11 (GPIO17)。这个引脚将由程序控制输出触发信号。Echo (回响)连接到树莓派的物理引脚13 (GPIO27)。这个引脚将作为输入读取返回的脉冲信号。注意有些教程建议在Echo引脚和树莓派之间串联一个1kΩ的电阻或者使用分压电路例如两个电阻串联分压这是因为HC-SR04的Echo引脚输出是5V电平而树莓派的GPIO引脚耐受电压通常是3.3V。长期直接连接5V信号有潜在风险。一个简单的保护措施是使用两个电阻例如1kΩ和2kΩ组成分压电路将5V降至约3.3V后再接入树莓派。这是一个重要的安全操作建议初学者加上。对于1602 LCD屏幕基于HD44780控制器 LCD屏幕通常有16个引脚但我们最常用的是4位数据线模式这样可以节省GPIO引脚。关键连接如下VSS (引脚1)和RW (引脚5)接地。VDD (引脚2)和A (背光阳极引脚15)接树莓派物理引脚4 (5V电源)。V0 (引脚3)接一个10kΩ电位器的中间脚电位器另外两端分别接5V和地通过旋转来调节屏幕对比度。RS (寄存器选择引脚4)接树莓派物理引脚37 (GPIO26)。E (使能引脚6)接树莓派物理引脚35 (GPIO19)。D4-D7 (数据线引脚11-14)分别接树莓派物理引脚31 (GPIO6)、33 (GPIO13)、36 (GPIO16)、38 (GPIO20)。K (背光阴极引脚16)接地。接线完成后务必仔细检查两遍特别是电源和地的连接接反或接错高压很可能导致硬件永久损坏。3. 软件环境配置与核心库介绍3.1 操作系统与Python环境准备我假设你已经在树莓派4B上安装了 Raspberry Pi OS原Raspbian这是最兼容的官方系统。首先打开终端进行系统更新是一个好习惯sudo apt update sudo apt upgrade -y。本项目主要使用Python 3进行编程。树莓派OS通常预装了Python 3。我们需要安装两个关键的Python库来控制GPIO和LCD屏幕。第一个是RPi.GPIO它是树莓派官方的GPIO控制库但我们将使用一个更现代、功能更强大的替代品gpiozero。gpiozero提供了更面向对象、更高层次的抽象代码写起来更简洁易懂。可以使用pip安装sudo pip3 install gpiozero。如果系统没有pip3先安装它sudo apt install python3-pip。对于1602 LCD屏幕我们将使用RPLCD库它专门用于驱动基于HD44780控制器的LCD。安装命令为sudo pip3 install RPLCD。3.2 核心库gpiozero与RPLCD浅析gpiozero库将硬件组件视为“对象”。例如一个按钮就是一个Button对象一个LED就是一个LED对象。对于我们的HC-SR04虽然没有直接的内置对象但我们可以利用其底层的DistanceSensor对象或者更灵活地使用OutputDevice和InputDevice来模拟Trig和Echo引脚的操作。在本项目中为了更清晰地展示底层时序控制原理我选择后者即分别定义Trig为输出设备Echo为输入设备。这种方式让你对超声波测距的底层时序有更深刻的理解。RPLCD库则封装了与HD44780控制器通信的所有复杂细节。我们只需要指定使用哪种引脚编号模式BCM或BOARD、连接了哪些GPIO引脚以及屏幕的行列数它就能提供简单的方法来清屏、移动光标和写入字符。它支持4位和8位数据模式我们采用4位模式以节省引脚。4. 核心代码实现与分步解析4.1 超声波测距功能实现首先我们来实现最核心的测距函数。我们将不使用gpiozero中高层次的DistanceSensor而是手动控制时序这有助于理解原理。import time from gpiozero import OutputDevice, InputDevice # 初始化引脚 (使用BCM编号对应GPIO号非物理引脚号) TRIG_PIN 17 # BCM GPIO 17, 物理引脚11 ECHO_PIN 27 # BCM GPIO 27, 物理引脚13 # 创建输出设备对象Trig和输入设备对象Echo trigger OutputDevice(TRIG_PIN) echo InputDevice(ECHO_PIN) def measure_distance(): 执行一次超声波测距并返回厘米距离。 返回 -1 表示超时或测量失败。 # 1. 确保Trig引脚先拉低然后给出一个10us以上的高脉冲 trigger.off() time.sleep(0.00001) # 短暂延迟确保状态稳定 trigger.on() time.sleep(0.00001) # 维持10微秒高电平 trigger.off() # 2. 监测Echo引脚等待其变为高电平超声波发出 pulse_start time.time() timeout_start pulse_start while echo.is_active False: pulse_start time.time() if pulse_start - timeout_start 0.1: # 等待超时100ms return -1 # 3. 监测Echo引脚等待其变为低电平超声波返回 pulse_end time.time() while echo.is_active True: pulse_end time.time() if pulse_end - pulse_start 0.1: # 测量超时100ms对应约17米 return -1 # 4. 计算高电平脉冲持续时间 pulse_duration pulse_end - pulse_start # 5. 计算距离声速取34300 cm/s距离为往返路程的一半 distance (pulse_duration * 34300) / 2 # 可选将结果四舍五入到两位小数 return round(distance, 2)这段代码的关键在于精确的时序控制。trigger.on()和trigger.off()控制了发射信号而两个while循环则用于捕捉Echo引脚上高电平脉冲的起始和结束时刻。超时判断是必要的可以防止程序在未接收到回波时无限期卡住。4.2 LCD屏幕驱动与数据显示接下来我们初始化LCD屏幕并创建一个函数来更新显示内容。from RPLCD.gpio import CharLCD # 初始化LCD对象 # pin_rs, pin_e, pins_data 使用的是BCM GPIO编号 # numbering_mode 使用GPIO.BCM与gpiozero一致 # cols 和 rows 指定屏幕为16列2行 lcd CharLCD(pin_rs26, pin_e19, pins_data[6, 13, 16, 20], numbering_modeGPIO.BCM, cols16, rows2) def display_distance(distance): 在LCD屏幕上显示距离信息。 lcd.clear() # 清屏 if distance -1: lcd.write_string(Out of Range) elif distance 2 or distance 400: # HC-SR04的有效范围通常为2-400cm lcd.write_string(Invalid: {:.1f}cm.format(distance)) else: # 第一行显示标题 lcd.write_string(Distance:) # 将光标移动到第二行开头 lcd.crlf() # 第二行显示具体数值和单位 lcd.write_string({:.1f} cm.format(distance))CharLCD对象的初始化参数与我们之前的硬件连接一一对应。display_distance函数首先清空屏幕然后根据距离值判断显示内容无效值-1、超出有效范围的值以及正常值。{:.1f}是Python的格式化字符串语法表示将浮点数格式化为保留一位小数。4.3 主程序循环与稳定性优化将测距和显示功能组合起来并加入主循环就构成了完整的程序。import time from signal import pause def main(): print(超声波测距仪启动...) lcd.write_string(Initializing...) time.sleep(2) try: while True: dist measure_distance() print(测距结果: {:.1f} cm.format(dist)) display_distance(dist) # 每次测量间隔0.5秒避免超声波相互干扰 time.sleep(0.5) except KeyboardInterrupt: print(\n程序被用户中断) finally: # 清理GPIO和LCD资源 lcd.clear() lcd.close(clearTrue) trigger.close() echo.close() print(资源已清理程序退出。) if __name__ __main__: main()主循环while True不断执行测距、打印到终端、显示到LCD然后等待0.5秒。这个延迟很重要它给传感器留出了处理时间并确保上一次测量的回波不会干扰下一次。try...except KeyboardInterrupt结构允许我们通过按CtrlC来优雅地终止程序并在finally块中执行清理工作关闭LCD和GPIO设备这是一个良好的编程习惯。5. 系统集成、调试与性能优化5.1 完整代码整合与首次运行现在我们将所有代码片段整合到一个Python文件中例如命名为ultrasonic_display.py。在树莓派终端中使用命令python3 ultrasonic_display.py来运行它。首次运行时你可能会遇到一些问题。最常见的问题是LCD屏幕只亮背光但没有字符显示。这几乎总是对比度问题。请调整连接在LCD V0引脚上的10kΩ电位器缓慢旋转直到字符清晰出现。另一个可能是接线错误请再次对照引脚图检查所有连接特别是LCD的RS、E和数据线D4-D7。如果终端有距离输出但LCD不显示检查RPLCD初始化时使用的GPIO编号BCM模式是否与物理连接一致。确保代码中pin_rs26对应的是你实际连接LCD RS引脚到树莓派GPIO26的物理线路。5.2 测量数据滤波与精度提升原始的measure_distance()函数每次只进行一次测量在存在环境噪声或物体表面不规则时单次读数可能跳动较大。为了提高显示的稳定性和可靠性我们可以引入简单的软件滤波。一种简单有效的方法是连续采样取中值。我们连续进行5次或7次测量将这些结果存入一个列表排序后取中间值作为最终结果。这能有效滤除偶然的极大或极小误差。def measure_distance_median(sample_size5): 进行多次采样返回中值距离以提高稳定性。 distances [] for _ in range(sample_size): dist measure_distance() if dist 0: # 只收集有效的正数距离 distances.append(dist) time.sleep(0.05) # 每次微小采样间隔 if not distances: return -1 distances.sort() median_index len(distances) // 2 return distances[median_index]然后在主循环中调用measure_distance_median(5)代替原来的measure_distance()。你会发现LCD上显示的数字跳动明显减小变得更加稳定可靠。采样次数sample_size可以调整次数越多越稳定但响应会变慢需要根据实际应用权衡。5.3 环境因素校准与误差分析超声波测距的精度受环境温度影响较大因为声速会随温度变化。在20°C时声速约为343m/s但温度每升高1°C声速约增加0.6m/s。对于高精度要求厘米级以下的应用可以考虑加入温度传感器如DS18B20进行实时声速补偿。修正公式为声速 331.3 0.606 * 温度(°C)单位是m/s。此外测量误差还来源于1.时间测量精度Python的time.time()在普通树莓派上精度有限对于要求毫米级精度的场合可以考虑使用硬件PWM或外部中断等更高精度的方法。2.传感器本身误差HC-SR04模块本身存在约±3mm的误差且对被测物体的材质、角度敏感。光滑坚硬的表面反射好测量准柔软、多孔的物体则会吸收声波导致测量距离偏大甚至无回波。6. 项目扩展思路与实用化改造6.1 功能扩展添加警报与数据记录基础功能实现后我们可以很容易地为其添加新功能。例如添加一个蜂鸣器或LED作为距离警报。当测量距离小于某个安全阈值如20厘米时让蜂鸣器鸣响或LED闪烁。from gpiozero import Buzzer BUZZER_PIN 22 # BCM GPIO 22 buzzer Buzzer(BUZZER_PIN) ALARM_DISTANCE_CM 20.0 def check_alarm(distance): if 0 distance ALARM_DISTANCE_CM: buzzer.on() # 或 buzzer.beep(on_time0.1, off_time0.1) 实现脉冲鸣叫 else: buzzer.off()在主循环中调用display_distance(dist)后加入check_alarm(dist)即可。我们还可以将测量数据记录到文件中用于后续分析。使用Python内置的csv模块或sqlite3数据库每隔一段时间如每秒将时间戳和距离值写入文件。6.2 形态改造从桌面装置到移动应用目前的项目还是一个桌面上的连线装置。你可以考虑用亚克力板或3D打印一个外壳将树莓派、传感器和LCD屏幕集成在一起做成一个独立的便携设备。为其配备一个移动电源它就可以在任何地方工作。更进一步可以尝试替换显示方式。比如使用OLED屏幕SSD1306驱动替代1602 LCD可以获得更高对比度和更灵活的像素控制甚至可以显示距离趋势图。或者完全去掉本地屏幕将树莓派作为一个Web服务器通过Wi-Fi在手机或电脑浏览器上实时查看距离数据。这需要用到像Flask这样的轻量级Web框架将measure_distance()函数封装成一个API接口前端通过图表库动态展示。6.3 系统优化与后台服务化如果你希望这个测距仪在树莓派开机后自动在后台运行而不是每次手动启动Python脚本可以将其配置为一个系统服务。创建一个服务文件如/etc/systemd/system/ultrasonic.service定义启动命令、工作目录和重启策略。这样设备重启后测距仪会自动运行并且如果程序意外崩溃系统也会尝试重启它非常适合需要长期稳定运行的监测场景。最后在资源管理上虽然本项目不耗资源但良好的习惯是在程序中使用try...finally确保资源释放使用with语句管理设备对象如果库支持并避免在紧密循环中创建不必要的对象以保持程序的长期运行稳定性。

相关新闻

AI安全漏洞警示:从Anthropic事件看开发者如何构建多层防护体系

AI安全漏洞警示:从Anthropic事件看开发者如何构建多层防护体系

最近,AI安全领域的一则消息,让不少关注技术伦理和产品稳定性的开发者心头一紧。Anthropic,这家以“构建安全、可靠、可解释的AI”为使命的公司,主动披露了一个持续近一年的安全漏洞:其用于防止生成有害生物武器信息的过…

2026/8/19 3:15:11 阅读更多 →
基于TVA的具身智能好奇心与内驱力研究

基于TVA的具身智能好奇心与内驱力研究

前沿技术探索:TVA智能体(简称TVA)TVA智能体(亦称“AI智能体视觉”或“TVA视觉智能体”)是依托Transformer架构与“因式智能体”理论构建的系统级视觉技术框架。它融合深度强化学习(DRL)、卷积神…

2026/8/20 6:08:03 阅读更多 →
多智能体系统故障预测:在线审计与早期预警框架设计

多智能体系统故障预测:在线审计与早期预警框架设计

1. 项目概述:当多智能体系统学会“自我体检”在分布式人工智能领域,多智能体系统正变得越来越复杂和关键。从自动驾驶车队的协同决策,到工业物联网中成千上万传感器的联动优化,再到大型在线游戏中的NPC群体行为模拟,这…

2026/8/19 3:15:11 阅读更多 →

最新新闻

从ESP32到传感器融合:打造实时反馈智能拳击训练机的硬件与算法实践

从ESP32到传感器融合:打造实时反馈智能拳击训练机的硬件与算法实践

1. 项目概述:从想法到实物的迭代之路几年前,我动手做了第一台拳击训练机,那玩意儿说白了就是个能亮灯、能计时的沙袋架子。虽然能用,但问题一大堆:反应迟钝、模式单一、数据全靠猜,练久了总觉得差点意思。作…

2026/8/20 6:08:30 阅读更多 →
从LED驱动电路入门:深入解析简单电路的设计、计算与工程实践

从LED驱动电路入门:深入解析简单电路的设计、计算与工程实践

1. 项目概述:从“简单电路”到电子世界的基石“Simple Circuit”,简单电路。这四个字听起来平平无奇,甚至有些过于基础,以至于很多刚入行的朋友可能会直接跳过,觉得这有什么好讲的?不就是电池、导线、灯泡连…

2026/8/20 6:08:30 阅读更多 →
课程学习如何塑造记忆代理:从数据编排到高效记忆策略

课程学习如何塑造记忆代理:从数据编排到高效记忆策略

1. 从“记忆体”到“记忆代理”:一个被忽视的训练数据编排问题最近在跟进强化学习(RL)与大型语言模型(LLM)结合的前沿进展时,一个高频出现的概念是“Memory Agents”(记忆代理)。无论…

2026/8/20 6:08:30 阅读更多 →
大语言模型上下文压缩实战:5种策略解决显存与性能瓶颈

大语言模型上下文压缩实战:5种策略解决显存与性能瓶颈

这次我们来看一个在本地部署和实际应用中绕不开的技术点:上下文管理。对于任何依赖大语言模型(LLM)进行长文本对话、文档分析或多轮任务的应用来说,上下文窗口(Context Window)既是能力的放大器&#xff0c…

2026/8/20 6:08:30 阅读更多 →
车联网技术架构解析:从V2X通信到OTA升级与数据安全

车联网技术架构解析:从V2X通信到OTA升级与数据安全

1. 从“联网的车”到“移动的智能节点”:车联网的本质与演进最近几年,无论是汽车发布会还是科技新闻,“车联网”这个词的出现频率高得惊人。但如果你问身边的朋友“车联网到底是什么”,得到的答案可能五花八门:有人说是…

2026/8/20 6:08:30 阅读更多 →
Windows Defender 移除完整指南:3 个关键步骤,用 windows-defender-remover 彻底摆脱后台卡顿

Windows Defender 移除完整指南:3 个关键步骤,用 windows-defender-remover 彻底摆脱后台卡顿

Windows Defender 移除完整指南:3 个关键步骤,用 windows-defender-remover 彻底摆脱后台卡顿 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11…

2026/8/20 6:07:30 阅读更多 →

日新闻

Framework笔记本BIOS更新变砖,“可维修”承诺遭遇芯片级维修考验!

Framework笔记本BIOS更新变砖,“可维修”承诺遭遇芯片级维修考验!

Framework笔记本BIOS更新引“变砖”危机2026年7月7日,Framework向用户quantum5发送邮件,建议其安装BIOS 3.20更新。然而,更新后电脑出现严重问题,屏幕显示三角形和随机像素图案,风扇狂转,系统完全挂起。qua…

2026/8/20 0:00:46 阅读更多 →
2026还在担忧建站平台哪家好?手把手带你搭建自家网站!

2026还在担忧建站平台哪家好?手把手带你搭建自家网站!

2026还在担忧建站平台哪家好?手把手带你搭建自家网站!据艾瑞咨询发布的《2026年中国企业数字化服务市场研究报告》,2025年国内网站建设市场规模已达896亿元,同比增长18.7%。中国互联网络信息中心数据显示,截至2025年底…

2026/8/20 0:00:46 阅读更多 →
2026高端网站建设公司哪家好?怎么选才能不花冤枉钱?

2026高端网站建设公司哪家好?怎么选才能不花冤枉钱?

2026高端网站建设公司哪家好?怎么选才能不花冤枉钱?据艾瑞咨询《2026年中国企业数字化服务市场研究报告》,2025年国内网站建设市场规模已达896亿元,其中高端定制网站服务占比突破42%。更值得关注的是,91%的规模以上企业…

2026/8/20 0:00:46 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/19 11:55:18 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/19 9:46:27 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/19 11:55:16 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/19 5:04:55 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/19 7:42:22 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/19 11:55:13 阅读更多 →