专注电子技术学习与研究
当前位置:单片机教程网 >> Arduino >> 浏览文章

基于Proteus的Arduino学习06-LM35与温度测量的实现

作者:我不是奔跑哥   来源:我不是奔跑哥的blog   点击数:  更新时间:2014年06月08日   【字体:

这次我们使用片内ADC和温度传感器LM35实现温度测量,并且串口输出温度值。

LM35是NS公司生产的集成电路温度传感器系列产品之一,具有很高的工作精度和较宽的线性工作范围,它的输出电压与摄氏温度成线性比例。【文献1】我们正是利用温度与电压的线性关系,通过测量输出电压来实现温度的测量。
 LM35的参数如下:工作电压:直流4~30V;工作电流:小于133μA;精度:0.5℃精度(在+25℃时);比例因数:线性+10.0mV/℃;非线性值:±1/4℃; 校准方式:直接用摄氏温度校准;封装:密封TO-46晶体管封装或塑料TO-92晶体管封装;使用温度范围:-55~+150℃。
LM35的TO-92封装底视如图1所示,引脚介绍: ①正电源Vcc;②输出;③输出地/电源地。

图1 LM35(TO-92封装)
我们在上一节串口电压表的基础上,添加LM35温度传感器,在元器件搜索栏中输入“LM35”,并添加至元器件选择栏中,如图2所示。修改后的Arduino UNO实验板如图3所示。

图2 添加"LM35"温度传感器

图3 修改后的Arduino UNO实验板
Arduino UNO的ADC为10位,默认参考电压为5V,则可分辨的最小变化量为0.00488V,约为0.005V,可以满足LM35每摄氏度输出电压的变化值的测量。
Arduino软件设计,只需要加一条语句,以实现电压值转换至温度值。因为0.01V的电压变化值对应于1℃的温度变化值,所以只需要将原来的电压值乘以100即可实现。此处采用偷懒的办法,直接在原来乘以5.00改为乘以500即可。
Arduino程序程序清单:
int sensorValue=0;//AD转换后的数字量
float float_sensorValue;//把10位数字量换算成浮点电压量
void setup() {
  Serial.begin(9600);  //定义串口波特率为9600
}
void loop() {
  sensorValue = analogRead(A0);  //读取A0口电压值
   float_sensorValue=(float)sensorValue/1023*500;  //换算为浮点电压值
  Serial.println(float_sensorValue,1);  //保留两位小数发送数据
  delay(1000);        // 一秒刷新一次
}
编译成功之后,导入proteus仿真软件。通过调节LM35的温度值,可以看到输出的电压和温度的关系,以及串口输出的温度值。温度为0℃、25℃、50℃和100℃的仿真图如图4、5、6、7所示。
图4 温度为0℃时的输出温度

图5 温度为25℃时的输出温度
图6 温度为50℃时的输出温度

图7 温度为100℃时的输出温度
 
 
 

由温度为0℃、25℃、50℃和100℃的仿真图可以看出,LM35的测温精度约为0.5℃,100℃时的精度为0.7℃,一方面是LM35自身的精度决定了,另一方便也可能是仿真得不准确性,但是LM35能够满足1℃的测量的要求。
当然,还可以利用标准传感器对LM35进行系数修正,提高其测量精度。
最后奉上Proteus仿真视频。
关闭窗口

相关文章