赠书 | 手把手教你自己动手打造一个智能恒温器

作者 | Yazeed Sabri

翻译 | 火火酱,责编 | 晋兆雨

出品 | AI科技大本营

头图 | 付费下载于视觉中国

*文末有赠书福利

为了能住得离公司近一点,我就搬进了一套没有温控系统的公寓。因为在芝加哥市区,这个价位的公寓大多都是没有温控系统的,所以我心想,既然大家都能住的话,那我一定也可以!呃... ...现在我承认,确实能住,但真的很不舒服。那么,下面就来讲一下我如何打造自己的智能恒温器的吧。

在开始详细讲解之前,大家可以看一下最终产品的视频:

(视频链接地址:https://youtu.be/3-etgQS_Go0)

限制条件

这套公寓并没有配备传统的温控器控制盘(带有字母和彩色的电线那种)。

它原本的控制装置相当简单,只有一个开关和三档风速键。温度控制钮完全不起作用,加热和制冷时间取决于整栋楼的统一控制。其实其温度会根据室外的环境温度而变化,但为了简单起见,我们先假设其出风温度是恒定的。

由于这栋楼本身比较老了,而且房间又是我租的,所以不能装带继电器的控制器,也不准备重新用Raspberry Pi编程做。因此,我需要打造一个能够和现有控制器进行交互的系统

零件

因为我需要把它改造成一个智能恒温器,所以最后还是选择用Raspberry Pi。

由于开关对扭矩和精度都有要求,所以我选用了一对SG90伺服电机。

伺服电机能够实现180度范围内的精确运转

一开始,我使用的是DHT22温度传感器,但并不好用。该传感器的设计方式导致其容易发热,进而影响精度。最终,我选择了DS18B20传感器,它与Pi的接合更匹配、线更长、精度也更高。这个过程让我意识到,要从自身情况出发进行研究,而不是去复制粘贴YouTube上推送的第一个教程。

我从一开始就想要用乐高积木来搭建框架。与3D打印不同,用乐高搭建的框架可以随时进行修改,而且成本可以忽略不计。但是,乐高本身设计的尺寸和高度增量是固定不变的。因此,要想将其搭建得与Raspberry Pi及伺服电机完美契合并不容易。况且,我手边的乐高积木数量也有限。

乐高设计

        我尝试了很多个版本,反复搭了很多次才最终坚固实用性和坚固性(美观只能排在最后面咯)。有限的积木数促使我对建筑技术进行创新。正如你在上方图片和下方相册链接中看到的,我借助轴实现了电机的自由滑动,使其机臂能够垂直于开关。在不过于依赖乐高搭建方式的基础上,电动机从各个方向都用半螺柱、轴和半钉牢牢地固定住了。

(相册链接地址:https://imgur.com/a/Tp7i25f)

系统设计

             

Spring Boot应用程序和Python脚本都在Raspberry Pi上运行

在故事开始之前,大家可以在以下链接中找到项目的完整代码库,欢迎查看并留下你的想法。

(链接地址:https://github.com/ysabri/smartStat)

首先,我编写了Python脚本来控制电机并探测温度传感器。因为网上有很多关于这些Raspberry Pi部件的教程,所以其实编写脚本并不算难。

在理顺了恒温器内在逻辑后,我编写一个Spring Boot应用程序公开恒温器的API端点并存储它的逻辑,除了调用python脚本之外,其他的并不麻烦。下方链接中的文章虽然有点老了,但却很好地介绍了为什么用Java调用另一个进程会如此复杂。此后,我又将Google Home集成添加到了同一应用程序中,下文有对相关集成细节的介绍。

(文章链接:https://www.javaworld.com/article/2071275/when-runtime-exec---won-t.html)

       自上而下依次是:Google Home请求履行端点、恒温器端点和Google Home身份验证端点。

恒温器逻辑

编写恒温器逻辑的过程让我受益匪浅,我窥探到了制作恒温器所涉及的大量设计决策和交易中的冰山一角。

用到的方法有点笨,但却十分简单:让公寓温度尽可能地接近我们所设定的温度。但这是不现实的,因为这会导致系统频繁地开关,所以系统需要一个容差窗口,允许温度在设定值上下有一或二华氏度的波动。如果操作得当的话,这将最大限度地减少开关机的次数,从而在不影响舒适度的前提下,尽可能延长系统的开机或关机时间。

在系统中引入该容差窗口的方法有两种:其一,我可以直接在检测温度上增加一到两度。或者,我也可以延长系统对温度传感器的轮询时间。当然,也可以两种方法双管齐下。

就我对自己的了解而言,我肯定会放弃第一种方法。那么要如何找到最佳的轮询时间呢?由于我家这个公寓的隔热性能很差,对外界的温度非常敏感,因此其所需的时间间隔变化也很大。而更复杂的是,在从正午到日落的这段时间中,光线十分充足,阳光往往会不遗余力地撒向这间公寓。因此,在经过几天的反复试验后,我最终将时间设置为20分钟——这似乎是一个不错的中间点。

该日志片段显示了每20分钟的温度波动情况

对了,在谈论限制条件时,我忽略了两个会对系统行为产生影响的因素:风速和流经管道的流体温度。这两个因素协同决定了系统的有效性。流体温度是我们无法控制的,因为这是由建筑本身根据外部温度环境来进行调整的。而三档可调风速是我们可以控制的。在不考虑管道温度的情况下,我发现将风速调高会使整个公寓的热量分布更均匀,因为系统加热的空气量更大。以此便可以推断,较低的风速或许会更适合较小的空间。

“理想”的温度传感器位置要远离通风口和阳光,并且处于墙体的中下部

为了将温度传感器放置在我认为理想的高度,我用室内温度计做了一些实验。一段时间后,我发现,传感器的位置并不重要,重要的是人体对温度的感知。相对于我们的体感而言,温控器所显示的度数并不重要。换句话说,与其要求温度设置时刻保持在70华氏度(约为21摄氏度),我们其实可以将温度设置为71华氏度甚至72华氏度,效果是一样的。

Google Home 集成

这一步比预期的要复杂。下图展示了信息从用户到谷歌助手(Google Assistant),最终到智能设备的全过程:

             

图片来源:智能家居(Smart Home)集成文档

谷歌的智能家居文档对其集成步骤概述如下:

1) 设置OAuth 2.0,进行授权和账户链接。

2) 在操作控制台(Action Console)中创建一个智能家居动作(action)。

3) 添加认证。

在谷歌,动作(action)就相当于亚马逊的Alexa技能。

在进行这些步骤的过程中,我失望地发现,无论我是否打算发布自己的智能家居动作,都必须完成所有的步骤。不能跳过OAuth和认证步骤,直接创建简单快速的测试。我不清楚其背后的原因是什么,但是到目前为止,在所有设置就绪的情况下,除了我之外,还没有人能够访问我的动作,除非我进行明确的邀请。

此外,执行步骤1和3意味着任何计划试验智能家居动作的人都必须拥有一个可公开访问的URL。我用ngrok解决了这个问题,这是一个非常棒的工具,可以将流量从公共URL传输到你的本地机器。因为ngrok的免费版在每次重启后都会使用新的随机URL,所以我买了它的基础付费版本,以便在其域上保留URL。如果需要的话,建议大家可以购买,因为这样一来就不必在重启后更改URL设置了。

最后,设置Google Cloud调用的动作履行端点要结合查看文档、示例和逆向工程。

写在最后

和其他项目一样,我在此次构建过程中也经历了一些起伏,但我对最终产品及其运行效果非常满意。

*本文仅代表作者个人观点,不代表AI科技大本营任何立场。

原文链接:

https://medium.com/swlh/how-i-built-a-smart-thermostat-8bd9510cf9de

本文由AI科技大本营翻译,转载请注明出处

#欢迎留言在评论区和我们讨论#

对于本文你有什么看法?

欢迎在评论区留言

我们将在 12 月 31 日精选出 3 条优质留言

赠送《Python人工智能开发从入门到精通》纸质书籍一本哦


更多精彩推荐
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值