为了尽量减少通勤,我搬进了没有温度控制的公寓。考虑到芝加哥市中心租金合理的公寓有多普遍,我对自己想,如果其他人可以没有它,我肯定也可以。好吧,我部分正确,虽然宜居但不舒服。这就是我如何构建自己的智能恒温器的故事。
该公寓没有配备带有所有带字母和彩色接线的传统恒温控制单元。
取而代之的是,控制单元非常简单,带有一个开/关开关和另一个三个风扇速度开关。温度刻度盘不起作用,建筑物控制加热或冷却时间。即使它是根据外界温度变化的,但为简单起见,我们将假定从加热器出来的空气的温度是恒定的。
鉴于建筑物的历史和我要租的建筑物,我选择不安装带继电器的控制器,也不选择使用Raspberry Pi编程。我必须建立一个以与我相同的方式与控制单元进行交互的系统。
拨动通断开关既需要扭矩又需要精度,因此我选择了一对SG90伺服电机。
我开始寻找使用DHT22的温度传感器,强烈建议不要使用它。传感器的设计方式使其容易受热,从而破坏了其准确性。我最终选择了DS18B20传感器,因为它与Pi的接口更好,电线更长,更准确。您可以在这里学到的经验教训做研究,而不必先观看您观看的第一个YouTube教程。
我知道我想用乐高积木制作框架。与3D打印不同,乐高积木可以快速免费更换。同时,乐高积木被设计成在特定的尺寸和增量上相互配合。这使得围绕Raspberry Pi和伺服电机尺寸的工作更具挑战性。此外,我受制于有限的作品数量。
该构建进行了多次迭代,最终使它变得更加实用和坚固。数量有限的作品促使我在建筑技术上发挥创造力。正如您在上图和此专辑中所看到的,我依靠车轴使我可以自由地将电动机滑动到其臂垂直于开关的位置。无需太过Lego技术,就可以使用半螺柱,半轴和半销子/销将电动机从各个方向紧密地固定在适当的位置。
在开始之前,您可以在这里找到项目的整个代码库,可以随时对其进行检出并留下任何反馈。
我首先编写了Python脚本来控制电机和探测温度传感器。考虑到有关这些Raspberry Pi零件的大量在线教程,编写这些脚本相对容易。
一旦我弄清了恒温器逻辑的细节,就编写了一个Spring Boot应用程序,该程序公开了恒温器的API端点并包含其逻辑,这很简单,只是调用了python脚本。尽管年代久远,本文还是很好地描述了为什么用Java调用另一个进程会带来如此复杂的原因。 Google Home集成后来被添加到同一应用程序中,集成的详细信息将在后面的部分中概述。
编写恒温器逻辑使我可以看到一小部分庞大的设计决策,并在做出决策时需要权衡取舍。
逻辑上的简单愚蠢方法如下:保持公寓温度尽可能接近我们设定的温度。这是不现实的,因为它将经常频繁地打开和关闭系统,因此为什么系统需要公差窗口。引入容差窗口将使温度偏离我们设定的华氏温度一到两个温度。如果操作正确,公差窗口将最大程度地减少打开和关闭循环的次数,从而使系统保持打开或关闭的时间更长,而这一切都不会影响我们的舒适度。
该公差窗口可以通过两种方式引入系统。首先,我可以将检测到的温度增加一到两个度。或者,我可以延长系统轮询温度传感器的时间。一起做也是可能的。
了解了自己以及我将如何尝试解决该问题后,我决定放弃在温度读数中添加一个常量。至于最佳轮询时间,由于我们绝缘不良的公寓对外界温度的敏感程度,其时间差异很大。为了使事情变得更加复杂,在中午和日落之间,太阳为我们加热了这个地方。因此,经过几天的反复试验,最终将轮询时间设置为20分钟似乎是一个很好的中间立场。
在讨论约束时,我忽略了另外两个影响系统行为的因素。风扇速度和流经管道的流体的温度。两者齐头并进,以指定系统的有效性。流体温度超出我们的控制范围,因为建筑物会根据外部温度对其进行调整。另一方面,风扇具有我们可以控制的三个可调速度。不用过多担心管道的温度,我发现将风扇速度设置为较高会导致整个公寓内更好的热量分配,因为系统正在加热更大的空气量。我假设相反的情况在较小的空间内会更好。
为了将温度传感器定位在我认为是理想的高度,我在室内温度计的帮助下进行了一些实验。许多天后,我意识到传感器的位置无关紧要,这取决于我们对温度的感知。无论恒温器的读数如何,我们的看法都会得到采纳。换句话说,不是将温度始终设置为70,而是将温度设置为71甚至72度即可达到相同的结果。
事实证明,此步骤比预期的要复杂。下图显示了从用户到Google Assistant以及最终到智能设备的信息:
Google的Smart Home文档概述了以下集成:1)设置OAuth 2.0以进行授权和帐户链接。 2)在操作控制台中创建智能家居操作。 3)添加身份验证。
在Google领域中的动作等同于Amazon的Alexa技能。智能家居是处理智能设备集成的一种操作。
在执行这些步骤时,我很失望地发现,无论我是否打算发布智能家居操作,我都必须完成所有步骤。我找不到一种方法可以跳过OAuth和身份验证步骤,以便为自己的操作创建快速简便的测试。我不了解做出此决定的原因,因为到目前为止,在完成所有设置后,除非我明确邀请他们,否则只有我可以参与其中。
此外,执行步骤1和步骤3意味着计划进行Smart Home动作试验的任何人都必须拥有可公开访问的URL。我使用ngrok克服了这一问题,ngrok是一种很棒的工具,可将流量从公共URL传输到本地计算机。由于ngrok的免费版本在每次重新启动后都会使用一个新的随机URL,因此我决定为其基本计划付费,这使我能够在其域上保留URL。我建议您这样做,因为现在不必担心重新启动后更改URL设置。
最后,设置Google Cloud将调用的操作执行端点是将文档,示例和反向工程结合在一起。
像其他任何项目一样,我在进行这项工作时也经历了很多挫折,但是我对最终产品及其效果如何感到非常满意。在我退出之前,我想大声疾呼Pi-hole项目,它们可以帮助您设置DNS黑洞以实现网络范围内的广告拦截,如果您使用Raspberry Pi或任何兼容的硬件,强烈建议进行设置。