我想让我的妻子过圣诞节感到惊讶。她是个红发女郎,是哈利·波特的粉丝,也是一位母亲。所有这些启发了我去创造Weasley手表。我在2月份提出了这个想法,所以我有10个月的时间来开发和创建该项目。
对于不熟悉哈利·波特和韦斯莱家族的人们,我将解释说,韦斯莱巫师家族有一个神奇的时钟,它不显示时间,但是显示家庭成员的位置,每个成员都有自己的箭头。这是《哈利·波特与火焰杯》的摘录(J.罗琳,2000年):
, . . , , – - . , . , , . «», «», «», « », «», «», «»; , «12», « ». «», , , «».
«, !» – , . , «» « », «» , , .
经过一些研究工作,魔术钟才变成了真正的钟。我有很多编程经验,但是直到最近我才开始编写可在物理世界中移动某些东西的代码。 2018年,我开始从FIRST运营当地的FRC机器人俱乐部,并了解了电机和编码器领域。
更新Weasley手表上的数据的流程图:
智能手机上的用户正在运行Life360应用->该
应用跟踪用户的位置和速度->
HA跟踪用户并计算手表的状态。通过MQTT协议将更新发送到Raspberry Pi-> Raspberry Pi上
正在运行一个特殊的weasleyclockd进程,该进程监视MQTT流并控制时钟伺服器->
任何足够先进的IoT集成都无法与魔术区
分开,我将带有时钟的项目分为几个可以使用的子项目,并从跟踪位置开始。最初,我使用Apple的“查找我的手机”移动应用程序,因为我的直系亲属都使用iPhone。但是后来我改用Life360,因为事实证明它们的API对第三方更友好,并且允许我添加与我们一起生活并使用Android手机的妻子的亲戚。甚至在开始构建和编程之前,我必须说服所有人安装并使用Life360。幸运的是,每个人都同意。我的妻子出于安全原因这样做,从没听说过我的秘密计划,让圣诞节变得复杂。
下一个挑战是创建多只手的手表。我天真地以为存在这样的东西,而我只需要购买类似的东西,然后在里面塞满我自己的电动机控制器即可。我最终从业余爱好商店使用了同心黄铜管。我用ServoCity.com的夹具将齿轮连接到管道上。
为了转动箭头,我决定使用伺服绞盘,并可能要多转。我从Adafruit购买并焊接了16通道Raspberry Pi Servo HAT扩展板,并开始制作原型。在那一刻左右,当我意识到这一切都将起作用时,我激动不已。
然后,我需要一个程序,将原始位置数据转换为Weasley时钟的特定状态。我决定使Home Assistant自动化系统成为Life360的位置数据与手表状态计数之间的中介。这使整个系统变得复杂,但让我将Life360集成的负担(以及将来可能的API更改)转移到Home Assistant的肩膀上。跟踪人们特定的WiFi热点,使我可以更准确地查明他们在房屋中的位置。例如,当某人的电话连接到街道路由器时,系统就会知道该人在“花园”中。
家庭助理小组
编写了Home Assistant的规则后,我得到了一个控制面板,其中列出了Weasley时钟的所有状态。现在,我只需要使用这些数据来移动时钟。
家庭助理是一个开源的家庭自动化项目,重点是本地存储和管理。这与大多数需要互联网连接并将您的数据存储在云中的物联网自动化系统形成对比。
鉴于已经在Home Assistant本身上计算了时钟状态,并且Raspberry Pi和伺服控制器位于时钟中,因此我需要弄清楚如何将数据从Home Assistant传输到Weasley时钟。我选择了MQTT协议广泛用于物联网,并在Home Assistant中得到良好支持。我向Home Assistant添加了自动化,以便在手表状态发生变化时发送MQTT消息。在侦听器端,我编写了一个Python守护程序weasleyclockd,它侦听MQTT事件流并相应地移动箭头。
我在表盘上添加了一些信息,以便有更多数据,而不仅仅是“在家”或“丢失”。在``丢失''和``途中''区域中,箭头从指示值的位置与人离房屋的距离成正比。您可以一眼就知道一个人是在附近,还是在最近的商店里,还是在一百公里之外。
为了更易于阅读,将箭头错开以避免在“房屋”等区域拥挤。房屋部门分为两部分-主房屋和第二栋建筑,即车间。
在项目中,表盘的图形占据了重要部分。我找到了Minalima的漂亮的Weasley时钟海报。作者为哈利·波特电影绘制了许多官方图纸。
在制作这款手表时,我试图想象他们的表壳应该是什么。我意识到最好重用古董钟。或者,您也可以自己提出理由,但是我没有做橱柜匠的经验。从原则上讲,这是可能的,但我知道我第一份工作的结果并不适合我。我在华盛顿州斯诺霍米什(Snohomish)的当地古董店里看到的座钟太小,无法容纳钟表机构和表盘。然后运气对我微笑。
我和我的妻子开车去惠德比岛(Whidbey Island),然后走进兰利(Langley)的Good Cheer旧货店。他们出售了一个祖父钟,乍一看,它的大小适合机械装置和表盘。但是,我根本不准备购买它们。我没有表盘和机芯的尺寸。我的妻子和我在一起,这是给他惊喜的目的。因此,我只记得这一刻,并决定绝对需要
在Home上购买带有所有测量值的时钟,我开始梳理eBay以寻找祖父时钟。这不是一件容易的事。工作时间很昂贵。没有人想要发送它们。当我找到合适的手表后,发现它们是通过佛罗里达的自取货出售的。
三个月后,我和妻子决定全家再次去惠德比岛。我们再次在Langley用餐,然后我迅速冲到那家商店。祖父钟还在!他们甚至打折至165美元。如此幸运的巧合是不容忽视的,所以我问我的妻子不要问问题,因为这全是惊喜。我买了一块手表,然后把它装进了本已塞满本田奥德赛的面包车中。现在她已经了解了一些计划。
事实证明,与表壳相比,要弄清楚如何制作指针要困难得多。最初,我想3D打印它们或将它们切成黄铜。我很幸运能在家里有一对自己的专家。在可打印道具上看到令人惊叹的打印箭头,我决定使用3D打印。我们的儿子Alex刚完成了他的高中高级CAD课程,并以优异的成绩通过了他的Solidworks认证考试。我用箭头把它装满了,结果很棒。我的岳父罗恩(Ron)负责3D打印。他与我们的机器人团队的3D打印机合作,并担任我们在该领域的本地专家。为了完成箭头,我用金属漆画了它们,并加了黑色以作对比。
白天的家庭活动
离家距离
我真的很想炫耀这款手表的功能,但是在自我隔离的过程中,没有人离家不远。为了解决此问题,我编写了一个程序,该程序发送记录的MQTT消息序列。我可以模拟事件并使钟针转动,就像人们来回开车一样。
完成的时钟
放在厨房里
最后,我设法将整个项目保密。但是我没有和他在一起过圣诞节。因此,在假期期间,我必须演示处于非工作状态的静态时钟。我设法带来外在的磨光,我的妻子感到惊讶和高兴。
另外两个月用于完成最后的工作-在3D打印机上打印组件,安装机械装置,打印和绘制箭头以及调整软件。
该项目似乎已经完成,但是我想做更多改进。我计划用六只或七只手组装一个时钟,并自动敲打时钟。
用亚瑟·克拉克(Arthur Clarke)的话来解释:“任何足够先进的IoT集成都无法与魔术区分开。”
在第二代Weasley手表中,我想更改以下内容:
- 设计并打印直接与黄铜棒固定的齿轮。
- 使用带编码器的电机。
- 从黄铜上切下箭头,为更多箭头腾出空间。
链接到我的开发日志,照片和程序:
- Github上的Weasley Clock项目
- weasleyclockd,一个控制程序。
- 韦斯莱撞钟项目。
- 相册组装。
- 生成日志。
- 关于HackerNews的讨论。