极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 249530|回复: 118

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

  [复制链接]
发表于 2012-6-26 13:04:47 | 显示全部楼层 |阅读模式
arduino的用途伴随着传感器的种类有了无限的可能,今天我们就要用到套件里的一款传感器,LM35D温度传感器,这款传感器能够测量0-100摄氏度的温度,并以电压的数值输出。从0度开始温度每升高1度输出电压就会提高10mv,这样我们就能够使用模拟口检测传感器的电压,进过简单计算得到当前的温度数值了。

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










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




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



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

  7. */
  8. void setup() {
  9.   
  10.   Serial.begin(9600);         //使用9600速率进行串口通讯
  11. }

  12. void loop() {

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

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

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


以下是我们的演示视频


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2012-7-25 11:06:40 | 显示全部楼层
迷你强 发表于 2012-7-24 17:52
对的。。。
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度

回复 支持 0 反对 1

使用道具 举报

发表于 2016-5-12 10:13:16 | 显示全部楼层
提问:我运行的结果太诡异了,怎么测试自己的温度传感器是否坏掉了,测试结果如下:NUM是模拟口数值,TEM是换算的温度值,但是模拟口的数值i就够奇葩的了。
我想说只有三根线,我没接错。
求指教!!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 1 反对 0

使用道具 举报

发表于 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或者个位数,感觉是乱码,求解
回复 支持 1 反对 0

使用道具 举报

发表于 2014-11-27 23:14:53 | 显示全部楼层
ardiunoaihaozhe 发表于 2014-7-18 13:24
请问能不能显示千分位

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

使用道具 举报

发表于 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是不是也和这个一样,是线性的,找个公式就行?
回复 支持 反对

使用道具 举报

发表于 2012-6-27 00:08:41 | 显示全部楼层
Muller_r 发表于 2012-6-26 15:23
这个和DS18b20有什么区别?

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

使用道具 举报

发表于 2012-6-27 09:04:47 | 显示全部楼层
电源插头 发表于 2012-6-26 23:02
pt100是不是也和这个一样,是线性的,找个公式就行?

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

使用道具 举报

发表于 2012-6-27 09:20:19 | 显示全部楼层
darkorigin 发表于 2012-6-27 00:08
数字的出来的是方波,用脉冲方波和协议来通讯,
模拟的出来的是电压,利用AD转换(ARDUINO的模拟脚可以理 ...

这个回答的很实在的说法,理论分析就是这样的!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-6-27 09:28:09 | 显示全部楼层
电源插头 发表于 2012-6-26 23:02
pt100是不是也和这个一样,是线性的,找个公式就行?

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

使用道具 举报

发表于 2012-6-27 16:21:53 | 显示全部楼层
范例用热敏电阻是不是更简单点儿
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-6-27 18:36:57 | 显示全部楼层
lionelg 发表于 2012-6-27 16:21
范例用热敏电阻是不是更简单点儿

热敏电阻只能得到温度变化,不能取得当前的具体温度读数
回复 支持 反对

使用道具 举报

发表于 2012-7-13 21:35:07 | 显示全部楼层
好资料谢谢分享
回复 支持 反对

使用道具 举报

发表于 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
请问:
float vol = n * 0.48828125
这个数值是怎么来的?


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


计算公式为 5V / 1024*100℃=0.48828125
计算器按出来的。。。
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 06:15 , Processed in 0.060294 second(s), 33 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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