构建一个喷泉水位监测系统,并通过Home Assistant实现自动维护,无需可见的电线或管道
我们已经这样临时搭建的花园喷泉好几年了。我妻子用几件陶瓷器皿组装而成,我在下层水盆里加了一台小巨型水泵,用来将水输送到上层水盆的喷嘴处。
最初几年,它靠近我们的花园水龙头出口,所以每隔几天加满水都很方便。但后来,她想把它移到另一个位置,这样补水就会变得麻烦起来。
首先,我在附近地面上安装了一个喷嘴。我用一根花园软管从一个由智能插座控制的120伏交流电磁阀接口处供水。通过Home Assistant仪表盘来控制这个智能插座。当电磁阀开启时,喷嘴喷出的水流呈弧形射向下方的水槽。这是我们喜欢向访客展示的一个有趣演示,至今仍让我这个孩子感到开心!请参见封面照片和图1。
虽然这样可以更方便地维持喷泉水位,但仍然需要记得及时加水。我希望实现自动补水功能,但由于温度、降雨、风力以及上部水盆中使用的多个喷嘴不同,补水的时间点会有所变化。为了实现闭环控制,我需要测量喷泉的水位,但该如何做到呢?我考虑过在设备上方安装超声波或激光传感器,但我不想看到任何可见的电线或传感器支架。此外,这些传感器在水流不平的表面时效果也不太理想。
我偶然发现了霍尼韦尔的ABP2系列压力传感器。该系列传感器配备小型带刺喷嘴,用于测量压力,并提供适用于液位测量的不同量程。下部水槽的压力通过一段1/4英寸聚乙烯软管传输,经硅胶密封胶圈传递至喷泉底座中的传感器(见图2)。压力值(单位为水柱英寸)与传感器上方的水位高度直接对应。我所使用的传感器是霍尼韦尔型号ABP2DANT001PG2A3XX,从DigiKey购买(约24美元)。该传感器具有单个带刺接口(型号中“AN”),适用于液体介质(型号中的“T”),压力范围为0–1 PSIG(“001PG”),I2C输出地址为0x28(“2”)。最大1 PSIG量程相当于27.7英寸水柱,完全满足喷泉应用需求。此外还有其他量程可供选择。其他型号则提供不同地址的I2C接口或SPI接口。
我的喷泉底部设有传感器安装位置,便于将液体压力输送至传感器喷嘴。连接管到传感器的额外高度可被减去,从而能够显示碗体液面(见下文)。
喷嘴的配置各不相同,但只要能通过管道将液体输送至传感器,传感器就能可靠地测量其上方液体的高度。水源与传感器之间可能存在较长的水平距离。由于在静止状态下没有流量,因此管道长度不会影响测量精度(响应变化会稍慢,但在大多数情况下这并不重要)。即使管道中存在一些小型垂直连接部件,也不会影响设备运行。但如果管道布局比我的更复杂,请提供一种方式来清除感应线路中的空气。
我将压力传感器连接到一块4英寸×3英寸的PCB板上的克隆ESP32dev板上(见图4)。接线方式如电路图所示。水泵已通过主电源AC供电,用于驱动水泵。我通过水龙头底座中的USB立方体,使用ESP32的微型USB接口为ESP32供电。传感器由ESP32的3.3V引脚供电。10K电阻和0.1μF电容均符合传感器数据表的建议。ESP32通过其WiFi接口连接至Home Assistant。由于ABP2传感器已集成到ESPHome Builder HA插件中,因此集成非常简便。
我将完成的香水板组件放入一个聚乙烯食品储存袋中(见图5)。最初我以为这只是一个临时测试用的装置,但经过一个季节后看起来一切正常,因此我决定在第二季继续保留。我使用了一段短的3/32英寸内径×3/16英寸外径的燃油管,直接连接到传感器上。该燃油管紧密地插入从喷泉碗延伸出的1/4英寸聚乙烯管中,这样在需要时可以拆下传感器板。所有接口处均使用硅胶密封条:袋子与传感器、管道与传感器,以及小口径管道与大口径管道之间的连接处。传感器组件悬挂在喷泉碗下方,喷嘴朝上。USB电源线从袋子底部进入,袋子保持敞开状态。
ESP32的固件是使用ESPHome Builder根据所示YAML文件生成的。min_pressure和max_pressure参数默认单位为帕斯卡(Pa)。其中6895对应的max_pressure值相当于传感器满量程1 PSIG。大部分YAML内容将由ESPHome Builder自动生成,您需要手动添加i2c和sensor部分,并根据实际情况调整wifi部分。
来自传感器的自动控制级别实体 sensor.fountainlevel_fountain_level 具有用户可选择的单位,但我希望显示的单位为英寸水柱(inches of water),而该选项不可用。我选择了 PSI 作为单位,并创建了一个 HA 辅助实体(sensor.fountain_level_inches)用于显示和补液自动化。Fountain Level Inches 辅助实体的配置代码如下所示。
经过一些尝试和调整,我采用了以下方法来实现自动加水。首先,我设置了一个自动化程序,确保电磁阀在打开后20秒内关闭,且不作例外处理。这一步非常可靠,以防我忘记关闭阀门(我后来才明白这是必须的,是通过亲身经历才意识到这一点!)。对于加水操作,我每5分钟运行一次自动加水程序(时间模式触发器 /5分钟)。碗中的液位变化非常缓慢,而5分钟的间隔能确保在下一次加水前读取到新的液位数据。当碗中液位低于固定值(我的情况下为4.5英寸)或高于零时,系统会自动开启电磁阀(这可以防止在液位传感器失效时继续加水)。我还添加了一个名为“input_boolean.disable_fountain_autofill”的辅助变量,它提供了一个仪表盘开关,用于禁用自动加水功能。如果该禁用辅助变量为真,则不会触发电磁阀的开启。只要所有条件都满足,自动化程序就会直接打开电磁阀。最后,由“20秒后关闭”自动程序负责关闭电磁阀。
仪表板实体卡片如下所示。
有了自动化装置,喷泉几周都不需要人工照料。偶尔还需要清洁——不过我还没实现自动清洁功能。在下一个季节交替期间,我计划加装一个继电器来控制喷泉水泵。虽然我们通常让水泵整个夏天持续运行以防止蚊子滋生,但这个继电器可以在水池水位过低时关闭水泵,从而保护水泵。
本文编译自hackster.io





