文号
t59020
阅读
6409
回复
9
收藏
7
制作一个廉价的温度传感器
2013/07/28
IP:重庆
首先,购买一些热敏电阻。我使用的型号是MF52 10K3435,淘宝价3.8元20只,平均每个两毛钱。

可以查到它的一些数据:25度时阻值是10K,其他温度阻值(部分,未显示完全)对应如下:
(单位千欧)
QQ截图20130728213333.png

为了测量其阻值变化,连接电路如下。使用一个10K电阻。

热敏电阻电路.png

使用STM8单片机上的ADC采集电压值。该ADC精度为10-bit,随着输入电压从0到VCC变化,可获得0-1023之间的数值。

设当前温度对应的热敏电阻阻值为R(单位千欧),单片机采集到的数值为D,则有
D=R/(R+10)*1023
这样,便可通过excel求出每个温度下,ADC将会采集到的数值:

QQ截图20130728214134.png

焊个电路,连上单片机

DSC_3787.jpg

由于温度和采集到的数值的关系不是线性的,可以用查表法来对付,有程序如下:



使用arduino的同学可以这么理解:用int buffer=analogRead(A0)采电压值,然后照抄后面查表部分的代码(31-38行是您需要的),temp就是所求温度。

测试(从串口收到,在电脑上显示):室温
QQ截图20130728223110.png
+200
科创币
彼岸江山
2013/07/28
-
9
novakon作者
13年5个月前IP:未同步
553098
1楼
关于精度
- 所使用的10K电阻精度是多少?1%还是0.5%?
- 查表法,整数插值计算精度够吗?应该使用整数还是浮点数?要不要进行数字滤波得到更高精度和更平滑数值?

关于功耗
- 可将VCC改为某个输出脚,当不采样时,禁用此输出脚,减少耗电。
- 5V电压下,20k阻值的负载 -> 250uA或者 0.25mA,如果作为长期记录(比如使用电池供电,放在包装箱里面),应使用以上方法节省电量。

关于校准
- 使用常见的恒温源,比如体温(36),冰块(0)
- 使用一个温度计作参照

关于成本
- 在单片机拥有ADC的情况下(绝大多数情况),成本会控制在1元以内
引用
评论
13年5个月前IP:未同步
553265
2楼
这个热敏电阻和那个18B20哪个更精确一点
引用
评论
13年5个月前IP:未同步
553377
3楼
回 2楼(gurite) 的帖子
噗。。。当然是18b20
引用
评论
13年5个月前IP:未同步
553427
4楼
18B20的精度是0.5度,但是热敏电阻可以达到0.01度。
LZ应该考虑长期稳定性,要么就搞个动态校正程序,至少也要用个TL431,不然还不如用18B20。
引用
评论
13年5个月前IP:未同步
553604
5楼
突然一个想法**串口直接读18B20有没有人试过???
引用
评论
novakon作者
13年5个月前IP:未同步
555066
6楼
回 2楼(gurite) 的帖子
视乎采样精度嘛,在这个例子里面,室温附近的分辨率大概是0.1度
引用
评论
12年7个月前IP:未同步
688179
7楼
本帖最后由 岑蓉络阳 于 2014-5-11 19:56 编辑

热敏电阻的非线性比较厉害,并且一致性很差,只能用来做做简单而精确度不高的温度测量或控制,成批生产时,温度的标定(即表的校准)会很麻烦的。
引用
评论
12年7个月前IP:未同步
688565
8楼
我在T B上买了个红外测温仪,非接触式的75元钱
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的