在我的一个项目中,我不小心用了一种复杂的,间接的方法。
我在院子里安装了16个土壤湿度传感器,试图追踪花园土壤中水分的分布情况。
传感器由电池供电。他们通过低功耗蓝牙将数据传输到院子里的几个WiFi控制节点。来自控制节点的数据被收集到树莓派的数据库中。除了来自传感器的标准数据(土壤湿度、温度、照明、土壤电导率和传感器的电池状态)外,控制节点还报告在从每个传感器读取数据时必须进行多少次尝试。
我使用“read attempts”数据为控制节点分配传感器,以减少读尝试次数。这使得数据收集更加可靠,也减少了传感器中CR2032硬币单元的功率。
我在回顾几个月的数据时发现,当开始下雨时,读取尝试会在土壤湿度读数之前上升。
雨水衰减蓝牙信号,足以损坏数据包。下雨时读取传感器可能需要多次尝试,即使在不下雨时,每次第一次尝试都能完美地读取相同的传感器。
我可以在远离控制节点的地方添加更多的传感器,然后将轮询时间从每小时一次缩短到每几分钟一次。通过一些数据处理,我可以有一个在线“降雨”页面,告诉我雨下得有多大——或者我可以在出门前看看窗外。
这是典型的“下雨天”的样子:
不是雨:

土壤水分分布如图所示。下面的部分显示了读尝试计数。黑色是正常的“一试即读”颜色。
刚刚开始下雨:

几乎所有传感器的读数都上升了,但没有足够的降雨来改变土壤湿度。
雨:

土壤湿度上升了,降水量上升得更多,这表明有大雨。
雨停了:

与下雨前相比,土壤湿度上升了很多。所有传感器的读取尝试计数已经下降到一个。
这种设置只是为了判断是否下雨,但如果你因为其他原因已经设置了它,这是设置的一个漂亮的副作用。
我可以使用接收到的信号强度指示(RSSI)值,但我没有将该函数写入控制节点软件。蓝牙库可能可以提供数据,我只是没有控制节点编程来做这件事。也许我应该改一下……
作为一种替代方案,你可以使用WiFi嗅探器来收集你家或公寓周围WiFi基站的数据。根据我自己手机的使用经验,我知道在下雨天,邻居的WiFi基站很少。
数据通常包括接收到的信号强度指示(RSSI)。数字越小(越负)意味着信号越弱。
跟踪你的嗅探器可以接收到的所有WiFi基站的数据,然后应用一些数据处理,也许还有一些机器学习,你就可以得到一个“下雨有多厉害”的指示器,而不用在你的房子外面安装任何硬件。