使用Arduino精确测量温度


10

我正在尝试使用Arduino构建恒温器。我想使用手机电池/充电器为其供电,这会使系统电压变化很大。现在,我使用Arduino Uno,但一旦完成,我将其移植到Lilypad。

首先,我尝试使用TMP36温度传感器。到目前为止,这完全是失败。尽管传感器本身看起来非常稳定,但我无法找到一种精确测量其电压的方法。

对模拟传感器使用内置的5v参考完全不起作用-甚至由USB arduino的+ 5V供电实际上也为+ 4.8V(这会使测量温度偏移几度)。当电路板由电池供电时,电压下降至约4V,测得的温度急剧上升。我还尝试使用板上的+ 3.3V作为参考。用USB为开发板供电时,它似乎更稳定,但用电池供电时其电压会下降。

还有其他方法可以可靠地测量传感器输出电压吗?

对于第二阶段,我计划使用热敏电阻。刚订购了几个这样的20K热敏电阻

据我了解,如果我构建分压器并将V_in用作ADC的参考电压,则这些参数应该更易于准确测量。

关于它们的几个问题:

  • 使用几个带有不同固定电阻的分压器来提高精度是否有意义?
  • 我可以将可编程引脚用作V_in,并使用几个不同的电压电平来测量温度。尽管我不清楚这是否会真正提高准确性。

请发布您的温度转换代码。
geometrikal

请“准确”定义您的意思。您要达到哪种温度分辨率和绝对精度?
Joe Hass 2013年

我希望获得约1-2度的分辨率。1-2度的绝对校准误差也应该很好。据我了解,在0C下获得参考点相对容易,我想我可以通过交叉校准传感器在室温下获得第二个(更粗糙)的点。
Usov

温度在5-25C范围内为1-2度。
Usov

@geometrikal我现在手边没有它,但它与每个人的其他基本相同:删除第一个样本,等待几毫秒,再采样两次,然后取平均样本。然后根据您认为参考电压的大小进行缩放。
Usov

Answers:


2

看来您已经意识到基准电压变化的问题,如果您使用TMP36之类的设备(固定为10mV / degC),除了使用芯片上的基准电压来稳定器件外,您无能为力。

但是,如果您使用的是RTD或热敏电阻,则不会出现此问题。您的ADC进行比例测量-如果您使用相同的参考电压为RTD或热敏电阻(通过合适的电阻器)供电,则它将ADC输入与其参考电压BUT进行比较,这不会影响读数。如果参考电压上升10%,则ADC的电压也上升。


4

我认为您应该考虑使用DS18B20 / DS18S20等数字温度传感器,因为它不依赖于ATmega ADC的精度来测量模拟信号,它使用1线数字协议来报告温度。

请参阅以下教程
http://playground.arduino.cc/Learning/OneWire
http://www.hobbytronics.co.uk/ds18b20-arduino


2
除非您解释为什么 OP应该切换到其他传感器,并且没有给出任何理由,否则这个答案不是很有帮助。仅在答案中提供链接不是一个好主意,因为它们通常会失效,并且答案的内容也会丢失。
Joe Hass 2013年

我没有编辑相同的答案,而是编辑了A来解决Joe提出的问题。
RedGrittyBrick 2013年

@JoeHass除了链接到外部文章之外,唯一的选择是在答复中附加代码,但我没有自己的代码,未经他人同意附加其他人的代码也不公平。即使链接失效,也可以使用google和DS18B20作为关键字轻松找到Arduino库。关于解释,这是我的错误,我认为提到传感器是数字的就可以解释我的观点。
alexan_e

感谢您的评论。由于某种原因,很难找到数字传感器。本地供应商(Maplin)或便宜的在线人(我使用过Spiraltronics)都不卖任何东西。3英镑的流行音乐+投放费用仍然是相对昂贵的选择。
Usov

@Usov从您提供的链接来看,我认为您居住在英国。我通常从中国便宜地购买这些组件,但我也在ebay.uk上以1.49英镑的价格找到了它们,也许它们很适合您
alexan_e 2013年

3

您的测量将与ADC的基准电压一样好。Arduino默认情况下使用电源电压作为参考电压,但是在您的情况下,正确的方法是使用arduino的Aref引脚。您必须获得一个称为“电压参考”的特殊芯片,并将其连接到Aref引脚,然后将ADC设置为使用Arduino代码(analogReference(EXTERNAL))中的外部参考

必须选择参考电压,以便温度传感器的整个摆幅适合参考电压。TMP36在100C时将输出〜1.5V的电压,因此您必须使用1.5V以上的基准来测量高达100C的温度。您希望基准电压尽可能接近测得的最大电压,以获得尽可能高的分辨率。

Atmega328p具有两个内部参考,无需任何外部组件即可使用。一个是1.1V,另一个是2.56V。与使用外部专用组件相比,它们的准确性通常差一些。检查Arduino的文档analogReference和ATMEGA328P数据表的内部参考电压的精度。

如果您确实想获得不同量程的螺母,则可以使用多个外部基准,并使用74hc4051之类的模拟开关对其进行切换。或者,您可以在两个内部引用之间切换。

使用热敏电阻,如果您设置一个恒定电流源而不是使用一个哑电阻器,您将获得更好的结果。另一方面,由稳定的参考电压供电的哑电阻也可以正常工作。

选择外部基准电压源时,请确保您有足够的电压以适应电池供电且电池没电时的压降。Vref + Vdropout <Vbat-分钟


谢谢你的评论。这与我今天得到的评论基本相同-在齐纳二极管上建立自己的基准电压,或为AREF获得专用的低压稳压器。
Usov

为什么在恒定电流和热敏电阻的情况下获得更好的结果?
geometrikal

2

没有稳定的ADC参考实际上是电路中另一个问题的征兆:您没有为电路板提供足够高的电压。5V电源下降到4V,3.3V也下降。

Arduino板上的稳压器(MC33269D-5.0 IIRC)的压差约为1.0V,因此您需要为其提供至少6V的电压才能获得稳定的5V输出。AA电池在1.5-1.6V时开始工作,而在1.1V时几乎没电,因此,您必须使用至少6节AA电池为电路板供电,以在整个电池寿命中保持稳定的输出。

正确供电,您既可以使用内部ADC参考电压,也可以使用5V或3.3V线路。由于温度传感器每摄氏度变化约10mV,因此您可以使用分压器将参考电压设置为等于传感器的最大预期输出电压(例如50摄氏度)。这将提供更精确的测量。

如果要使用少于6节AA电池,请尝试使用DC-DC升压转换器,例如https://www.sparkfun.com/products/10968。链接的示例采用1V-4V并制成5V。输出将直接馈入Arduino的5V引脚,绕过其稳压器。

为了使电路板能在更长的电池上运行,请在两次传感器读取之间使MCU进入睡眠状态。该rocketscream低能耗库是为这个伟大的目的。但这仅在使用高效的稳压器/ DC-DC转换器时才真正有用,因为标准的Arduino稳压器本身仅使用10mA!


1

问题的答案还有其他方法可以可靠地测量传感器输出电压吗?

ADC使用参考电压进行从模拟到数字的转换。因此,如果参考电压发生变化,则转换后的值(即数字值)将发生变化。如果参考电压发生变化,则同一模拟输入的数字值将有所不同。

一种简单的选择是使用Arduino内部的内部参考电压(即Atmega控制器)。

请参阅下面的链接,其中提供了使用内部ADC的示例代码(Arduino函数名称-AnalogReference(DEFAULT))

http://tronixstuff.com/2013/12/12/arduino-tutorials-chapter-22-aref-pin/

我认为这将解决您的问题,并且无需切换到热敏电阻。


我不确定“ Hacking Wifi finder”的相关性-我找不到任何相关的内容。关于内部ADC参考-我写了有关它的内容。即使Arduino是通过USB供电的,它也不起作用。当电路板由手机电池(3.7-4.5V)供电时,情况更糟。
Usov 2013年

对不起,它的复制/粘贴错误。即将纠正链接!
robomon 2013年

@Usov链接已更正!
robomon

根据atmega328规范,内部1.1V可以浮动超过10%。这似乎也不是非常可靠的参考。
Usov
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.