给垃圾桶装超宽带:10 米外偏 3 厘米,通知却没发

给垃圾桶装超宽带:10 米外偏 3 厘米,通知却没发

IoTUWBHome Assistant工程实践

数据源:Simon Green 的 BinRange 项目记录

2026 年 9 月 28 日,开发者 Simon Green 终于等到了他的自动化实战测试。他给家里的 6 个垃圾桶装上了超宽带(UWB)无线电标签,把 10 米外的测距误差压到了 3 厘米。但在垃圾桶被推出去清空的 3 个多小时里,系统没有任何信号,最后传回的一条「已倾倒」通知过期了 58 分钟,直接被自动化脚本判定为无效。

这场折腾指向了一个更普遍的工程现实:传感器给你的是精确,不是真相;厘米级精度和「我知道发生了什么」之间,隔着一整段脆弱的物理链路。

放弃信号猜距,10 米外误差只剩 3 厘米

项目最初的动机非常纯粹。Simon 的 Home Assistant 已经知道哪天该倒哪个垃圾桶,却唯独不知道他到底有没有把桶推到路边。早期的解法是挂上便宜的蓝牙标签,配上室外蓝牙代理,利用 RSSI(接收信号强度)来估算距离。

但用信号强度算距离是一条死胡同。无线电信号的衰减不仅取决于距离远近。墙壁的阻挡、院子里停着的车、墙面的多径反射、天线的朝向,甚至仅仅是电池电压下降,都会直接拉低接收到的信号强度。「信号弱」既可能是垃圾桶被推到了 20 米外,也可能是标签恰好被汽车的金属门挡住。这套旧方案带来的是电池掉电快、读数四处漂移,以及室外代理时不时崩溃的日常折腾。

UWB 换了一种根本性的解题思路。它不再依靠含糊不清的信号强度去反推距离,而是直接测量无线电脉冲在两个设备之间传播所花费的时间。测距变成了一道纯粹的物理计算题:时间乘以光速。距离从一个靠环境条件猜出来的模糊量,变成了确凿的物理事实。

实测数据证明了底层原理的换代效果。在一次用卷尺进行的严谨距离标定中,卷尺实际量得 10.1 米,系统的平均读数达到了 10.09 米,标准差仅仅只有 3 厘米。把测距方式从强度映射换成时间戳计算,空间距离终于不再是一门环境玄学,而是可依赖的物理坐标。

330 美元买来高精度,绕不开天线和汽车

硬件升级的账单是实打实的。为了这 6 个垃圾桶,Simon 先是支付 123.64 美元买了两块 Makerfabs ESP32-WROVER/DW3000 开发板做前期的概念验证,确认可行后,又掏出 330 美元,买下了 10 个正式的 KKM K4W 标签和专用的编程治具,两笔合计 453.64 美元。

这批正式标签搭载了 nRF52833 处理器和 DW3110 射频模块,内置 LIS3DH 加速度计,用的是体积相当可观的 CR2477 纽扣电池——作者在记录里特意吐槽了一句,这种大号纽扣电池他以前没见过。硬件规格拉满,但 UWB 仍然是无线电。换一种物理协议并不能让停在院子里的汽车直接消失,物理障碍该在还是在。

Makerfabs 实验板 图:实验用的 Makerfabs ESP32-WROVER 开发板,可见 UWB 模块与天线。来源:Simon Green 的项目记录

实际的户外走测暴露出射频链路的脆弱底色。在大约 30 米范围内,距离读数保持可靠,单次最远甚至记录到了 37.28 米。但只要一辆车横穿视距中间,就能直接切断通信通路。汽车金属车身对电磁波的屏蔽作用,直接抹平了 UWB 的物理优势。

天线朝向带来的影响更是大得出奇。在距离约 10 米处的极限测试中,仅仅是把标签的电路板从平放状态改成竖立,同一次测试里的成功率就从 37% 飙升到了 100%。后续通过降低射频速率、加长前导码,部分解决了初始高速握手失败的问题。物理法则对所有通信协议一视同仁,再高的频率也穿不透实心金属,天线极化方向不匹配依然会吃掉本就不多的信号余量。

精度救不了丢包,58 分钟盲区吃掉通知

整个追踪逻辑设定了一条 10 米的边界:边界以内算作 Home,超出 10 米算作 Out。在庭院里测试时逻辑跑得很完美,直到 9 月 28 日的那次园艺垃圾收集实战。

当天的时序记录成了系统盲区的铁证。早上约 7:05,垃圾桶开始移动,随后顺利越过 10 米边界。但就在跨越边界之后,标签突然失联,再也没有任何读数传回。这段信号真空期持续了三个多小时。

直到 10:25,垃圾桶重新出现在基站的覆盖范围内。网络随之收到了一条带有加速度计判定时间戳的「已倾倒」信息,记录时间为 9:27。这条信息在网络黑洞里压了将近一个小时,由于过期了 58 分钟,直接超出了自动化脚本设定的 30 分钟容忍上限,导致那条「垃圾刚清空」的通知最终被扣发。

同一时间段内,室内锚点的 MQTT 连接一切正常,院子里其他静止的垃圾桶也在定时上报距离。那条标签在收集点为何收不到信号,至今也没有定论。边缘节点的读数哪怕精确到毫米,只要中间的数据链路断裂,整个业务流程依然会瞬间崩盘。

走测距离数据 图:户外走测的距离曲线,下方是信号与距离离散度的诊断数据。来源:Simon Green 的项目记录

接受离线常态,用预设状态对抗失踪

面对不可预测的射频死角,开发者放弃了用更多基站去填补覆盖盲区的想法,直接在软件判定逻辑上动刀。原本的设计里,长时间收不到数据的 Out 状态会降级变成 Unknown,这带来的是状态机的混乱。

新版本改变了对失踪的容忍度。只要系统观察到一次实质性的离开动作,就会把垃圾桶的状态锁死在「预设离开」(presumed Out)。哪怕期间经历了长达几个小时的断开连接,甚至 Home Assistant 服务器遭遇重启,这个离开状态也会一直保留在数据库里。

设备在线率不再与业务状态强行绑定。接收健康度被单独剥离出来展示,让离线回归离线。要让垃圾桶回到 Home 状态,唯一的条件是必须在 10 米边界内产生一次真实的新读数。与此同时,锚点本身通过 MQTT 独立上报数据,Home Assistant 自动为每个标签建立虚拟设备。没有额外的中心化云服务,就算 Home Assistant 突然宕机,底层的无线电机制依然能在锚点和标签间继续测距。

放弃维持永不掉线的幻觉,把断网当作现实常态写入核心逻辑,这套家庭物联网系统才算长出了真正的韧性。至于剩下的那些问题——每个垃圾桶存放点与收集点之间的具体信号覆盖、历经风雨的耐候性、电池在几周后的实际衰减情况,以及给猫戴上标签做四锚点定位的尝试,都得交给下一个周期的工程迭代去寻找答案。

参考链接:

  • Simon Green 的项目记录