迷你强 发表于 2012-6-26 13:04:47

Arduino入门教程--第十课--用Arduino做简单温度计

arduino的用途伴随着传感器的种类有了无限的可能,今天我们就要用到套件里的一款传感器,LM35D温度传感器,这款传感器能够测量0-100摄氏度的温度,并以电压的数值输出。从0度开始温度每升高1度输出电压就会提高10mv,这样我们就能够使用模拟口检测传感器的电压,进过简单计算得到当前的温度数值了。

实验材料

ocrobot mango(Arduino兼容控制板)1块
面包板1块
面包板专用跳线1盒
LM35D温度传感器 (千万别与三极管弄混了,温度传感器很贵的)   1枚
数据线1根










由上图我们就知道了如何连接lm35的引脚了
然后我们依据上图的定义来绘制实验用的电路连接图



好了。这样我们就能够依据电路图连接我们的硬件了。其实连接蛮简单的。。。给传感器供电,然后读取中间引脚的电压。



搭建好电路后,我们就来下载程序/*
作者:极客工坊-迷你强
时间:2012年6月26日
IDE版本号:1.0.1
发布地址:www.geek-workshop.com
作用:使用arduino模拟口测量室内温度

*/
void setup() {

Serial.begin(9600);         //使用9600速率进行串口通讯
}

void loop() {

int n = analogRead(A0);    //读取A0口的电压值

float vol = n * (5.0 / 1023.0*100);   //使用浮点数存储温度数据,温度数据由电压值换算得到

Serial.println(vol);                   //串口输出温度数据
delay(2000);                           //等待2秒,控制刷新速度
}完成后大家就能够去测量各个地方的温度了


以下是我们的演示视频

http://player.youku.com/player.php/sid/XNDE5NTY3MTA4/v.swf

ladywent 发表于 2012-7-25 11:06:40

迷你强 发表于 2012-7-24 17:52 static/image/common/back.gif
对的。。。
0-100度 对应0-5v模拟口返回数值0-1024所以。模拟口的值 1=0.48828125



假如n=1023,那vol=1024*0.48828125=500度?

我觉得vol=n*100/1024=n*0.09766

当n=1024, vol=1024*0.09766=100度

liujiachao 发表于 2016-5-12 10:13:16

提问:我运行的结果太诡异了,怎么测试自己的温度传感器是否坏掉了,测试结果如下:NUM是模拟口数值,TEM是换算的温度值,但是模拟口的数值i就够奇葩的了。
我想说只有三根线,我没接错。
求指教!!!

151 发表于 2014-10-30 22:01:52

void setup()
{
Serial.begin(9600);

}
void loop ()
{
int n=analogRead(A0);
float vol=n*(5.0/1023.0*100);
Serial.println (vol);
delay(2000);
}
为什么我的测出来感觉数据是随机的······最先以为把线连反了,但是一次是400至500,反过来就是20左右(现在温度绝对没20度!!),还出现很多0.00或者个位数,感觉是乱码,求解

Empty_bottle 发表于 2014-11-27 23:14:53

ardiunoaihaozhe 发表于 2014-7-18 13:24 static/image/common/back.gif
请问能不能显示千分位

把Serial.println(vol)的函数改成Serial.println(vol,3)就能显示千分位了。
但感觉没有意义啊,这个传感器的参数表里写了,精度是0.5℃,显示得再精细,实际也不准确啊。。。

Muller_r 发表于 2012-6-26 15:23:35

这个和DS18b20有什么区别?

邓维安 发表于 2012-6-26 15:42:08

18B20的接口是数据口输出,不是模拟口输出。

迷你强 发表于 2012-6-26 18:09:08

恩。18b20使用起来稍显复杂,涉及通讯协议。。。。

电源插头 发表于 2012-6-26 23:02:13

pt100是不是也和这个一样,是线性的,找个公式就行?

darkorigin 发表于 2012-6-27 00:08:41

Muller_r 发表于 2012-6-26 15:23 static/image/common/back.gif
这个和DS18b20有什么区别?

数字的出来的是方波,用脉冲方波和协议来通讯,
模拟的出来的是电压,利用AD转换(ARDUINO的模拟脚可以理解为就是数字脚+AD/DA转换模块,如果你需要大量的模拟脚但是不要求数字脚,可以直接外接AD/DA转换器来实现)来得到测量值并换算成温度

弘毅 发表于 2012-6-27 09:04:47

电源插头 发表于 2012-6-26 23:02 static/image/common/back.gif
pt100是不是也和这个一样,是线性的,找个公式就行?

PT100工业用多,是用来测量电阻阻值计算温度~~~~用法和这个也有区别。因为要精密测量电阻阻值,外围电路设计比较复杂。

Randy 发表于 2012-6-27 09:20:19

darkorigin 发表于 2012-6-27 00:08 static/image/common/back.gif
数字的出来的是方波,用脉冲方波和协议来通讯,
模拟的出来的是电压,利用AD转换(ARDUINO的模拟脚可以理 ...

这个回答的很实在的说法,理论分析就是这样的!

迷你强 发表于 2012-6-27 09:28:09

电源插头 发表于 2012-6-26 23:02 static/image/common/back.gif
pt100是不是也和这个一样,是线性的,找个公式就行?

PT100是电阻变化,成非线性,要用很复杂的外围电路进行转化后在单片机中进行查表,所以,只适合工业用途。。自己玩貌似太复杂了

lionelg 发表于 2012-6-27 16:21:53

范例用热敏电阻是不是更简单点儿

迷你强 发表于 2012-6-27 18:36:57

lionelg 发表于 2012-6-27 16:21 static/image/common/back.gif
范例用热敏电阻是不是更简单点儿

热敏电阻只能得到温度变化,不能取得当前的具体温度读数

风轻云淡 发表于 2012-7-13 21:35:07

好资料谢谢分享

ladywent 发表于 2012-7-24 15:52:33

请问:
float vol = n * 0.48828125
这个数值是怎么来的?
0-100摄氏度对应0-5V?

迷你强 发表于 2012-7-24 17:52:47

ladywent 发表于 2012-7-24 15:52 static/image/common/back.gif
请问:
float vol = n * 0.48828125
这个数值是怎么来的?


对的。。。
0-100度 对应0-5v模拟口返回数值0-1024所以。模拟口的值 1=0.48828125


计算公式为 5V / 1024*100℃=0.48828125
计算器按出来的。。。
页: [1] 2 3 4 5 6 7 8
查看完整版本: Arduino入门教程--第十课--用Arduino做简单温度计