构建一个无线地下室排水井液位监测系统
在之前的项目中,我曾配置了一台 Raspberry Pi 5 来运行 Apache,用于向 Home Assistant 服务器提供 Pi CPU 的温度数据,并由 Home Assistant 抓取并显示在仪表板上。本项目在软件方面会简单一些,因为我将使用 Seeed Studio 提供的 ESP32-C3 芯片作为 Web 服务器,实时报告地下室排水井中超声波传感器测得的水位距离。随后,Home Assistant 将抓取该页面数据,并在仪表盘上展示。
工作原理
我们的排水井通过收集房屋地基外围排水沟中的积水,再通过 PVC 管道将水排至屋外。如果水泵发生故障,在持续或极端降雨情况下,地下室可能被淹。目前我们使用位于排水井顶部的水位报警器,一旦水位达到设定值,就会触发警报喇叭和手机通知。为了增加一层安全防护并打造更智能的家居环境,我将添加监控排水沟水位的功能,并将相关信息报告到Home Assistant仪表板上。
HC-SR04非常适合此应用,它通过超声波脉冲测量物体距离。该模块在接收到触发信号后,会先进行一些内置的信号处理,再返回回波信号。回波脉冲的持续时间与物体到传感器的距离成正比。下图显示了来自ESP32-C3引脚D4的触发信号。ESP32-C3引脚D5上的回波脉冲长度则编码了物体的距离,脉冲越长,表示物体离传感器越远。
下图展示了模块在进行任何信号处理前的原始信号。模块通过计算脉冲发射与回波之间的时间差来确定距离,然后将该距离转换为与物体距离成比例的脉冲长度,如上图所示。
下图显示的是一个8个脉冲、频率为40kHz的信号正在向外传输。
部署
在此应用中,我将部署HC-SR04超声波测距模块,并通过Seeed Studio连接到ESP32-C3。传感器会从外壳上的开口向下看,并通过其扬声器发出40kHz的方波。随后,传感器会监听回声是否从坑中的水面顶部反射回来。距离可以通过计算脉冲发射与回声之间的时间差来确定,该时间差基于空气中的声速。
设置的侧面示意图显示了传感器输出的40kHz脉冲,该脉冲在水中反射后返回至传感器的麦克风。
接线说明
HC-SR04应按以下引脚配置进行连接:
•Vcc = 5V
•Trig = D4
•Echo = D5
•GND = GND
连接至Arduino IDE
如果使用Linux系统,可下载Arduino IDE的应用镜像文件。
右键点击应用镜像文件,使其成为可执行文件。
进入“工具”→“板子”→“板子管理器”……
从下方所示的板子管理器窗口中安装esp32板子。
将上传速度设置为115200。
使用提供的Arduino代码。
数据输出
将代码上传至板子并查看串口监视器:
我决定在串口终端中禁用诊断距离信息,因为每次通过网页浏览器连接时,数据都会写入网页。
接下来,请使用网页浏览器访问ESP32-C3报告的IP地址。每当有客户端连接时,数据就会更新。由于Home Assistant每分钟抓取页面一次,因此网页将每分钟更新一次距离传感器的平均值。
Home Assistant
为了将网页上的数据传输到 Home Assistant 的仪表板中,我将从网页中提取所有信息,但只保留原始数值。
重启 Home Assistant,并在实体列表中选择该卡片,将其添加到您偏好的仪表板上。
自定义 PCB
使用 Altium Designer,我们可以创建一个自定义电路板,采用 ESP32-C3 作为通孔或表面贴装器件(SMD)。
J1 可以是 100mil 跳线间距的直角表面贴装或通孔连接器。
•UltraBdv1 有多种不同的安装方式。
•ESP32-C3 可通过通孔引脚进行安装,也可使用带锁紧边缘的连接器进行表面贴装。
•HC-SR04 可直接安装到 UltraBdv1 上。
•HC-SR04 也可以通过直角通孔或 100mil 表面贴装母头进行安装。
使用中间层卡后,我们的测量结果会更加准确,因为系统不再存在微控制器与传感器之间悬挂的飞线,从而降低了噪声干扰的影响。
本文编译自hackster.io





