PureGold 发表于 2012-7-2 21:25:23

利用NTC 10D-9热敏电阻(0.18元)实现低成本测温

最近在淘宝上购置了很多东西,其中包括NTC 10D-9热敏电阻.才 0.18元,买了6个想做东西。可以做成一个基本无成本的测温系统

查询了一下资料,温度与电阻是有函数关系的。
Rt = R *EXP(B*(1/T1-1/T2))
对上面的公式解释如下:
1.       Rt 是热敏电阻在T1温度下的阻值;
2.       R是热敏电阻在T2常温下的标称阻值;
3.       B值是热敏电阻的重要参数;
4.       EXP是e的n次方;
5.       这里T1和T2指的是K度即开尔文温度,K度=273.15(绝对温度)+摄氏度;

查询DataSheet得知我用的NTC 10D-9热敏电阻为10欧姆(标准25度), B值是3000

值得注意的是,Exp和ln是反函数,但在Arduino中,math.h库则只有log10和log,log就是ln(非常奇怪)
我导出了它的另一个形式
T1=1/(ln(Rt/R) /B + 1/T2   )

连接方式为100ohm普通电阻同NTC串联接入3.3V-GND,用A0-GND测量NTC电压。
代码如下
#include <math.h>
void setup(){
Serial.begin(9600);
}
void loop(){
double val=analogRead(0);
double fenya=(val/1023)*5;
// 欧姆定律 r/100=fenya/(3.3-fenya)
double r=fenya/(3.3-fenya)*100;
Serial.println( 1/(log(r/10) /3000 + 1/(25+273.15)   )-273.15);

delay(1000);
}
另外要注意的是,analogRead的单位一般是.0049 volts (4.9 mV) per unit,这个非常坑爹,我调试了半天。

5 volts / 1024 units or, .0049 volts (4.9 mV) per unit. The input range and resolution can be changed using analogReference().

It takes about 100 microseconds (0.0001 s) to read an analog input, so the maximum reading rate is about 10,000 times a second.

Syntax

analogRead(pin)

Parameters

pin: the number of the analog input pin to read from (0 to 5 on most boards, 0 to 7 on the Mini and Nano, 0 to 15 on the Mega) 对我来说已经足够精确,而且我这种连接并不是很精确,有很大的提升空间
以下记录了我手握电阻后的温度变化情况
27.42
27.42
27.42
27.42
27.42
27.42
27.42
27.42
27.42
27.42
28.60
29.83
30.46
31.11
31.11
31.77
31.77
32.45
32.45
33.14
33.14
33.14
33.14
33.14
33.14
33.85
33.14
33.14
33.85
33.85
33.85
33.85
33.85
33.85
33.85
33.85
33.85
33.85
33.85
33.85
33.85

不足:
100ohm发热的很厉害,所以阻值会改变,所以越来越不准
改进也很简单:
使用低电压就可降低发热。
要达到足够精确需要串联的电阻越接近NTC越好。(因为用了欧姆定律,而Read的却是int值)
或者也可以使用标称电阻大些的热敏电阻



弘毅 发表于 2012-7-2 21:37:12

{:soso_e103:} 传说中需要0.1%精度的低温漂电阻?

PureGold 发表于 2012-7-2 21:40:48

弘毅 发表于 2012-7-2 21:37 static/image/common/back.gif
传说中需要0.1%精度的低温漂电阻?

不懂,就是很大众的电阻啊

迷你强 发表于 2012-7-2 22:30:55

:loveliness:0.1%低温漂高帅富电阻准备上架

Muller_r 发表于 2012-7-3 09:07:57

这个和D18b20还有LM35相比准确性更高?

PureGold 发表于 2012-7-3 10:16:48

Muller_r 发表于 2012-7-3 09:07 static/image/common/back.gif
这个和D18b20还有LM35相比准确性更高?

不按我这样接,精确测量电阻的话应该比LM35高(前提是你也精确测试了25度标准电阻,我这个型号标准电阻是上下浮动10%的)D18b20不知道了。

Ansifa 发表于 2012-7-19 12:10:01

这种方法不好啊,精度最理想只有10bit就是1024级。而D18b20是12bit4096级的。。还要算响应曲线误差。。。

PureGold 发表于 2012-7-19 13:14:48

Ansifa 发表于 2012-7-19 12:10 static/image/common/back.gif
这种方法不好啊,精度最理想只有10bit就是1024级。而D18b20是12bit4096级的。。还要算响应曲线误差。。。

哈哈,在25度上下还是很理想的,曲线误差可以忽略的:)(当然因为电阻个体差异具体值初始值,B值最好自己测,再拟合)10bit只能说是AVR的限制吧,毕竟是模拟的。。主要是便宜哈,我穷人一个请多包涵。正常使用绝对首选D18b20

蓝丝绒之飞雪 发表于 2013-1-17 23:32:27

请问,你能把<math.h>库函数发给我吗?我的libray里没有这个库函数。我的邮箱[email protected]

stig3 发表于 2013-2-26 15:23:50

实际上NTC有一个更准确的方程,不过在逆向求温度的时候求解不出来方程

数字 发表于 2013-3-19 16:46:54

ntc用公式法无论是外围硬件还是单片机运算都很麻烦,我觉得还是查表法简单。

nust_奔跑 发表于 2013-6-16 23:00:13

很欣赏楼主的钻研精神~
不过,建议使用DS18B20实现温度测量,可以多个级联,比较方便。

yangfanconan 发表于 2013-7-19 11:50:45

迷你强 发表于 2012-7-2 22:30 static/image/common/back.gif
0.1%低温漂高帅富电阻准备上架

迷你强还真是能抓住商机啊。哈哈

迷你强 发表于 2013-7-19 13:58:15

yangfanconan 发表于 2013-7-19 11:50 static/image/common/back.gif
迷你强还真是能抓住商机啊。哈哈

;P

honyfox 发表于 2013-12-21 11:02:42

这个稳定性貌似不好啊,缺乏实用性吧?
页: [1] 2
查看完整版本: 利用NTC 10D-9热敏电阻(0.18元)实现低成本测温