由于需要做一个睡眠质量监测的小东西(体温+三轴),所以需要测量体温,然而把电路搭好之后才发现
ds18b20根本就不能测体温。。也是醉。。而且普通的热敏电阻也干不了这活。
可看到输出如下
因此又买了
专门测体温的热敏电阻,某宝上有,型号是
MEB-503E-3950
具体参数的解释可以参考这篇文章:
http://blog.sina.com.cn/s/blog_6182b82201012ii1.html
热敏电阻计算公式
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(绝对温度)+摄氏度;
例如我手头有一个 MF58502F327型号的热敏电阻
MF58—— 型号玻璃封装
502 —— 常温25度的标称阻值为5K
F —— 允许偏差为±1%
327 —— B值为3270K的NTC热敏电阻
而我买的型号是MEB-503E-3950,因此它的
常温下阻值R1=50*10^3=50k欧;
常温T12=273.15+25=298.15;
参数B=3950;
这时候代入T1温度就可以求出相应温度下热敏电阻的阻值,注意温度单位的转换,摄氏度与开尔文。
至于热敏电阻的用法,其实就是
串联一个阻值和它差不多(最好)的电阻,从而通过
分压比确定热敏电阻的阻值,从而确定测量温度(详情可百度,很多的),下面只给出电路和代码:
我是用的
arduino UNO的开发板,电路接法如下:
代码如下:
/*
* 热敏电阻的型号是MEB-503E-3950
* 常温25摄氏度(298.15K)下阻值为50k欧
*/
#include<math.h>
const float voltagePower=3.3;
const float Rs=21.5;//采样电阻为21.5千欧
const int B=3950;
const double T1=273.15+25;//常温
const double R1=50;//常温对应的阻值,注意单位是千欧
void setup() {
Serial.begin(9600);
}
void loop() {
//获得A1处的电压值
double digitalValue=analogRead(1);
double voltageValue=(digitalValue/1023)*5;
Serial.print("Current voltage value=");
Serial.println(voltageValue);
//通过分压比获得热敏电阻的阻值
double Rt=((voltagePower-voltageValue)*Rs)/voltageValue;
Serial.print("Current registor value=");
Serial.println(Rt);
//换算得到温度值
Serial.print("Current temperature value=");
Serial.println(((T1*B)/(B+T1*log(Rt/R1)))-273.15);//
Serial.println();
//每3秒输出,更改此处修改频率
delay(3000);
}
可看到输出如下
注:如果需要
精确的测量,还要
考虑购买的热敏电阻档位以及误差率等等(数据手册),本人只是简单做个原型,所以参考的童鞋注意啦