65.9K
CodeProject 正在变化。 阅读更多。
Home

加热箱 - 使用 Arduino Nano 进行温度控制

starIconstarIconstarIconstarIconstarIcon

5.00/5 (10投票s)

2018年8月8日

CPOL

7分钟阅读

viewsIcon

29414

downloadIcon

493

本文介绍了我的一项实验:一个用于纸板箱的温度控制系统。

Article presentation image

图 1 - 温度控制程序正在运行。背景是相当拥挤的纸板箱

引言

本文介绍了我的一项实验:一个用于纸板箱的温度控制系统。

该“系统”的*特点*

  • 四个独立的温度测量点
  • 一个两级加热器
  • 一个冷却风扇
  • Arduino Nano

背景

要完全理解该实验,只需要基础的数学、物理和电子知识。

另一方面,*构建*这个小东西是很有趣的;如果你真的(你愿意吗?)想自己构建一个类似的系统,那么你必须动手做一些事情:剪电线、焊接等等。

想法

这个实验背后的想法是利用 Arduino Nano 的模拟和数字功能来*监控*和*改变(增加)*适宜环境中的温度。

Functional description of the system

图 2 - 系统的简单功能描述

具体来说,我们的 Nano 负责上面图片中所示的功能模块

  • 温度传感器,用于监测封闭系统和外部环境的温度。
  • 一个加热器。它可以开启以产生一些热量。
  • 一个风扇,用于散发产生的热量,从而加速热化过程。

它是如何工作的(或者不工作)

“适宜的环境”

The suitable environment

图 3 - 实验“适宜的环境”(即,CodeProject 提供的(非常感谢!)工具包纸板箱外壳)

一个合适的环境是温度控制的基本前提:我们必须向系统中注入热量(即能量)来提高其温度。

大型系统需要大量的能量。任意大的系统需要任意多的能量。简单来说,我只能负担加热图 2 所示的纸板箱。这个箱子还有一个好处,就是提供了一些隔热效果。

温度监测

监测是通过四个极好的(也就是说*便宜*的)*模拟*温度传感器实现的,即 Microchip MCP9700A 传感器。

The analog tempearture sensor MCP9700A

图 4 - 模拟温度传感器 MCP9700A,显示了 VOUT(T)。

虽然完整的传感器数据手册可在此处获取,但足以说明 MCP9700 输出的电压与测量的温度成正比,遵循以下公式

vout(t) = (0.5 + 0.010 t/°C) V

例如,在30 °C (86 °F) 时,它输出0.8 V

传感器被策略性地放置并相应命名

名称 职位
NEAR 在箱子内部的侧面,靠近加热器,空气侧
FAR 在箱子内部的侧面,远离加热器,面向气流
HEATER 在箱子地板上(同样在内部),靠近加热器
EXTERNAL 在箱子外部,用于监测环境温度

一个0.33 µF 的陶瓷电容器连接每个传感器的VOUTGND

加热

热量是由流过三个1 Ω5 W)水泥功率电阻的大电流的焦耳效应产生的。

The heater: three cemeent resistors

图 5 - 第一代加热器,带有 4 个水泥电阻。最终在最终原型中舍弃了一个电阻(请参阅页面底部的 Griff 的评论)。

Arduino 既不能提供也不能处理如此大的电流,因此需要外部电源和继电器板。

我使用了我的实验室直流电源,能够提供高达3 A 的电流,以及另一块“极好的”硬件,即图 1 中您已经欣赏过的廉价 8 路继电器板。

两级加热是通过使用相同的电源电压5 V,交替地与 3 个电阻串联(第一级),或与两个电阻串联(第二级)来实现的。

第一级提供总功率...

P<sub>1 </sub>= V*V/R = 5*5/3 W ≅ 8.3 W

...而第二级提供

P<sub>2</sub>= 5*5/2 = 12.5 W

值得注意的是,在第二级配置中,功率超过了电阻的额定功率。

散发热量

一个5 V 的吸力风扇,是从我的一个 Raspberry Pi 外壳上借来的,用于散发热量,气流方向如图所示(图 2)。

The suction fan

图 6 - 5V 吸力风扇

与加热器一样,风扇需要相当大的电流(约200 mA),Arduino 无法直接提供。再次,继电器板派上了用场。

整合所有内容

下图显示了完整的电气电路。

The electric circuit schematic

图 7 - 电路原理图

注意两个电源

  • 外部大电流电源已明确标记(另请参阅原理图片段,图 8、9),它为继电器板、电阻、风扇供电。
  • 低电流电源来自 Arduino USB 端口,为 Nano 和模拟电路供电。

Fragment of the schematic showing analog connections

图 8 - 显示模拟连接的原理图片段

上图显示了模拟传感器的连接:VDD 来自 Arduino + 5 V 引脚,VOUT 连接到 Arduino 板的 A0, A1, A2, A3 模拟引脚,GND 与电路的高功率数字部分共用,

另一方面,下图 9 显示了两级加热器的工作原理。

继电器 1 是加热器ON/OFF:当ON 时,它为继电器 2 提供5 V

继电器 2 反过来将电压分流到 {R1, R2, R3} 串联(OFF 位置)或 {R2, R3} 串联(ON 位置)。

Fragment of the schematic showing the connections of the realys with the resistors

图 9 - 显示继电器与电阻连接的原理图片段

继电器 1、2 的状态对加热器的净效应总结如下表

继电器 1 继电器 2 对加热器的影响
关闭
开启 关闭
开启 开启,正常功率(8.3 W
开启 开启 开启,高功率(12.5 W

相比之下,风扇独立工作,由继电器 3 控制。

代码

与硬件组装的努力相比,代码真的很简单,Arduino <ocde>IDE 让它变得更简单。

Setup 函数中,串行端口被初始化,控制继电器的数字引脚配置为OUTPUT,并设置为HIGH 逻辑电平,以开始一个干净的*“什么都不做”*状态(因为驱动继电器的逻辑是反向的:Arduino 引脚LOW 会驱动继电器ON)。

在永无止境的Loop 函数中(欢迎来到微控制器世界!),从串行端口读取可用的字符,然后使用一个简单的switch 语句识别执行的基本单字符命令

  • '0' - 切换继电器 1 的状态
  • '1' - 切换继电器 2 的状态
  • '2' - 切换继电器 3 的状态
  • 'v' - 切换详细报告模式

然后读取传感器值并进行记忆以进行报告。

使用 Arduino 读取模拟值非常简单,只需调用analogRead,这要归功于底层库,就可以完成工作。将 ADC 原始测量值转换为温度值也相当简单,下面的代码片段计算温度的整数部分和小数部分(十分之度),而无需使用不必要的浮点变量。

  int millivolt = map(adc, 0, 1023, 0, 5000);
  int degree = (millivolt - 500) / 10;
  int fracdegree = (millivolt - 500) - (degree * 10);

最后,报告测量值以及继电器的当前状态。有两种报告模式:*默认*和*详细*。

两种模式报告相同独立的*信息*,但*详细*模式适合直接人工解释,而*默认模式*是原始的类 CSV 格式,旨在自动数据采集。

下面从串行终端复制的文本显示了两种模式:第 22 次迭代以*详细*模式报告,而第 23..32 次迭代以*默认*模式报告。

...
ITERATION 22
HEATER is OFF
HEATMAX is OFF
FAN is OFF
NEAR sensor value is adc = 168, V = 821 mV, temp = 32.1 Celsius
FAR sensor value is adc = 170, V = 830 mV, temp = 33.0 Celsius
HEATHER sensor value is adc = 166, V = 811 mV, temp = 31.1 Celsius
EXTERNAL sensor value is adc = 168, V = 821 mV, temp = 32.1 Celsius
************************************************
23;0;0;0;167;169;167;168
24;0;0;0;167;171;168;168
25;0;0;0;166;169;167;168
26;0;0;0;167;169;167;167
27;0;0;0;168;168;167;168
28;0;0;0;167;168;167;170
29;0;0;0;167;169;168;170
30;0;0;0;167;169;166;169
31;0;0;0;169;169;169;169
32;0;0;0;167;169;167;169
...

首次测试运行

此测试于 8 月 6 日晚上进行。

测试计划是

步骤 分钟数 加热器状态 风扇状态
1 10
2 10 标准开启
3 10 高功率开启
4 30 标准开启 开启
5 30 开启

即:缓慢开始,全部关闭,然后无风扇加热,然后*疯狂加热*同时保持风扇关闭。

最终启动风扇,先进行标准加热,然后不进行加热。

测试结果如下图所示

First test run chart

图 10 - 首次测试运行图

显然,加热器工作正常(比预期效果更好:它变得非常热)。高功率加热在图表中被高估了,可能是因为*加热器传感器*靠近一个“过载”的电阻。风扇的效果相当显著。NEAR 和 FAR 传感器在箱子内部温度值上基本一致,不出所料,该温度远高于外部环境温度。

关注点

  • 对于软件人员来说,焊接、剪电线、组装是非常辛苦的工作。另一方面,一个可用的 DIY 硬件能带来一些满足感和乐趣。
  • 使用 Arduino 构建原型非常快速且令人愉快。尽管如此,一个快速的原型可能不是最先进的技术。在我看来,温度监测的准确性可以(也应该)得到提高。
  • 实际上,仅仅一次测试运行是对验证的一种糟糕的方式。但是,正如*Lou Reed*曾经唱过的:《没有时间》
  • 更多的乐趣还在等待:现在我们有了数据,现在我们可以用 PID 或模糊逻辑实现*自动*温度控制。

历史

  • 2018 年 8 月 8 日 - 02:05:50 CET:首次发布
© . All rights reserved.