联网恒温器

老小孩
转载
发布时间: 2025-06-10 23:36:24 | 阅读数 0收藏数 0评论数 0
封面
准确监测家中温度绝对是节省能源开支的最佳方法之一。同时,您也希望在冬季拥有温暖的家。我当前的恒温器仅允许静态编程: 我可以定义白天温度(大约 19°/20°,不会太热)和夜间(或家里没人)温度(16°),对于每个工作日,我可以定义应用白天温度的时间范围和应用夜间温度的时间范围) 此外,我可以手
1

先决条件

  1. 你知道如何使用 Arduino IDE
  2. 您已安装 ESP8266 开发板管理器:http://arduino.esp8266.com/stable/package_esp8266com_index.json
  3. 因此,您可以在 NodeMCU 上上传一些代码并运行它
  4. 您已安装以下库
  5. U8g2lib——OLED显示屏
  6. DHTesp - 用于 ESP 的 DHT
  7. ESPAsyncTCP - 管理异步 HTTP 请求,从github安装
  8. ArduinoJson - 处理来自 HTTP 请求的 JSON 响应
  9. ESP8266WiFi - 包含在 ESP8266 开发板中
  10. Ticker-包含在 ESP8266 开发板中
  11. 您有一些设备或软件,例如智能家居盒,可以监控并与该恒温器交互(就我而言,我拥有一个 eedomus 盒,但您可以轻松调整代码以满足您的需求)
  12. 你知道如何焊接
2

物料清单

  1. NodeMCU - 2欧元
  2. OLED屏幕 128x32 -1.50欧元
  3. DHT-22 - 2.50欧元
  4. 继电器3.3V-1.40欧元
  5. 2个按钮 - 2x0.02欧元
  6. 2个电阻1kΩ至10kΩ(我用的是220Ω)2x0.01欧元
  7. 原型板 - 0.16欧元

总计 = 7.62欧元

所有价格均基于 AliExpress,并提供免费送货服务。

此外,我们还需要焊接材料:

  1. 烙铁
  2. 焊锡丝-我用的是0.8毫米
  3. 助焊剂——我用它来焊接 NodeMCU 引脚
  4. Kynar 跳线或其他电缆,用于连接原型板上的组件
  5. 钢丝球——清洁铁
  6. 除焊芯 - 可用于去除焊接时弄乱的东西
3

布线

图片显示了电缆的详细信息。

您可以修改引脚来连接组件。但请注意,继电器不能连接到 NodeMCU 的任何引脚。将继电器连接到某些引脚会导致 NodeMCU 无法启动。

NodeMCU 通过 USB 线 (5V) 供电,该线连接到 NodeMCU 的 Vin 引脚,Vin 引脚连接到板载电源调节器。请勿使用 5V 电源为 NodeMCU 的其他引脚供电,除非您想烧坏它。

4

计划原则

该程序的原理相当简单,在第一张图上画出来了。


  1. 我们有两个变量来保存请求的温度和测量的温度
  2. 我们定期读取测量的温度并将其显示在显示屏上
  3. 我们还从智能家居盒(eedomus)读取了请求的温度
  4. 根据这两个温度,我们计算是否应该加热
  5. 此外,用户还可以使用按钮来调节所需的温度


此外我们还需要:


  1. 管理通过按钮调整的请求温度与通过读取 eedomus 调整的请求温度之间的冲突
  2. 确保不要过于频繁地调节暖气。加热器可能无法正常工作,而且长时间加热会更高效。根据经验,我们决定每15分钟调节一次暖气。
  3. 需要对按钮读数进行去抖动。参见 Arduino 示例:数字量 → 去抖动
  4. 平滑测量温度的读数:原始读数交替出现超过 1°C 的差距,使得单次读数难以信赖
  5. 计算滞后效应,以尽可能保持温度稳定。房屋具有惯性,这意味着在切断供暖后不久,温度会继续上升。另一方面,即使开始供暖,温度也会继续下降。因此,我们必须预测何时切断供暖或何时开始供暖。这在第二张图中有所体现。


5

Arduino代码

我刚刚将我的恒温器投入生产。我当前的代码很乱,包含很多需要调试的消息。我计划很快重写一个干净的程序。一旦程序可用并在我的恒温器上验证通过,我会尽快更新。

  1. 股票行情是定期重复的程序
  2. 我们使用许多全局变量,因为我们无法将参数传递给股票行情程序
  3. AsyncClient 允许处理异步 HTTP 请求
  4. 我们附加中断程序来处理按钮的按下
  5. 所有代码都是事件驱动的,Arduino 循环是空的
  6. displayTemp - 管理请求温度(2 位数字)和测量温度(2 位数字加小数点后 1 位数字)的显示。加热时显示屏向上移动,不加热时显示屏向下移动,当两个温度相等(本例中为不加热)时显示屏上下跳动。
  7. getMeasuredTemp - 我们每分钟读取一次温度,并计算每 5 次读数的平均值。然后,我们保存 5 次平均读数的历史记录,以计算曲线向量,从而估算下一次读数。
  8. getRequestedTemp - 读取我们智能家居盒中定义的值。
  9. incTemp/decTemp - 按下按钮时通过中断调用的程序
  10. setHeating - 打开/关闭继电器以监控加热器。在我们的例子中,继电器在不加热时设置为高电平,加热时设置为低电平。这可能有点奇怪,但我们之所以选择这样做,是因为继电器闭合(设置为高电平)时,会亮起一个红色LED。
INO
恒温器.ino
34.84KB
6

外壳

最后我打印了一个小外壳来容纳我的恒温器。

您可以找到随附的 FreeCAD 和 stl 文件。

STL
Couvercle_01.stl
5.36KB
STL
Thermo_box_01.stl
26.64KB
FC...
Couvercle_01.FCStd
40.56KB
FC...
Thermo_box_01.FCStd
53.32KB
阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载