大棚温湿度自动系统控制设计_第1页
大棚温湿度自动系统控制设计_第2页
大棚温湿度自动系统控制设计_第3页
大棚温湿度自动系统控制设计_第4页
大棚温湿度自动系统控制设计_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于单片机的温度采集系统设计摘要:本论文中讲述了一种是基于STC89C52RC型单片机的一款基于大棚温湿度控制系统设计,系统的编程中采用C语言,把单片机作为系统的核心,主要完成对显示电路设计、检测电路设计、数据传输等功能。本次的设计中采用经典实用的模块化设计,编程中同样采取C语言的模块编程,对以后硬件的升级和软件的优化都打下了坚实的基础。系统由STC89C52RC型单片机、温度传感器DS18B20、湿度传感器DHT1L烟感传感器、液晶显示模块LCD1602、数据传输模块HC-05、A/D转换器等模块电路组成。系统供电后,温度传感器DS18B20和湿度传感器DHT11对大棚中的粮食温度、湿度进行快速检测,并通过液晶显示模块LCD1602实时显示在屏幕上,同时还具备防火灾报警功能和物联网远程监测功能,当烟感传感器检测到的数值超过正常值后进行报警功能,并且可以把检测的数据和报警实时的发送至手机APP中。通过快速的检测,可以提供大量的数据以供分析和处理。经过我在实验室和对大棚的所做的大量的实验表明,该检测系统可以很快速的完成大棚检测的任务。并且在检测的数据方面和专业的温湿度检测仪器误差很小,在数据传输到手机上时速度快而且基本没有延时,可以快速有效的让检测人员通过手机即可了解到大棚中的温湿度和是否有火灾的发生。关键词:温度传感器;DS18B20;LCD1602;液晶显示器;火灾报警;物联网远程监测—、绪论古人有云“谁知盘中餐,粒粒皆辛苦”,在战争中又有将士说“三军未动,粮草先行”。粮食来之不易,我们必须倍加珍惜,而且在古代粮草就是战争的先行官,粮草的配备齐全在战争中也起到了至关重要的作用。在古代储存大量的粮食的大棚很多一般都是为了重大战争、突如其来的瘟疫、或者天灾人祸等一些无法避免不可抗拒的紧急性的突发事件。在如今也是为了实现百姓安居乐业、维护社会秩序稳定、国家长治久安的基本保障。中国是一个人口大国,据公安部2018年份统计的数据是13.93亿人口。粮食是国之根本,是民之保障。邓小平同志提出改革开放,于1990年首次设定大棚储存制度,大型大棚储存制度在国家的发展中有着重要的调控作用。[1]根据中华人民共和国国务院的有关粮食保护法的有关法律法规中规定,必须定期的抽样检查各个大棚各点的粮食的温度和湿度,中央储备粮要求更加严格,要求代管企业(1)具有符合国家标准的中央储备粮质量等级检测仪器和场所,具备检测中央储备粮储存期间仓库内温度、水分、害虫密度的条件;(2)具有与粮食储存功能、仓型、进出粮方式、粮食品种、储粮周期等相适应的仓储设备;(3)具有经过专业培训,并取得有关主管部门颁发的资格证书的粮食保管、检验、防治等管理技术人员;(4)仓库容量大小必须达到国家规定的规模,仓库储存粮食的条件必须满足要求等。⑵目前,我国的大部分大棚还是用的人工检测温度、湿度的方法,人工检测速度慢,需要多次测量后进行记录后得出,这样会增加大棚中粮食质量检测员的工作强度,而且不能彻底的检查,抽样检查虽然已经可以节省一定的人力、物力但是得到的数据不是很准确。(一)研究内容章节介绍在这次设计中研究的主要内容是如何对大棚温湿度控制系统的设计,从监控大棚内的温度、湿度、烟感,监测这些数据并将这些数据与正常数值相比较,不正常时,进行报警,并且通过数据传输模块将信息及时发送至手机APP中,提醒监测人员。第一章:绪论章节中从为什么选择本次研究课题以及研究该课题的意义何在以及研究本次课题的背景开始论述,然后根据所查文献的国内国外的不同的研究现状同时开始了解此种系统的研究到了那种地步以及各种研究成果的举例,分析目前的研究行情和未来的发展趋势,最后对本章中的设计研究内容进行详细的规划。第二章:这一章节中对整体的框图进行介绍,从框图中可以清晰看出各个模块之间关系,最后对本次设计中主要的技术路线和大致的基本原理进行介绍。⑶第三章:硬件电路是本次设计的重头戏,所占整体论文章节的比例较大。这一章节中首先对所有的硬件选择简单介绍后,紧接着对一些硬件电路比如:单片机基本的外围电路、LCD1602液晶显示电路、温度检测电路、湿度检测电路、烟感电路等进行了对比选择和具体电路的讲解。对次要比如供电电路,电源指示灯电路等次要电路不再做介绍。[4]第四章:软件设计采取介绍思路与硬件电路的基本类似。首先对整体主程序的逻辑思路进行详细的介绍,然后对温度子程序、湿度子程序、烟感子程序、数据传输模块子程序进行部分程序的举例。第五章:在这一章节主要对制作设计时中所遇到的一些问题进行举例出,并且把自己总结的一些解决问题的方法分享。(二)研究课题的背景及意义在储量的大棚系统中,大棚系统的温度和湿度是两个极其重要的参数,温度过高会加快某些微生物的繁殖速度,同时加快对大棚中粮食的破坏程度。根据一些生物学家的研究表明:(1)细菌、真菌等许多微生物的适宜生长温度在28°C〜30°C之间,当环境温度低于20C时,大部分微生物的生长速度显著降低,当温度低于15C时,微生物的生长受到明显抑制在大棚中;(2)含水量在12%以内粮食是一个正常的状态,如果温度过高或者湿气太重致使粮食的含水量超过20%时,由于粮食中的水分过多,导致胚芽生长,胚芽的生长是的呼吸作用是升温的过程,进而导致粮食温度过高,加快微生物的生长,最终导致粮食的霉变、发烧等一些情况。据一些不完全的统计,我国每年都有大型的大棚由于粮食的霉变等致使粮食损坏数量可达数百亿吨。本次设计正是在这种背景下,寻求一种可以实时远程监测大棚中温度、湿度、同时还可以进行火灾预防的一种大棚监测系统。对大棚中的粮食温度和湿度进行实时的监测,从而达到保护大棚中粮食安全的作用。而且现有市场中的检测仪器都是只有检测功能,不能满足当今的物联网远程监测的要求,如何将检测仪器实施物联,并且同时具备多项功能也是本次研究的重点。(三)国内外的发展现状由于国内外的发展现状不同,下面从两个小节分别进行研究:国外发展现状国外的大棚检测技术最早是在20世纪60年代,著名的霍尼韦尔国际工程师Hughes使用氯化锂性元素快速测量小麦面粉中的水分的含量,把温度和湿度的传感器插入其中,根据等温曲线图找出样品的含水量。经过他们的反复测试,在10%-15%的含水量之间是,测量的精度可达到0.2%。随着科技的日益进步,晶体管的到来,1976年,他又发明了一种电子式的大棚温度监控装置,主要由二极管为测量的主要元件,分布于大棚之内,通过导线连接到外部的总控单元,总控单元中显示各个地点的温度值,这个装置同时具备温度报警功能,即某一个温度值过高时开启报警。2015年加拿大曼尼托巴大学的穆罕默德•阿塞等人提出了三维适量电磁成像系统可以很好的检测大棚中的粮食的情况,这个系统使用的有限元法对比度源反演的算法,通过在电解质图中观察粮食颗粒的形态,实现大棚的检测功能。国内发展现状国内的起步相对于国外速时间较晚一些,最早的大棚测温的方式是靠人工测量,将温度计放入长长的插杆中,然后插杆插入大棚中,进行多个地点的温度的测量,将得到的数据进行判断决定大棚中温度是否超过了正常值。这样的“铁探针”对大棚中选取的各个测量点有很大的局限性,而且随机性很强,不能反映真实的大棚中每一粒粮食的质量。随着我国科技的日益进步和电子器件的日益推广,在20世纪的80年代后,逐渐出现的一些温度传感器、湿度传感器、A/D数据采集器等一些电子元件大量运用到大棚检测系统中。一些高校的研究团队,比如:(1)太原理工大学杜文广教授和国家粮库徐州分库合作研制出无线粮情检测系统,并且还制作了虫害传感器,目前此系统已经在国家粮库徐州分库得到了大面积的运用;(2)南京农业大学沈明霞教授在无线粮情检测系统的基础之上,提出来EMC模型可以预先得到大棚中粮食的含水量多少,在实验室经过大量的试验后改进了ChunPfost模型,使得到的数据更为准确;(3)河南工业大学张元教授,根据电磁特性,将成熟的雷达探测技术首次试验到大棚中,提出来反透射式粮食水分电磁波检测法,并且为之构建了一套雷达探测粮食水分的系统。(四)研究对象的发展趋势随着科技的日益进步,传感器也变得更加精密,大棚大棚检测系统技术也变得愈来越加成熟。由在传感器使用方面,原来的电阻式传感器到现在的电容式、数字式传感器,测量的精度也在不断的提高;在控制模块方面,由早期的可编程逻辑控制器PDP、西门子的PLC到现在多种控制器8位处理器的51单片机、16位和32位处理器的STM32单片机、STM8单片机、AVR单片机等等,控制模块也可以根据需求来任意挑选;在信号的传递过程的方面,数字信号相对于模拟信号有更大的优点,可以减少由于信号在传递过程中的衰减和干扰等一些问题。[4]二、总体系统设计系统的设计采用经典的模块化结构,模块化结构目前大量运用到产品设计的方方面面。比如:建筑设计的模块化、汽车车体的模块化、生产监控系统的模块化、锻炼身体的模块化等等。总体系统设计中章节中首先将系统的框图进行举例,并且将控制关系进行简单的介绍,然后对本次设计的主要工作原理和技术路线进行规划。(—)系统整体框图系统整体框图介绍:在供电系统正常供电后,系统开始工作。单片机控制模块作为主要控制模块,同时对温度、湿度、烟感传感器的测量数据进行处理,并通过LCD1602液晶显示将数据实时显示,同时将数据通过数据传输模块进行传输,当数据不正常时触发报警电路。并将蜂鸣器发出的滴滴报警信息通过蓝牙模块传送到大棚监测人员的手机端蓝牙串口软件上。[5]卜面是系统整体的大致框图介绍:图2-1系统整体框图(二) 技术路线介绍本次课题的技术路线:以多种传感器采集的数据为主要研究对象,根据单片机对采集得到的不同数据进行处理,数据超过正常设定值进行报警,并且通过数据传输模块进行发送至大棚监测人员的手机端蓝牙串口软件上。⑹其中,采用温度传感器DS18B20和湿度传感器DHT11对大棚中的粮食温度、湿度进行快速检测,并通过液晶显示模块LCD1602实时显示在屏幕上,同时还具备防火灾报警功能和物联网远程监测功能,当烟感传感器检测到的数值超过正常值后进行报警功能,同时可以把检测的数据和报警实时的发送至手机APP中。(三) 工作原理介绍本次毕业设计项目的大致工作原理是:系统上电后,通过温度、湿度、烟感传感器对所采集到的相应数据首先传递给单片机进行数据的处理,单片机做出数据的处理后,将所需显示的数据发送至LCD1602液晶显示模块,当所采集的数据超过设定的安全值,蜂鸣器发出报警声,并且将信息通过数据传输模块将信息传递给用户手机APP上。三、硬件电路系统设计(―)总体硬件介绍本次设计中所采用的硬件都是比较常见的一些电子器件,比如单片机所采用的是STC系列单片机非常经典实用的89C52RC、显示模块采用的LCD1602、温度传感器采

用的DS18B20等等,在下面的小节中将对每一块硬件电路进行详细的介绍。(二)单片机最小系统电路选择方案(1):采用STC系列经典款单片机89C52RC。这款单片机对于毕业生设计来说非常合适,从开发设备要求上来说,需要的开发设备较低,仅仅需要一台电脑和一个最小系统板即可完成编程的工作;从开发周期上来说,51系列单片机采用C语言编程可移植性强,而且开发周期短。满足毕业生设计周期短,同时对作品的设计以及完成作品后毕业论文的撰写也提供了充裕的时间。方案(2):采用更加强大的STM32单片机,这款单片机无论是从处理器的运算速度还是外部I/O接口都比较51系列的单片机更加略胜一筹,STM32单片机可选择16或者32位,可根据实际需求选择不同的款型。但是,在程序编程和硬件设计方面与方案(1)比起来难度较大,需掌握更多的编程经验才可以完成任务。经过以上方案对比,比较适合本次设计的方案是方案(1)电路设计r»ii门iiS931.1L;:r»ii门iiS931.1L;:网区IiMUl*J!iwiptII山H3||W:IT?iAVMFMmi.t..弟■^1411丄、•匕』&T.MJ I心P21图3-2最小系统的电路图(三)LCD1602显示电路1.选择方案(1):采用液晶型显示器LCD1602,这款显示器可以显示字母、阿拉伯数字、标点符号,可以显示16个字符,共计两行。外部接口电路相对简单,编程起来也相对容易掌控,但是不可以显示汉字。

方案(2):采用液晶型显示器LCD12864,这款不仅可以显示字母、阿拉伯数字、标点符号,而且可以显示汉字,同时还带有字库,显示汉字时不需要使用汉字取模,显示的行数和字符数量较于方案(1)更加的丰富。方案(3):经过以上方案对比,本次设计中需要显示的数值有温度、湿度、烟感等,需要显示的量较少,采用方案(2)有些过于浪费,因此比较适合本次设计的方案是方案(1)电路设计LCD液晶显示电路图如下:LCD1GNBLCD1GNB图3-3LCD1602液晶显示电路图(四)温度检测电路1.温度传感器选择方案(1):数字式的温度传感器DS18B20,这种温度传感器可测量的温度范围较广-55°C~+125°C,准确度在10〜+85°C较为准确可达±0.5°C,分辨率非常高,最高可通过程序设定到0.0625°C;本身是单总线结构(三根线接口,一根信号线DQ,其余两根是电源线)使用起来可以十分的方便,可以节约许许多多的外部的逻辑电路。并且可以进行多点温度测试,出厂资料显示最多可以连接256个温度传感器。[7]方案(2):热电阻式PT1000温度传感器,这种传感器的工作原理是根据电阻中温度变化特性曲线所制造的测温度的器件,可测量的温度范围可根据实际需求进行不同等级的定制。在生活中,大量运用于电热水壶、茶壶等一些电器中,一些精度较高的质量较好的大量应用于电气化设备中。经过以上方案对比,比较适合本次设计的方案是方案(1)2.电路设计温度检测电路主要由防水型的温度传感器DS18B20、上拉电阻组成,如下图:图3-4系统整体框图(五)湿度检测电路湿度传感器选择方案(1):采用集成数字式温湿度传感器DHT11,这是一款温湿度复合在一起的传感器,可以把温湿度结合在一起测量,可靠性好,性能稳定。可测量的温度范围是0°C—50°C,测量误差在土2C;湿度范围是OC—50C,误差在土5%。分别率是16位,使用方便,可以直接与单片机相连接。[8]方案(2):采用原装瑞士进口温湿度传感器SHT10,这款温湿度传感器,抗腐蚀性,外部的防水罩防水性能好,传感器的寿命更长,而且适合高湿度的环境,但是价格较高。外部接口电路复杂。方案(3):经过以上方案对比,温湿度传感器DHT11温度测量范围较小,但是湿度满足课题需求。可以只使用湿度,温度采用DS18B20。综合考虑后,适合本次设计的方案是方案(1)电路设计湿度检测电路主要由DHT11组成,其中电路板采用插针和DTH11进行外接。其电路如下图所示:m7I内|p.DHin图3-5温度检测电路图(六) 烟感检测电路选择方案(1):采用火焰开关传感器,这种传感器是接触到明火火源触发,探测范围是760nm〜llOOrnn的火源,并且灵敏度可以通过电位器进行调节。方案(2):采用MQ_2烟雾传感器,主要的检测范围是可燃性气体以及烟雾,输出为模拟量电压,使用时需配合A/D转换器,使用寿命长,而且相对于方案(1)更加的稳定。经过以上方案对比,火灾检测仅仅如果使用火焰传感器有一定的局限性,而且检测的范围较小,不太适合大型大棚的环境。因此比较适合本次设计的方案是方案(1)电路设计烟感检测电路设计图如下:|阻心。3图3-6烟感检测电路图(七) 数据传输模块电路1.选择方案(1):采用RS-232串口通信,由于单片机的电平输出的是TTL的电平,电脑的串口是RS-232的就需要一个转换电路。STC51系列单片机带有一个全双工的串行通讯接口,因此这个在理论上是可以的。[9]方案(2):使用蓝牙模块进行数据传输,蓝牙模块在使用时可以直接插在程序的下载口,手机与蓝牙连接后,可以通过手机端的蓝牙串口软件进行通信。由于方案(1)中还需要在增加一个通讯电平的转换电路,增加了硬件设计的难度,考虑到制作时间的有限,本次设计中选择的方案是方案(1)图图3-8A/D模块电路图图图3-8A/D模块电路图电路设计数据传输模块电路设计图如下:图3-7数据传输电路图(八)A/D模块电路选择方案(1):采用8位分辨率、双通道A/D采集口转换的ADC0832,转换的时间是32微秒,功耗为15mw。这款芯片在以前小实验中曾经多次用到,在外观上,不仅占用电路板体积小,而且实用性较强,外部接口电路相对简单。[1。]方案(2):采用16位更高分辨率的A/D转换器、单通道A/D采集口转换ADS1110,工作方式为连续转换,几乎没有转换时间,功耗更低。这款芯片是由于较高的精度,一般用于比较精密的便携式仪器中。经过以上方案对比,方案(1)中芯片学过更容易上手使用,而方案(2)中的ADS1110在硬件电路的连接上虽然更加的简单,但是需要学习新的通信方式,而且程序编程上也更加复杂。因此,本次设计的方案是方案(1)电路设计A/D模块电路设计图如下:CSU3ver TCSCHOCLKCHIDOGNDDICLKDOni,与.WCOS32GNDADC0832四、软件设计(—)总体程序设计总体程序的设计是基于单片机C语言进行一步一步编程设计的,下面是本次设计中程序的流程框图:开始没有超过限值限值的比较初始化>数据传输模块上传数据结束限值的设置烟感数据采集湿度数据的采集单片机对数据的处理T超过限值温度数据的采集报警开始没有超过限值限值的比较初始化>数据传输模块上传数据结束限值的设置烟感数据采集湿度数据的采集单片机对数据的处理T超过限值温度数据的采集报警*数据的显示图4-1A/D系统流程框图总体程序设计中主程序是主要设计部分,部分程序的代码如下:voidmain(){

Init();Init_HC05();Init_Lcd1602();while(1){RH();Display。;Compare。;Key_Model();if(Monkey>150){Send_Data(Datapros(Ds18b20_ReadTemp()),DataHandling_ADC0832());Monkey=0;CiShu++;}}}(二)子程序流程设计子程序中主要由温度检测部分、湿度检测部分、烟感检测部分以及数据传输部分等组成。[11]温度检测子程序下面是温度检测子程序中摘取的一些初始化程序:ucharDs18b20_Init()//DS18B20ucharDs18b20_Init()//DS18B20初始化{uchari;{uchari;DSPORT=0;i=70;while(i--);DSPORT=1;〃将总线拉低480us〜960us//延时642us〃然后拉高总线,如果DS18B20做出反应会将在15us~60us后总线拉低i=0;while(DSPORT) //等待DS18B20拉低总线{Delay1ms(1);i++;if(i>5) //等待>5MSreturn0;〃初始化失败}return1; 〃初始化成功}voidDs18b20_WriteByte(uchardat)〃向18B20写入一个字节{uinti,j;for(j=0;j<8;j++){DSPORT=0; 〃每写入一位数据之前先把总线拉低1usi++;DSPORT=dat&0x01; 〃然后写入一个数据,从最低位开始i=6;while。--); //延时68us,持续时间最少60usDSPORT=1; 〃然后释放总线,至少1us给总线恢复时间才能接着写入第二个数值dat>>=1;}}湿度检测子程序下面是湿度检测子程序中摘取的一些程序代码:

ucharDs18b20_Init()//DS18B20ucharDs18b20_Init()//DS18B20初始化uchari;DSPORT=0;〃将总线拉低DSPORT=0;〃将总线拉低480us〜960usi=70;while(i--);//while(i--);//延时642usDSPORT=1;〃然后拉高总线,如果DS18B20做出反应会将在DSPORT=1;〃然后拉高总线,如果DS18B20做出反应会将在15us~60us后总线拉低i=0;while(DSPORT)//while(DSPORT)//等待DS18B20拉低总线Delay1ms(1);i++;if(i>5)//if(i>5)//等待>5MSreturn0;〃初始化失败return1;〃初始化成功//向//向18B20写入一个字节uinti,j;for(j=0;j<8;j++)DSPORT=0;〃每写入一位数据之前先把总线拉低1usi++;DSPORT=dat&0x01;〃然后写入一个数据,从最低位开始i=6;while(i--);//延时68us,持续时间最少60usDI=0;DI=0;DI=0;DI=0;DSPORT=1;才能接着写入第二个数值〃然后释放总线,至少1us给总线恢复时间dat>>=1;烟感检测子程序卜面是温度检测子程序中摘取的一些初始化程序:/*********延时函数~***********/voidDelay_ms_ADC0832(uintz){uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}写函数选通道voidWritByte_ADC0832(ucharbyte){uchari;for(i=0;iv3;i++){CLK=0;if(byte&0x01)DI=1;elsebyte>>=1;CLK=1;4.数据传输子程序卜面是数据传输子程序中摘取的一些程序代码:voidInit_HC05()〃串口初始化SCON=0X50;〃设置为工作方式1TM0D=0X20;〃设置计数器工作方式2SCON=0X50;〃设置为工作方式1TM0D=0X20;〃设置计数器工作方式2TH1=0Xfd;〃计数器初始值设置,注意波特率是9600的TL1=0xfd;ES=1;〃打开接收中断EA=1;〃打开总中断TR1=1;TL1=0xfd;ES=1;〃打开接收中断EA=1;〃打开总中断TR1=1;voidSend_HC05(char*s)〃串口通信处理(定变量voidSend_HC05(char*s)〃串口通信处理(定变量a)输出定量值〃注意:若单片机TXD(P3.1)无上拉能力,必须在P3.1端接上拉电阻。本次测试需要接上拉电阻ucharx;while(*s)x=*s++;ES=0;SBUF=x;//给SBUFSBUF=x;//给SBUF赋值awhile(!TI);〃如果满足TI==0就循环TI=0;〃给TITI=0;〃给TI赋值0;ES=1;voidSends_HC05(uchara)〃可输出变量值ES=0;SBUF=a;〃给SBUF赋值awhile(!TI);〃如果满足TI==0就循环ES=1;voidSends_HC05(uchara)〃可输出变量值ES=0;SBUF=a;〃给SBUF赋值awhile(!TI);〃如果满足TI==0就循环TI=0;〃给TI赋值0;ES=1;五、系统功能的调试与完善(—)系统的调试整个系统的调试按照单片机最小系统的调试、LCD1602显示电路的调试、温度检测电路的调试、湿度检测电路的调试、烟感检测电路的调试、数据传输模块电路的调试、A/D模块电路的调试这样的顺序分步进行。系统硬件调试在进行调试时,要先对各部件进行调试,以消除明显的硬件故障。在元件尚未完成的时候,使用诸如万用表之类的工具来检测各个元件,看看它们是否良好和有效。在完成了电路的焊接和未插上的主要元件之前,要用万用表对焊线进行检查,看看线路的接线,看看有没有短路。着重于系统总线(地址总线、数据总线、控制总线)有无短路现象;检查了电路,排除了电路的故障,然后用万用表测量了51MCU的插座、温湿度测量设备的插座、LCD1602的插座等的电压和极性,特别是对MCU插座的各个点的电压和极性进行了检测,发现点电位太高,不能与模拟器联机进行调试,以免损坏。在断电时将元器件插进,开机检查各部分的线路和元件是否正常,如果发现局部发热,应立即关掉电源,再进行一次测试,确认没有问题,并达到预期的效果后,才能进行硬件的调试。它的流程图见于图5-1。

系统软件调试该系统软件调试使用美国KeilSoftware公司开发的51系列C语言编程软件KeilC51。KeilC51软件为用户提供了大量的库函数以及功能强大的集成开发和调试工具。打开软件之后输入系统源程序,此时可以进行编译和连结。在当前项目中,请选择"Project—Buildtarget”,在当前项目中,若当前文件被更改,则该软件首先编译该文件,然后将其连接,以生成目标代码;若您选中“RebuildAlltargetfiles”,则会对当前项目中的所有文件进行编译,并进行链接,以保证最终生成的目标代码是及时更新,并保证该演示程序不存在任何差错和警告。如果编译成功,那么就说明它的语法没有问题,但也不能保证它没有逻辑上的问题,只有通过调试,不断地发现和解决这些逻辑上的问题,才能让它慢慢地达到它想要的效果。在进行调试时,可以选择“Debug—Start/StopDebugSession"菜单。只有在最快的速度下,一个程序才能通过。在侦错时,若程式有错误,可以立即进行程式的修正,但若要让程式有效,则必须离开侦错环境,重新编译、连结后,再进行侦错。联合调试对系统进行硬件和软件调试之后,需要将软件和硬件结合对系统进行联合调试。此时将软件调试中的程序通过烧录工具烧录至单片机中,将单片机控制单元安装至对应接口,对系统进行测试。经过联合测试,最终得出本设计可以正常工作,测得温度范围0〜80°C,湿度测试范围为25%-90%,此系统可以正常工作。(二)调试中遇到的问题及解决方法由于在调试中遇到的问题较多,在下面的章节中选取了一些比较经常会犯的错误进行举例分析。问题1:单片机下载不进去程序分析:单片机最小系统的调试是所有系统调试的基础,所有电路的正常运行都必须依托它。在单片机最小系统的调试时,下载不进去程序可能是以下几个原因:检查单片机的供电是否正常,可以使用万用表的电压档,对供电线路检查供电电压是否为5V,最后并对单片机两端的供电。[12]检查单片机最小系统电路中的晶振电路是否正常,其中,晶振电路使用的电容是27〜30pf,复位电路中使用的是10K电阻,并且检查按下复位键后是否能进行复位的效果。检查下载接口的接线顺序是否接线正确。问题2:LCD1602显示乱码分析:显示模块的正常显示需要在硬件电路和程序编程上同时没有任何问题才可以正常显示,只要有一个有问题,显示都会发生一些奇怪的现象。硬件电路上:检查接线的对应的接口是否正确,根据绘制的电路图和实际的电路板中的接线顺序对应一一进行查看。检查亮度调节电阻阻值的大小是否合适,当不确定哪一个阻值是比较合适的最佳亮度调节电阻时,可使用一个滑动变阻器来代替。程序编程上:检查寄存器RS端口、RW读写端口、RE使能端口三个端口的I/O是否正确。检查延时子程序是否符合LCD1602的时序逻辑问题3:传感器数据检测不正确分析:温度、湿度传感器无法检测数据或者得到的数据不正常都和LCD1602的调试方法基本类似,但是烟感传感器需要同时A/D转换器电路正常,得到的数据并且及时的传递给单片机进行处理才可以得到正常的烟感数据。[13]问题4:数据传输电路无法给手机传输数据分析:(1)程序中设置的波特率与单片机中使用的波特率不一致(2)传输的数据格式设置有误(三)改进方法与实际结果下面表格中是本次测量的一些数据和常规仪器测量的一些数据,如下表:表5.1测量数据与常规仪器测量数值表测量次数温度误差湿度值烟感度值第一次0.10.20.1第二次0.20.10.2第三次0.10.20.1经过改进和调试后,整个作品的实际的效果图如下:图5-1作品图结论由于作品和论文设计的有限,基于大棚温湿度控制系统设计这次设计中,所采用的硬件都是比较常见的一些电子器件来缩短制作周期,比如单片机所采用的是STC系列单片机非常经典实用的89C52RC、显示模块采用的LCD1602、温度传感器采用的DS18B20、数据传输模块采用了蓝牙模块等等。这次设计完成了以下功能:(l)DS18B20温度检测与在LCD1602显示屏上的显示功能;(2)DTH11湿度数据的采集与LCD1602显示屏上的显示功能;(3)烟感传感器对烟雾数据的采集和在LCD1602显示屏上的显示功能;(4)数据传输蓝牙模块数据传输的功能;(5)火灾时报警的功能。在老师和同学的帮助下完成了这次设计任务,其中有很多的不足之处,比如:(1)温度数据显示的精度有限,在温度的程序优化方面有待提高(2)主程序写的有些复杂,在老师的知道后,才发现可以使用更加简便的语句实现同样的功能(3)由于需要采集到的数据较多,数据传输的必须在所测得的数据稳定后才可以传输。[15]在这其中也遇到了一些大大小小的问题,在第五章节中把自己的解决的一些方法进行了分享。通过本次毕业设计的完成,让我学会如何更好的使用课堂上学习的基础知识并且灵活的运用到生活中。更让我体会到由理论到实际不是一个简单的过程,需要你用心去读懂每一个电子器件的参数,用程序来体会怎样自由控制。同时在做设计的过程中,更加深刻的认识到自己的优点和不足之处,对即将毕业进入社会中有很重要的磨练作用。附录1原理图远程实时监控系统附录附录2实物图附录附录2实物图Lrd附录3源程序#include"reg52.h" 〃此文件中定义了单片机的一些特殊功能寄存器#include"temp.h"#include"usart.h"#include"DHTll.h"#include"LCD1602.h"#include"ADC0832.h"#defineuintunsignedint〃对数据类型进行声明定义#defineucharunsignedcharcodeucharTABLE[]={'O',T,'2','3','4','5','6','7','8',9,''};charnum=0,a;ucharSMO_H=250,SMO_L=100,HUM_H=80,HUM_L=20,Temp_H=50,Temp_L=5; //SMO-->烟感值HUM-->湿度 Temp-->温度 H-->上限 L-->下限ucharKey_Data=0,Monkey=0;ucharCiShu,WenDu,ShiDu,YanGan,TempS;sbitKey_M=P1A5;sbitKey_U=卩1人6;sbitKey_D=P1A7;sbitBuzzer=P3A6;voidInit(){TMOD=0x01; 〃定时器模式1TH0=(65536-45872)/256;//载入高八位TL0=(65536-45872)%256; 〃载入低八位EA=1;ET0=1;TR0=1;}intDatapros(inttemp) 〃温度读取处理转换函数{floattp;if(temp<0) 〃当温度值为负数{TempS=1;if(Key_Data=0)Write_Charstr_Lcd1602(6,2,"-"); // -〃因为读取的温度是实际温度的补码,所以减1,再取反求出原码temp=temp-1;temp=〜temp;tp=temp;temp=tp*0.0625*100+0.5;〃留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点〃后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就〃算加上0.5,还是在小数点后面。}else{TempS=0;if(Key_Data=0)Write_Charstr_Lcd1602(6,2,"");tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量〃如果温度是正的那么,那么正数的原码就是补码它本身temp=tp*0.0625*100+0.5;〃留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点〃后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就〃算加上0.5,还是在小数点后面。}returntemp;}voidDisplay_SMO(){Write_Charstr_Lcd1602(0,1,"SMO_H:");Write_Char_Lcd1602(6,1,SMO_H/100);Write_Char_Lcd1602(7,1,SMO_H%100/10);Write_Char_Lcd1602(8,1,SMO_H%10);Write_Charstr_Lcd1602(12,1," ");Write_Charstr_Lcd1602(0,2,"SMO_L:");Write_Char_Lcd1602(6,2,SMO_L/100);Write_Char_Lcd1602(7,2,SMO_L%100/10);Write_Char_Lcd1602(8,2,SMO_L%10);Write_Charstr_Lcd1602(12,2," ");voidDisplay_HUM(){Write_Charstr_Lcd1602(0,1,"HUM_H:");Write_Char_Lcd1602(6,1,HUM_H/10);Write_Char_Lcd1602(7,1,HUM_H%10);Write_Charstr_Lcd1602(8,1,"%");Write_Charstr_Lcd1602(12,1," ");Write_Charstr_Lcd1602(0,2,"HUM_L:");Write_Char_Lcd1602(6,2,HUM_L/10);Write_Char_Lcd1602(7,2,HUM_L%10);Write_Charstr_Lcd1602(8,2,"%");Write_Charstr_Lcd1602(12,2," ");}voidDisplay_Temp(){ucharT_H,T_L;T_H=Temp_H;T_L=Temp_L;if((Temp_H>0IITemp_H=0)&&Temp_H<200){Write_Charstr_Lcd1602(0,1,"Temp_H:");Write_Char_Lcd1602(8,1,T_H/100);Write_Char_Lcd1602(9,1,T_H%100/10);Write_Char_Lcd1602(10,1,T_H%10);Write_Charstr_Lcd1602(11,1,"C");Write_Charstr_Lcd1602(15,1,"");Write_Charstr_Lcd1602(Write_Charstr_Lcd1602(#,1," ");Write_Charstr_Lcd1602(0,2,"");Write_Charstr_Lcd1602(1,2,"Temp:");Write_Char_Lcd1602(7,2,temps/10000);Write_Char_Lcd1602(8,2,temps%10000/1000);Write_Char_Lcd1602(9,2,temps%1000/100);Write_Charstr_Lcd1602(10,2,".");Write_Char_Lcd1602(11,2,temps%100/10);Write_Char_Lcd1602(12,2,temps%10);Write_Charstr_Lcd1602(13,2,"C");Write_Charstr_Lcd1602(14,2,"");}voidDisplay(){switch(Key_Data){case0:Display_Lcd1602(Datapros(Ds18b20_ReadTemp()),DataHandling_ADC0832());break;case1:Display_SMO();Write_Charstr_Lcd1602(9,1,"<--");Write_Charstr_Lcd1602(9,2," ");break;case2:Display_SMO();SMO_L=50;SMO_L=50;Write_Charstr_Lcd1602(9,2,break;case3:Display_HUM();Write_Charstr_Lcd1602(9,1,"<--n);Write_Charstr_Lcd1602(9,2," ");break;case4:Display_HUM();Write_Charstr_Lcd1602(9,1," ");Write_Charstr_Lcd1602(9,2,"<--n);break;case5:Display_Temp();Write_Charstr_Lcd1602(12,1,"v--");Write_Charstr_Lcd1602(12,2," ");break;case6:Display_Temp();Write_Charstr_Lcd1602(12,1," ");Write_Charstr_Lcd1602(12,2,"<--");break;}}voidKey_Model(void){if(Key_M=0){Display();if(Key_M=0){Key_Data=Key_Data+1;if(Key_Data==7)Key_Data=0;while(!Key_M)Display();}}if(Key_Data!=0){if(Key_U=0){Display();if(Key_U=0){switch(Key_Data){case1:SMO_H=SMO_H+5;if(SMO_H>250)SMO_H=SMO_L+10;

break;case2:SMO_L=SMO_L+5;if(SMO_L>(SMO_H-10))break;case3:HUM_H=HUM_H+5;if(HUM_H>95)HUM_H=HUM_L+10;break;case4:HUM_L=HUM_L+5;if(HUM_L>(HUM_H-10))HUM_L=5;break;case5:Temp_H=Temp_H+5;if(Temp_H>115&&Temp_H<175)Temp_H=Temp_L+10;break;case6:if((Temp_L>175&&Temp_H>175)II(Temp_L<175&&(Temp_H>5&&Temp_H<175))){Temp_L=Temp_L+5;if(Temp_L>Temp_H-10)Temp_L=-40;}elseif(Temp_L>175&&(Temp_H>5&&Temp_H<175))Temp_L=Temp_L+5;elseif(Temp_L>175&&Temp_H==5){Temp_L=Temp_L+5;SMO_L=SMO_LSMO_L=SMO_L-5;SMO_L=SMO_LSMO_L=SMO_L-5;if(Temp_L=0)Temp_L=-40;}elseif(Temp_L>175&&Temp_H==0){Temp_L=Temp_L+5;if(Temp_L=-5)Temp_L=-40;}break;}while(!Key_U)Display。;}}if(Key_D=0){Display();if(Key_D=0){switch(Key_Data){case1:SMO_H=SMO_H-5;if(SMO_H<SMO_L+10)SMO_H=250;break;case2:if(SMO_L<50)SMO_L=SMO_H-10;break;case3:HUM_H=HUM_H-5;if(HUM_H<HUM_L+10)HUM_H=95;break;case4:HUM_L=HUM_L-5;if(HUM_L<5)HUM_L=HUM_H-10;break;case5:if((Temp_H<175&&Temp_L<175)II(Temp_H>175&&Temp_L>175)){Temp_H=Temp_H-5;if(Temp_H<Temp_L+10)Temp_H=115;}elseif(Temp_H<175&&(Temp_L>175&&Temp_L<-5))Temp_H=Temp_H-5;elseif(Temp_H<175&&Temp_L=-10){Temp_H=Temp_H-5;if(Temp_H==-5)Temp_H=115;}elseif(Temp_H<175&&Temp_L=-5){Temp_H=Temp_H-5;if(Temp_H=0)Temp_H=115;}break;case6:Temp_L=Temp_L-5;if(Temp_L<215&&Temp_L>175)Temp_L=Temp_H-10;break;}while(!Key_D)Display();}}}}voidSend_Data(inttemps,uintMQ){ucharSend_TH,Send_TL;Send_TH=Temp_H;Send_TL=Temp_L;Send_HC05("\n");Send_HC05("NO.:");Sends_HC05(TABLE[CiShu/100]);

Sends_HC05(TABLE[CiShu%100/10]);Sends_HC05(TABLE[CiShu%10]);Send_HC05("\n");Send_HC05("\n");Send_HC05("SMO:");Sends_HC05(TABLE[MQ/100]);Sends_HC05(TABLE[MQ%100/10]);Sends_HC05(TABLE[MQ%10]);Send_HC05("\n");YanGan=MQ;Send_HC05("SMO_H:");Sends_HC05(TABLE[SMO_H/100]);Sends_HC05(TABLE[SMO_H%100/10]);Sends_HC05(TABLE[SMO_H%10]);Send_HC05(nSMO_L:n);Sends_HC05(TABLE[SMO_L/100]);Sends_HC05(TABLE[SMO_L%100/10]);Sends_HC05(TABLE[SMO_L%10]);Send_HC05("\n");Send_HC05("HUM:");Sends_HC05(TABLE[U8RH_data_H/10]);Sends_HC05(TABLE[U8RH_data_H%10]);Send_HC05("%\n");〃烟雾值〃湿度值ShiDu=U8RH_data_H;〃烟雾值〃湿度值Send_HC05(nHUM_H:n);Sends_HC05(TABLE[HUM_H/10]);Sends_HC05(TABLE[HUM_H%10]);Send_HC05(n%HUM_L:n);Sends_HC05(TABLE[HUM_L/10]);Sends_HC05(TABLE[HUM_L%10]);Send_HC05("%\n");if(TempS=0)Send_HC05("Temp:");if(TempS=1)Send_HC05("Temp:-H); //温度值Sends_HC05(TABLE[temps/10000]);Sends_HC05(TABLE[temps%10000/1000]);Sends_HC05(TABLE[temps%1000/100]);Send_HC05(".,Sends_HC05(TABLE[temps%100/10]);Sends_HC05(TABLE[temps%10]);Send_HC05("C\n");if(TempS=0)WenDu=(temps/10000)*100+(temps%10000/1000)*10+(temps%1000/100);if(TempS=1)WenDu=-(temps/10000)*100+(temps%10000/1000)*10+(temps%1000/100);if((Temp_H>0IITemp_H=0)&&Temp_H<200)Send_HC05(nTemp_H:n);Sends_HC05(TABLE[Send_TH/100]);Sends_HC05(TABLE[Send_TH%100/10]);Se

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论