极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 72453|回复: 19

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

[复制链接]
发表于 2012-7-2 21:25:23 | 显示全部楼层 |阅读模式
最近在淘宝上购置了很多东西,其中包括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%精度的低温漂电阻?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-2 21:40:48 | 显示全部楼层
弘毅 发表于 2012-7-2 21:37
传说中需要0.1%精度的低温漂电阻?

不懂,就是很大众的电阻啊
回复 支持 反对

使用道具 举报

发表于 2012-7-2 22:30:55 | 显示全部楼层
0.1%低温漂高帅富电阻准备上架
回复 支持 反对

使用道具 举报

发表于 2012-7-3 09:07:57 | 显示全部楼层
这个和D18b20还有LM35相比准确性更高?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-3 10:16:48 | 显示全部楼层
Muller_r 发表于 2012-7-3 09:07
这个和D18b20还有LM35相比准确性更高?

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

使用道具 举报

发表于 2012-7-19 12:10:01 | 显示全部楼层
这种方法不好啊,精度最理想只有10bit就是1024级。而D18b20是12bit4096级的。。还要算响应曲线误差。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-19 13:14:48 | 显示全部楼层
Ansifa 发表于 2012-7-19 12:10
这种方法不好啊,精度最理想只有10bit就是1024级。而D18b20是12bit4096级的。。还要算响应曲线误差。。。

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

使用道具 举报

发表于 2013-1-17 23:32:27 | 显示全部楼层
请问,你能把<math.h>库函数发给我吗?我的libray里没有这个库函数。我的邮箱[email protected]
回复 支持 反对

使用道具 举报

发表于 2013-2-26 15:23:50 | 显示全部楼层
实际上NTC有一个更准确的方程,不过在逆向求温度的时候求解不出来方程
回复 支持 反对

使用道具 举报

发表于 2013-3-19 16:46:54 | 显示全部楼层
ntc用公式法无论是外围硬件还是单片机运算都很麻烦,我觉得还是查表法简单。
回复 支持 反对

使用道具 举报

发表于 2013-6-16 23:00:13 | 显示全部楼层
很欣赏楼主的钻研精神~
不过,建议使用DS18B20实现温度测量,可以多个级联,比较方便。
回复 支持 反对

使用道具 举报

发表于 2013-7-19 11:50:45 | 显示全部楼层
迷你强 发表于 2012-7-2 22:30
0.1%低温漂高帅富电阻准备上架

迷你强还真是能抓住商机啊。哈哈
回复 支持 反对

使用道具 举报

发表于 2013-7-19 13:58:15 | 显示全部楼层
yangfanconan 发表于 2013-7-19 11:50
迷你强还真是能抓住商机啊。哈哈

回复 支持 反对

使用道具 举报

发表于 2013-12-21 11:02:42 | 显示全部楼层
这个稳定性貌似不好啊,缺乏实用性吧?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-18 19:49 , Processed in 0.047601 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表