电子说
步骤1:步骤0 - 先决条件
您知道如何使用Arduino IDE
您已经安装了ESP8266主板管理器
因此,您可以在NodeMCU上传一些代码并运行它
您已经安装了以下库
U8g2lib - OLED显示器
DHTesp - DHT for ESP
ESPAsyncTCP - 管理异步HTTP请求,从github安装
ArduinoJson - 处理来自HTTP请求的JSON响应
ESP8266WiFi - 包含在ESP8266板上
Ticker-包含在ESP8266板中
您有一些设备或像智能家居盒这样的软件将允许监控和与此恒温器交互(在我的情况下,我拥有一个eedomus盒子,但你可以很容易地调整代码以满足你的需要)。
你知道如何焊接
第2步:第1步 - 物料清单
NodeMCU - 2€
OLED屏幕128x32 -1.50 €
DHT-22 - 2.50€
继电器3.3V - 1.40€
2个按钮 - 2x0.02€
2电阻1kΩ至10kΩ(我使用220Ω)2x0.01€
原型板 - 0.16€
总计= 7.62€
所有价格均为基于全球速卖通免费送货。
此外我们还需要焊接材料:
烙铁
焊线 - 我用0.8mm
焊剂 - 我用它来焊接NodeMCU针
Kynar跳线或其他电缆连接原型板上的元件
钢丝球 - 清洁铁
li》
脱焊芯 - 用于在搞砸时去除焊接
步骤3:步骤3 - 布线
图片显示了布线的详细信息。
您可以修改引脚以连接组件。但请注意,继电器不能连接到NodeMCU的任何引脚。将继电器连接到某个引脚不允许NodeMCU启动。
NodeMCU由USB电缆(5V)供电,该电缆连接NodeMCU的Vin引脚,该引脚连接到板载电源稳压器。除非你想把它吹干,否则不要用5V为NodeMCU的另一个引脚供电。
步骤4:步骤4 - 程序原理
程序的原理非常简单,并在第一张图片上绘制。
我们有两个变量可以容纳要求的温度和测量的温度
定期我们读取测量的温度并将其显示在显示屏上
我们还从智能家居盒(eedomus)中读取了所需的温度
根据这两个温度,我们计算是否应加热
此外,用户可以使用按钮调整所需温度
此外,我们需要:
管理按钮调整的请求温度与通过读取eedomus调整的请求温度之间的冲突
确保我们不经常调整加热。加热器可能不会升值,并且在相当长的时间内加热时它会更有效地加热。根据经验,我们决定不比每15分钟更频繁地调整加热
需要从按钮去除读数。请参阅arduino示例:数字→去抖动
平滑读取测量温度:原始读数交替,间隙超过1°C,使单个读数难以依赖
计算滞后以保持温度尽可能稳定。房屋的惯性意味着在我们切断加热后不久温度会继续升高。另一方面,即使我们开始加热,温度也会继续下降。因此,我们必须预测切割加热或开始加热的时间点。这将在第二张图片中显示。
步骤5:步骤5 - Arduino代码
我刚刚投入生产我的恒温器。我当前的代码很乱,包含很多用于调试的消息。我计划很快重写一个干净的程序。我会尽快更新并在我的恒温器上进行验证。
Ticker是经常重复的程序
我们使用许多全局变量,因为我们无法将参数传递给自动收报机程序
AsyncClient允许处理异步HTTP请求
我们附加中断程序来处理按下按钮
所有代码都是事件驱动的,Arduino循环为空
displayTemp - 管理2位数请求温度的显示和2位数加上小数点后1位数的测量温度。加热时显示器向上移动,不加热时向下移动,当两个温度相等时(在这种情况下不加热)上下弹跳
getMeasuredTemp - 我们每分钟读取温度并计算每个温度的平均值5读数。然后我们保持5个平均读数的历史来计算曲线的矢量,其允许估计下一个读数。
getRequestedTemp - 读取智能家居盒中定义的值。
incTemp/decTemp - 按下按钮时由中断调用的过程
setHeating - 打开/关闭继电器以监控加热器。在我们的例子中,继电器在没有加热时被置为高电平而在低温时被加热。也许这很奇怪,但我们做出了这个选择,因为当继电器关闭(设置为HIGH)时,有一个红色LED亮起。
步骤6:步骤6 - 附件
最后我打印了一个小外壳,以便拿着我的恒温器。
全部0条评论
快来发表一下你的评论吧 !