Home Assistant 早就知道哪天该收哪个垃圾桶。它能在仪表盘上标好颜色,能提醒你今晚是收垃圾的夜晚。但它不知道一件事:你到底有没有把桶推出去。
大多数人会在手机上设个循环提醒。作者说自己不是大多数人——他给六个垃圾桶装上了无线电标签,用 UWB 测距判断桶有没有离开存放区。他承认这属于"过度工程",但也承认自己乐在其中。
从蓝牙标签到 UWB
这个想法不是新冒出来的。几年前他试过在垃圾桶上贴便宜的蓝牙标签,用室外蓝牙代理判断桶是否在附近。结果很挫败:电池掉得快,距离读数飘忽不定,代理在那个位置也不可靠。他想要的是"桶有没有移动",实际得到的只是又一个需要折腾的东西。
蓝牙方案的问题出在测距原理上。它靠 RSSI,也就是接收信号强度来估算距离。但信号强度受太多因素影响:墙壁、停着的车、反射、天线朝向,甚至电池电压都可能改变发射功率。信号变弱,可能是桶走远了,也可能只是中间挡了东西。这种估算方式非常不精确。
UWB 让他重新燃起兴趣。它测量的是无线电信号在设备之间传播所花的时间,直接得出距离,不用从信号强度去猜。当然,信号还是得穿过周围环境——换个无线电,停着的车也不会消失。
一个锚点就够了
他一度绕进一个学术问题:要增加维度、想知道方向而不只是距离,需要多少个锚点?在二维平面上精确定位又要多少个固定参考点?对这件事来说完全不值得,但想法就是会跑偏。
对垃圾桶来说,他只需要知道每个桶有没有离开平时的存放区,远到可以算作"已拿出去"。一个锚点就够开始测试了。他用了十米边界:边界内是"在家",超出就是"已拿出去",前提是有新的读数。这个数值是他这套装置专属的,但好处是可以从一块通电的板子开始,而不是把花园变成定位测试场。
第一次实验用了两块 Makerfabs ESP32-WROVER/DW3000 板,都通过 USB 供电。在接入 Home Assistant 之前,他想先看到它们测出距离。一个本地网页视图让他能把两块板分开,观察结果,不用拉一根 USB 线连在中间。
天线朝向带来的差异出乎意料地大。在大约十米处,把板子从平放改成竖直,那次测试的观测成功率从 37% 升到了 100%。一个更慢、前导码更长的无线电设置,也能在最初那个快速设置吃力的地方正常工作。这些发现出现在围绕第一个结果做设计之前,很有用。
第一次用卷尺校准、看到报告距离和自己的测量相差不到两厘米时,他形容自己彻底被震住了。两块小板子在交换无线电信号,结果和卷尺的吻合度到了这个程度。
在后来的记录测试中,10.1 米的实测间距产生了约 10.09 米的平均读数,标准差三厘米。对一个只需要识别垃圾桶离开存放区的项目来说,这已经足够鼓舞人。那个不到两厘米的结果,是他在第一次校准时看到的,并不代表每个标签、每种朝向、每个室外位置都能达到这个精度。
室外行走测试暴露了边界
室外行走测试更能说明问题。读数在大约三十米内可靠,再远就断断续续。最远的一次记录是 37.28 米,中间有中断。一辆车就能把路径完全挡住。把板子竖直拿在开阔处,和在垃圾桶边缘下面装一个小标签,显然是两种不同的测试。
这套系统最终叫 BinRange:一个固定的无线电锚点、六个小电池标签,加上一套 Home Assistant 配置,把垃圾桶被看到的位置和它们的收运时间结合起来。还有打印外壳、自定义固件和无线更新。对一个"你把垃圾桶拿出去了吗"的问题来说,这个答案相当有分量。
整个搭建过程他大量依赖 Codex。Astra 在中途可用,他很想看看它表现如何。他说和 AI 一起工作最让他喜欢的地方,是能很快把一个想法变成结果,对结果做出反应、给出反馈,然后马上有新的东西可以试。
他家有六个桶:一个普通垃圾、一个厨余堆肥、一个花园垃圾、两个回收、一个玻璃。六个桶甚至不都在同一个收运时间表上。他庆幸 Home Assistant 的 Waste Collection Schedule 集成会抓取市政时间表并跟踪哪些该收了,因为光是把这些理清楚本身就是一件苦差事。
热门跟贴