通常,对于使用电阻器的应用,您希望避免在温度变化时电阻发生变化。虽然这在现实生活中并不是完全可能的,但你可以做到这一点,只有很小的电阻变化与温度的大变化相对应。如果你不能这样做,电阻器真的会在电路中造成严重破坏。例如,随着环境温度的变化,LED会变亮和变暗。
那么如果你真的希望LED的亮度是温度的函数,你会怎么做?那么,你需要一个热敏电阻。热敏电阻的电阻变化很大,温度变化很小。为了说明这个概念,请参见下面的图1,其中显示了热敏电阻的典型曲线:
热敏电阻也可用作正温度系数(PTC)。PTC的工作方式是随着温度的升高,电阻增加。但请注意,PTC热敏电阻具有某种临界点,并且可能会在某些温度下极大地影响电阻,使PTC热敏电阻更具挑战性。因此,大多数低成本温度测量使用NTC热敏电阻。
现在我们已经介绍了热敏电阻的一般行为,下一个问题可能就是我们如何用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 / T O +(1 /β)⋅ln(R / R O)
其中R O指的是参考温度T O处的电阻(例如,室温下的电阻)。
β通常在数据表中提供。如果不是,您只需要一次测量(一个等式)来计算它。
所以我们找到了它。这是我们将用于热敏电阻接口的等式和方法,因为编码非常简单,同时也是我们尚未发现的最简单的方法,不需要线性化热敏电阻的响应。
用Arduino测量电阻
由于我们已经找到了正确的方法,我们现在需要弄清楚如何在我们将其插入β方程之前用Arduino实际测量电阻。这可以使用分压器完成:
以上是我们热敏电阻的接口电路。每次热敏电阻检测到温度变化时,它都会反映在输出电压中。
通常,我们使用分压器,其公式如下:
V 出 = V 小号 ⋅(R 平衡 / R 热敏电阻 + R 平衡)
但是,我们不希望V out作为答案 - 我们想要R 热敏电阻。我们将通过以下方式解决这个问题:
R 热敏电阻 = R 平衡 ⋅(V s / V out - 1)
我们即将完善,但我们需要测量电压输出和电源电压。这就是Arduino内置ADC的用武之地。
我们可以将电压表示为一定范围内的数字数字。所以,我们的等式最终结果如下:
R 热敏电阻 = R 平衡 ⋅(D max / D 测量 - 1)
这在数学上是成功的,因为无论我们如何表示电压(以伏特或数字为单位),这些单元抵消了分数中的顶部和底部,留下无量纲数。在那之后,乘以一个阻力,以欧姆为单位得出答案。
我们的D max将是1023,因为它是我们的10位ADC产生的最高数字。测量的 D 将被设置为我们测量的ADC值,范围从低至零到高达1023。