你有没有想过恒温控温器,汽车发动机,过滤器和3D打印机加热床等设备如何测量温度?这个项目向您展示如何测量!
在众多项目中,掌握温度是一个有用的数据。掌握温度有助于我们控制室温,防止发动机过热,保证3D打印机床足够热,使ABS等材料粘在其表面,并防止食物燃烧。
在这个项目中,我们专注于一种可以测量温度的传感器:热敏电阻。
与其他类型的电阻器相比,热敏电阻具备有更高的温度灵敏度。
使用Arduino,我们大家可以测量和处理热敏电阻的读数,然后将它们转换为更常见的温度单位。
项目背后的理论
通常,对于使用电阻器的应用,您希望避免在温度变化时电阻发生明显的变化。虽然这在真实的生活中并不是完全可能的,但你能做到这一点,只有很小的电阻变化与温度的大变化相对应。如果你不能这样做,电阻器真的会在电路中造成严重破坏。例如,随着环境和温度的变化,LED会变亮和变暗。
那么如果你真的希望LED的亮度是温度的函数,你会怎么做?那么,你需要一个热敏电阻。热敏电阻的电阻变化很大,温度变化很小。为了说明这个概念,请参见下面的图1,其中显示了热敏电阻的典型曲线:
热敏电阻可依据您购买的不同而轻松定制。如上所示,随着温度升高,电阻下降。这是负温度系数电阻器(NTC)的主要特性。
热敏电阻也可用作正温度系数(PTC)。PTC的工作方式是随着温度的升高,电阻增加。但一定要注意,PTC热敏电阻具备有某种临界点,并且可能会在某些温度下很大地影响电阻,使PTC热敏电阻更具挑战性。因此,大部分低成本温度测量使用NTC热敏电阻。
也就是说,假设我们将在本文的其余部分引用NTC型热敏电阻。
找到曲线拟合公式:四种方法
现在我们已介绍了热敏电阻的一般行为,下一个问题可能就是我们怎样用Arduino测量温度。上图中的曲线是非线性的,因此似乎不可能使用简单的线性方程。(实际上,我们大家可以计算出一个等式。本文稍后将详细的介绍。)
那么该怎么办?
在我们继续之前,尝试考虑如何使用Arduino或甚至只是没有微处理器组件的电路。
有几种方法能解决这样的一个问题。下面讨论四种选择。这远不是每种技术的详尽列表,但它涵盖了一些流行的方法。
方法一
一些制造商提供了整个图表,其绘制了温度和电阻的典型值的特定整数范围。
如果制造商不提供查找表,则需要由您测量每个点以生成数据。听起来像编程,头痛对吧?但是,这种方法确实有它的位置。例如,如果您手边的项目仅检查几个点或保持在一个小范围内,这可能是要走的路。例如,如果您只想测量值何时落在选定的温度范围内,并且LED指示灯亮起以指示每次发生的时间。
但是,在这个项目中,我们想要测量一个接近连续的范围并将其发送到串行监视器,这对我们来说这个方法是错误的。
方法二
另一种方法是通过将一个电阻器与热敏电阻并联来增加外部电路,从而“线性化”热敏电阻的响应。有些IC已经为你准备好了。
选择正确的值并确定如何明智的选择和线性化区域本身就是一篇文章。如果您的微处理器缺少浮点精度(例如PICAXE),方法二很适合,因为它简化了温度范围到线性响应,并且还使得设计没有微处理器的电路变得更容易。
对于这个项目,我们有一个微处理器,并将使用整个范围,所以这种方法再次对我们不起作用。
方法三
如果你是一个贪婪的人,你可以从数据表中获取表数据,或者更加耗时,生成你自己开发的数据,通过独立的测量,在Excel等程序中重新创建绘图。从那里,您能够正常的使用曲线拟合功能生成曲线公式。这为您的程序提供了一个方便的公式,但需要时间和数据的预处理。
我们宁愿不被困在分析所有这些数据,尽管方法三是合法的方法。此外,每个热敏电阻都有点不同(如果公差水平非常低,则不是一个大问题)。
方法四
对于像热敏电阻这样的器件,存在一般的曲线拟合公式,称为Steinhart-Hart方程。有不同的版本,其中使用了平方和立方项。这是等式的一个版本
1/T=A+Bln(R)+C(ln(R))3
其中R是热敏电阻在温度T下的电阻(以开尔文为单位)。
这种通用的曲线拟合方程可以适应所有NTC型电阻器,因为电阻和温度关系的近似值足以满足大部分应用。
注意,该等式需要三个常数:A,B和C.这些常数对于每个热敏电阻是不同的,必须给出或计算。有三个未知数,您需要在一定温度下进行三次电阻测量。从那里,这些测量产生三个方程来解决这些常数。
即使你是一个代数巫师,这也是很多工作。
幸运的是,有一个更简单的方程不太准确但只有一个常数。常数用β表示,因此该方程称为β方程。
1/T=1/TO+(1/β)⋅ln(R/RO)
其中RO指的是参考温度TO处的电阻(例如,室温下的电阻)。
β通常在数据表中提供。如果不是,您只需要一次测量(一个等式)来计算它。
所以我们找到了它。这是我们将用于热敏电阻接口的等式和方法,因为编码格外的简单,同时也是我们尚未发现的最简单的方法,不需要线性化热敏电阻的响应。
用Arduino测量电阻
由于我们已找到了正确的方法,我们现在需要弄清楚如何在我们将其插入β方程之前用Arduino实际测量电阻。这能够正常的采用分压器完成:
以上是我们热敏电阻的接口电路。每次热敏电阻检测到温度变化时,它都会反映在输出电压中。
通常,我们采用分压器,其公式如下:
V出=V小号⋅(R平衡/R热敏电阻+R平衡)
但是,我们不希望Vout作为答案-我们想要R热敏电阻。我们将通过以下方式解决这个问题:
R热敏电阻=R平衡⋅(Vs/Vout-1)
我们即将完善,但我们应该测量电压输出和电源电压。这就是Arduino内置ADC的用武之地。
我们大家可以将电压表示为一定范围内的数字。所以,我们的等式最终结果如下:
R热敏电阻=R平衡⋅(Dmax/D测量-1)
这在数学上是成功的,因为无论我们怎样表示电压(以伏特或数字为单位),这些单元抵消了分数中的顶部和底部,留下无量纲数。在那之后,乘以一个阻力,以欧姆为单位得出答案。
我们的Dmax将是1023,因为它是我们的10位ADC产生的最高数字。测量的D将被设置为我们测量的ADC值,范围从低至零到高达1023。
布线
我们将在我们的分压器中采用一个10K欧姆的热敏电阻,及一个10k欧姆的电阻用于R平衡。没有给出β,因此需要计算。
您将在下面找到完整的原理图。