资源描述
用于农业领域的智能温度传感器的设计
摘要:本文介绍了基于数字温度传感器DS18B20的测温系统的设计,阐述了其与AT89C2051单片机和PC机相结合组成传感器测温系统,实现温度检测系统的硬件和软件设计。该系统由DS18B20与单片机AT89C2051的接口电路,串口通信电路组成,通过软件编程发送到上位机(PC机),并在PC机上用LABVIEW界面远程显示测的温度值。该系统结构简单,抗干扰能力强,稳定可靠,适合于恶劣环境下进行现场温度测量,可应用于仓库测温、温室大棚和生产过程监控等领域。
关键字:DS18B20 Labview测温系统 AT89C52
1智能传感器的定义和实现途径
1.1智能传感器的定义
智能传感器(Intelligent sensor 或 Smart sensor)最初是由美国宇航局1978 年在开发出来的产品。宇宙飞船上需要大量的传感器不断向地面发送温度、位置、速度和姿态等数据信息,用一台大型计算机很难同时处理如此庞杂的数据,要不丢失数据,并降低成本,必须有能实现传感器与计算机一体化的灵巧传感器。智能传感器是指具有信息检测、信息处理、信息记忆、逻辑思维和判断功能的传感器。它不仅具有传统传感器的各种功能,而且还具有数据处理、故障诊断、非线性处理、自校正、自调整以及人机通讯等多种功能。它是微电子技术、微型电子计算机技术与检测技术相结合的产物。
早期的智能传感器是将传感器的输出信号经处理和转化后由接口送到微处理机部分进行运算处理。80年代智能传感器主要以微处理器为核心,把传感器信号调节电路、微电子计算机存贮器及接口电路集成到一块芯片上,使传感器具有一定的人工智能。90年代智能化测量技术有了进一步的提高,使传感器实现了微型化、结构一体化、阵列式、数字式,使用方便和操作简单、具有自诊断功能、记忆与信息处理功能、数据存贮功能、多参量测量功能、联网通信功能、逻辑思维以及判断功能。
智能化传感器是传感器技术未来发展的主要方向。在今后的发展中,智能化传感器无疑将会进一步扩展到化学、电磁、光学和核物理等研究领域。
1.2智能传感器的实现途径
智能传感器的“智能”主要体现在强大的信息处理功能上。在技术上有以下一些途径来实现。在先进的传感器中至少综合了其中两种趋势,往往同时体现了几种趋势。
① 采用新的检测原理和结构实现信息处理的智能化。采用新的检测原理,通过微机械精细加工工艺设计新型结构,使之能真实地反映被测对象的完整信息,这也是传感器智能化的重要技术途径之一。例如多振动智能传感器,就是利用这种方式实现传感器智能化的。工程中的振动通常是多种振动模式的综合效应,常用频谱分析方法分析解析振动。由于传感器在不同频率下灵敏度不同,势必造成分析上的失真。采用微机械加工技术,可在硅片上制作出极其精细的沟、槽、孔、膜、悬臂梁、共振腔等,构成性能优异的微型多振动传感器。目前,已能在2mm×4mm的硅片上制成50条振动板、谐振频率为4~14kHz的多振动智能传感器。
②应用人工智能材料实现信息处理的智能化 利用人工智能材料的自适应、自诊断、自修复、自完善、自调节和自学习特性,制造智能传感器。人工智能材料具有感知环境条件变化(普通传感器的功能),自我判断(处理器功能)及发出指令和自我采取行动(执行器功能)。因此,利用人工智能材料就能实现智能传感器所要求的对环境检测和反馈信息调节与转换的功能。人工智能材料种类繁多,例如半导体陶瓷、记忆合金、氧化物薄膜等。按电子结构和化学键分为金属、陶瓷、聚合物和复合材料等几大类;按功能特性又分为半导体、压电体、铁弹体、铁磁体、铁电体、导电体、光导体、电光体和电致流变体等集中按形状分为块材、薄膜和芯片智能材料。
③集成化 集成智能传感器是利用集成电路工艺和微机械技术将传感器敏感元件与功能强大的电子线路集成在一个芯片上(或二次集成在同一外壳内),通常具有信号提取、信号处理、逻辑判断、双向通讯等功能。和经典的传感器相比,集成化使得智能传感器具有体积小、成本低、功耗小、速度快、可靠性高、精度高以及功能强大等优点。
④软件化 传感器与微处理器相结合的智能传感器,利用计算机软件编程的优势,实现对测量数据的信息处理功能主要包括以下两方面:运用软件计算实现非线性校正、自补偿、自校准等,提高传感器的精度、重复性等。用软件实现信号滤波,如快速傅里叶变换、短时傅里叶变换、小波变换等技术,简化硬件、提高信噪比、改善传感器动态特性。运用人工智能、神经网络、模糊理论等,使传感器具有更高智能即分析、判断、自学习的功能。
⑤多传感器信息融合技术 单个传感器在某一采样时刻只能获取一组数据,由于数据量少,经过处理得到的信息只能用来描述环境的局部特征,且存在着交叉敏感度的问题。多传感器系统通过多个传感器获得更多种类和数量的传感数据,经过处理得到多种信息能够对环境进行更加全面和准确的描述
⑥网络化 独立的智能传感器,虽然能够做到快速准确地检测环境信息,但随着测量和控制范围的不断扩大,单节点、被动的信息获取方式已经不能满足人们对分布式测控的要求,智能传感器与通信网络技术相结合,形成网络化智能传感器。网络化智能传感器使传感器由单一功能、单一检测向多功能和多点检测发展;从被动检测向主动进行信息处理方向发展;从就地测量向远距离实时在线测控发展。传感器可以就近接入网络,传感器与测控设备间无需点对点连接,大大简化了连接线路,节省投资,也方便了系统的维护和扩充。
2智能温度传感器的应用背景介绍
温度是一种最基本的环境参数,人民的生活与环境的温度息息相关,在工业生产过程中需要实时测量温度,在农业生产中也离不开温度的测量,因此研究温度的测量方法和装置具有重要的意义.测量温度的关键是温度传感器,温度传感器的发展经历了三个发展阶段:①传统的分立式温度传感器,②模拟集成温度传感器,③智能集成温度传感器.目前,国际上新型温度传感器正从模拟式向数字式,从集成化向智能化、网络化的方向飞速发展.本设计选择集成电路温度传感器AD590作为传感器器测量温度.该装置适用于人民的日常生活和工、农业生产用于温度测量.
3智能温度传感器的设计
3.1原理和功能描述
大棚蔬菜满足了人民能一年四季吃到新鲜蔬菜的愿望,为提供更多量、更有营养价值的蔬菜,智能的大棚温度监控系统已成为农民的迫切需要。以89S52单片机和上位机为主的温度监控系统可对大棚内部的温度进行实时监控,以人性化的方式向大棚管理人员提供温度调节的信息,帮助农民提高农作物的产量,减少农民的工作量。
温度监控系统采用89S52单片机为核心,DS18B20为温度传感器。其中,DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种改进型智能温度传感器。与传统的热敏电阻相比,他能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。可以分别在93.75 ms和750 ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而使用DS18B20可使系统结构更趋简单,可靠性更高。他在测温精度、转换时间、传输距离、分辨率等方面较DS1820有了很大的改进,给用户带来了更方便的使用和更令人满意的效果。
大棚温度采用数字温度传感器DS18B20,单片机根据输入的温度得出结果,蜂鸣器报警提醒农民作出适当的温度调节。在大棚内通过数码管来显示结果,监控室内通过用美国国家仪器公司的NI Labview2009为开发环境开发的上位机监控软件。该系统成本低,操作方便,设计人性化,具有良好的推广价值。
3.2硬件设计
3.2.1系统硬件结构图
P3.7口
AT89C52
DS18B20
温度传感器
报警
数码管显示
上位机
图1 系统结构框图
3.2.2系统电路原理图
图2 硬件电路原理图
3.3软件设计
3.3.1 上位机监控软件设计
图3 前面板程序图
图4 后面板程序图
3.3.2主程序流程图
本系统采用P.7口接传感器DS18B20,在DS18B20初始化后采集P1.7口传感器温度,然后把采集的温度发送到串口送入PC机(上位机),并在上位机用Labview远程显示。
开始
初始化
DS18B20复位
采集温度值
发送数据
图5 主程序流程图
单片机首先发出一复位脉冲,使信号线上所有的DS18B20 芯片都被复位,然后从器件DS18B20 回送一存在脉冲,告知主机已准备就绪。系列工作。
DS18B20 的工作流程图
图7 DS18B20 的工作流程图
3.4试验结果
图7 最终试验结果
结束语
通过这次的作业,在很大程度上提高了我自主学习和思考的能力。论文中所涉及的知识很大程度上是在已有的知识基础上,借助书籍和网上资源,经过反复思考而得出的。当然还有一部分是参考资料上的内容。本次作业非常适合当下农民人数日益减少,个体农业不景气的情况,在设计和报告中并没有考虑到所用芯片的知识是否能被自己完全吸收,作出自己满意的设计。但是在实行的过程中,觉得要深入地了解一块传感器的功能是需要下一番功夫的,经过自己努力而获得的每一个知识也是更具意义的。由于能力及时间的限制,该系统并不是特别完善,针对DS18B20,我查阅大量的相关资料和跟据上课所学习的得到莫大收获。由于C语言和汇编语言相比有很大的优越性,故此次系统设计采用了C语言的编写方式。
相信在日后的学习中,努力地学习这方面的知识,日后必会有能力为农民设计一款实用、方便的温度控制系统,也可以在此系统基础上扩展自动通风系统等功能,大幅度的减少农民的工作量。
参考文献
[1] 马淑华,王凤文,张美金.单片机原理与接口技术[M].北京:北京邮电大学出版社,2007.8
[2] 张鹏,王雪梅.单片机原理与应用实例教程[M].北京:海洋出版社,2008.2
[3] 张婧武,周灵彬.单片机系统的PROTEUS设计与仿真[M].北京:电子工业出版社,2007.4
[4] 唐颖,程菊花,任条娟.单片机原理与应用及C51程序设计[M].北京:北京大学出版社,2008.8
[5] 边春元,李文涛,江杰,杜平.C51单片机典型模块设计与应用[M].北京:机械工业出版社,2008.4
附录 源程序
#include<reg51.h>
Unsigned char code Duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x63,0x39};
unsigned char Data_Buffer[2]={0,0};
unsigned char Temperature=0;//温度值
sbit DAQ =P1^7; //定义通信端口
sbit wei0 = P2^0;
sbit wei1 = P2^1;
void delay(unsigned int i)
{
while(i--);
}
void SendString(uint ch) //发送至上位机数据
{
char i = 0;
ES = 0;
SBUF = ch >> 8;
while( TI == 0 );
TI = 0;
delay(10);
SBUF = ch;
while(TI==0);
TI=0;
ES=1;
}
void Init_DS18B20(void) //初始化函数
{
unsigned char i=0;
DAQ = 1; //DQ复位
delay(8); //稍做延时
DAQ = 0; //单片机将DQ拉低
delay(80); //精确延时 大于 480us
DAQ = 1; //拉高总线
delay(14);
i=DAQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
delay(20);
}
//读一个字节
unsigned int ReadOneChar(void)
{
unsigned char i=0, dat = 0;
for (i=8;i>0;i--)
{
DAQ = 0; // 给脉冲信号
dat>>=1;
DAQ = 1; // 给脉冲信号
if(DAQ==1)
dat|=0x80;
delay(4);
}
return(dat);
}
void WriteOneChar(unsigned char dat) //写一个字节
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DAQ = 0;
DAQ = dat&0x01;
delay(5);
DAQ = 1;
dat>>=1;
}
}
unsigned int ReadTemperature(void) //读取温度
{
unsigned char H_valu=0,L_valu=0;
unsigned int Buff_T=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0x44); // 启动温度转换
Init_DS18B20()
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
H_valu=ReadOneChar();
L_valu=ReadOneChar();
Buff_T=L_valu;
Buff_T<<=8;
Buff_T=Buff_T|H_valu;
tt=Buff_T*0.0625;
Buff_T= tt*10+0.5; //放大10倍输出并四舍五入---此行没用
return(tt);
}
void main()
{
TMOD = 0x21; //定时器0,计数器的初始化
TH0 = THCO ;
TL0 = TLCO ;
TR0 = 1 ;
ET0 = 1
EX0 = 1 ;
IT0 = 1 ;
PCON = 0x00 ; //方式一,8位数据位,一位起始位和一位结束
SCON = 0x50 ; //串口通信控制寄存器 模式一,收发使能
TH1= 0xfd ; //波特率为9600,11.0592HZ
TL1= 0xfd ;
ES = 1 ;
TR1= 1 ;
EA = 1 ;
while(1)
{
Data_Buffer[0] = Temperature/10;
Data_Buffer[1] = Temperature%10;
SendString(Temperature);
}
void timer0(void) interrupt 1
{ static unsigned char Bit = 0; //静态变量,退出程序后,值保留
TH0=0xee;
TL0=0x00;
Temperature=ReadTemperature();//读温度
Bit ++ ;
if(Bit >= 2) Bit=0;
P2 = 0xff; //先关位码
P0 = Duan[Data_Buffer[ Bit ] ]; //开段码
switch(Bit) //送位码
{
case 0: wei0 = 0; break;
case 1: wei1 = 0; break;
}
}
展开阅读全文