基于物联网的温室大棚监测系统_第1页
基于物联网的温室大棚监测系统_第2页
基于物联网的温室大棚监测系统_第3页
基于物联网的温室大棚监测系统_第4页
基于物联网的温室大棚监测系统_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

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

文档简介

PAGE4PAGE题目基于物联网的温室大棚监测系统目录TOC\o"1-2"\h\u6363摘要 II245101引言 5325171.1课题背景和意义 5140931.2国内外发展现况 5144122温室大棚监测系统系统方案设计 7142672.1设计目标 7292702.2方案论证 742252.3系统方案 887003温室大棚监测系统系统硬件电路设计 12265733.1传感器节点电路设计 12115213.2协调器节点电路设计 15187164温室大棚监测系统系统软件设计 17252374.1协调器节点程序设计 17312304.2传感器节点程序设计 22165694.3上位机程序设计 26236395调试和结果 33138265.1硬件调试 33285765.2软件调试 34190315.3调试结果 37207866总结和展望 38119196.1总结 38235206.2展望 3829218参考文献 3918797致谢 4122347附录Ⅰ协调器节点程序清单 423230附录Ⅱ传感器节点程序清单 4916717附录Ⅲ上位机程序清单 56

摘要摘要:物联网作为信息产业的第三次浪潮,在传统农业向现代农业的升级改造中将会发挥重要的作用,而基于物联网的智慧农业将会是一个新的农业形态。物联网技术作为农业现代化的技术支撑,在农业生产和科研中的应用将会加快现代农业的发展。农业环境监控作为现代农业的重要组成部分,是掌握农业环境信息和农作物生长状况的有效手段。在农业生产过程中,土壤温度、土壤湿度、环境温度、环境湿度、雨量、风速、CO浓度、水环境pH值等多种自然因素共同影响农作物的生长。利用传感器采集有效温度信号并利用ZigBee无线网络对数据进行传输是本课题的主要研究内容。本课题主要是通过无线传感技术,以CC2530模块为核心,对温度数据进行采集和传输,并在PC机上采用上位机进行温室大棚监测系统,在温度超出正常范围时发出报警。本课题实现了以一个ZigBee协调器节点和一个传感器节点来构建ZigBee无线网络,然后进行数据的传输,用串口将数据发送到上位机进行显示,并在温度超出阈值设定范围时发出报警。相较于国内其他大田农作物温室大棚监测系统系统,本设计具有研发成本低,工作周期长,检测过程简单,结果可靠等优点。关键词:温室大棚监测系统,ZigBee,无线传感技术,CC2530

ApplicationofInternetofThingsinAgriculturalMonitoringAbstractUsingsensorstocollecteffectivetemperaturesignalsandZigBeewirelessnetworktotransmitdataisthemainresearchcontentofthistopic.Thistopicismainlythroughwirelesssensortechnology,takingCC2530moduleasthecore,collectingandtransmittingtemperaturedata,andusingPCfortemperaturemonitoring,alarmingwhenthetemperatureexceedsthenormalrange.Inthispaper,aZigBeecoordinatornodeandasensornodeareusedtoconstructtheZigBeewirelessnetwork,andthenthedataistransmitted.Thedataissenttothehostcomputerbyserialportfordisplay,andanalarmisgivenwhenthetemperatureexceedsthethresholdsettingrange.Comparedwithotherdomesticagriculturaltemperaturemonitoringsystems,thisdesignhastheadvantagesoflowresearchanddevelopmentcost,longworkingcycle,simpledetectionprocessandreliableresults.Keywords:temperaturemonitoring,ZigBee,wirelesssensortechnology,CC25301引言1.1课题背景和意义大棚日常工作是防潮、防腐、防霉,为了保证日常工作的顺利进行,必须加强大棚的温室大棚监测系统。传统的方法是用湿度计,湿度计和手动检测双金属测量仪等检测设备,不符合温度和湿度要求大棚通风、去湿和冷却。这种手工测试方法费时费力,效率低,温度误差大,随机性强,因此需要一种成本低、使用方便、测温准确的温度控制系统。作物作为大棚内最重要的物资一种,做好它的种植尤其关键。一般温度对微生物的生长、繁殖有影响,大多数菌种生长繁殖的适宜温度是28-30°C。控制温度种植作物能保持作物较好的品质,使作物在种植期间保持一定的温度水平,达到安全种植的目的,是一种集安全、经济、绿色的先进种植技术,已成为当今科学种植的技术发展的新方向。作为本系统采用的单片机技术,已经普及到我们的生活、工作、科研各个领域,已经成为一个比较成熟的技术。随着无线传感器网络技术、嵌入式技术和通信技术的快速发展与不断提高,物联网随之产生,而将物联网与农业的结合也促进了现代农业的快速发展。将物联网技术投入到农业生产和科研中,可以改变农业生产方式与管理水平,对加速我国农业现代化发展,实现智慧农业、智能农业具有极大的促进作用。物联网技术可以在多个农业领域得到广泛应用,其中有农作物生产过程的远程监控与精细管理、农业水产养殖的监控、农产品安全可追溯领域等,可以看到基于物联网的智慧农业,是现代信息技术对农业领域的变革,在物联网等信息技术的影响下,传统农业会在很短的时间内发生巨大变革。1.2国内外发展现况国外发达国家在智能大棚的建设和使用方面通过不断加大力度的投入和对农户的高额财政补贴使得智能大棚得以迅速的发展。在2007年,荷兰、以色列、澳大利亚以及美国等欧美的发达国家和地区在控制光照,水、肥混合灌溉等方面己经运用了自动化程度高的设备,如照明设施、滴灌、喷灌等。这些国家主要通过对采光、供水和供肥等大田农作物生产环节根据农作物的生长需求设计相应的运行程序,然后通过计算机对环境的监测和控制来实现替代人工劳力并使智能大棚内农作物处于最佳生长状态的目的。荷兰、以色列、澳大利亚以及美国等国家的智能大棚技术在经过多年的发展和积累后,开始加大力度利用信息、电气等学科的先进技术与大田农作物生产的进行结合,不断推动农作物在节约人力、物力等资源的同时可以提高产量和质量,这也不断增长了上述国家在这些方面的发展和应用经验。大棚也经历了由低档到高档,由传统到现代得不断更新与发展。随着大棚技术的普及,大棚数量不断增多,大棚的温度控制成为一个难题。

2温室大棚监测系统系统方案设计2.1设计目标本设计主要是通过无线传感技术来采集和传输有效数据,通过CC2530无线射频模块建立起无线传输网络,温度传感器将采集到的信号转换为电信号,然后通过无线传输网络向协调器节点发送,协调器对数据经过处理后决定是否发出警报,并将数据传输到上位机。所以本设计要求能够采集用温度传感器采集有效信号、建立无线传输网络、数据能够一步步向上传输。所以本方案的设计目标如下:(a)确定需要检测的物理参数的种类,选择合适的传感器进行数据采集;(b)建立ZigBee无线传感网络,实现无线通讯和数据传输;(c)设计出系统的硬件模块,并编写各模块所需要的程序;(d)对采集到的数据进行转换,并对温度数据进行判断后决定是否报警。2.2方案论证本设计的主要内容是基于ZigBee无线网络的数据采集和传输。本专业大学期间接触过的无线通信手段较多,而且都已经比较成熟,较为常用的有蓝牙、WiFi、ZigBee等等。表2-1是对这几种常见的无线通信方式从工作频率、传输距离,节点数、功耗等方面的一个比较。表2-1几种常见无线通信平台的比较蓝牙WifiZigBee工作频率(Hz)2.4G2.4G2.4G,868/915M最远传输距离(m)1025~10010~100最大传输速率1Mbps11Mbps250kbps,20/40kbps最大节点数73265000最大功耗(mW)10010030传输内容语音、数据语音、数据数据通过表2-1的数据我们可以看到,分别用蓝牙、WIFI及ZigBee作为短距离无线通信手段时,都采用了相同的2.4GHz免费频段,而ZigBee的868/915MHz主要是在欧美地区有使用,国内使用不多。蓝牙和WIFI在作为短距离无线通信手段时,都有非常高的数据传输速率,同时也都支持数据及语音信号的传输,这样看来用ZigBee作为无线通信手段显得毫无竞争优势,但是ZigBee的主要使用领域在于无线智能控制方面,并不需要太大的数据吞吐量,ZigBee作为无线通信手段的最突出优点在于其有着极低的功耗,几节干电池就能让其正常工作几个月甚至几个月,ZigBee的另一个突出优点就是组网方便,一个子ZigBee无线网络中最多可以容纳多达65000个子节点,可以组成各种拓扑结构的网络如星形、树形等,子网络又可以构成更大的网络,所以ZigBee无线网络有着极大的的容量,并且如果ZigBee网络中的某一个子节点出现故障,并不会影响其他节点的工作,处理故障节点时也不需要关闭整个系统,该子节点更换后就可以自动加入到原先的无线网络中,因此ZigBee的维护费用将会非常低,ZigBee的大容量和低维护特性使它可能成为实现物联网构想的基础。ZigBee网络还有一个优点就是ZigBee协议中有专门的数据加密模块,可以对传送的数据进行加密处理,所以ZigBee的安全性非常好。ZigBee的这些特性是其他两种通信平台没有的。通过以上比较,认为ZigBee是构建该系统的最佳硬件平台。上位机采用PC机为载体即可,PC机的编程环境通用,程序的开发周期短,效率高,易于维护。2.3系统方案2.3.1硬件整体框架整个设计由Zigbee无线网络和上位机监测系统组成,如图2-1所示。图2-1系统整体结构框图ZigBee终端节点(传感器节点):传感器和对应的终端节点组合形成完整的终端信号采集节点,主要功能是利用传感器采集的温度数据,进行一定的变换后发送到Zigbee网络中。协调器节点:协调器节点则是一个全功能的节点,传感器节点通过ZigBee无线网络将数据发送到协调器节点,经过一定程序的汇总和处理后,通过串口向上位机检测系统进行传输。上位机检测系统:它主要是接收协调器发出的数据,将数据进行显示、分析、存储以及调取等,通过检测系统,可以直观地得出大田农作物的工作状态是否正常。2.3.2无线传感器网络设计无线传感器网络节点的设备类型主要是分为协终端节点、路由节点和协调器。对于协调器节点,我们要用协调器去建立一个ZigBee无线网络,首先初始化CC2530,接下来初始化协议栈,然后要做的就是用程序建立一个新的网络,确定网络的ID号和频道号,之后程序就开始开始进入一个监听状态,等待新的节点加入无线网络,如果有新的设备请求加入网络,那么就为它分配一个网络地址并允许它加入网络。协调器接收终端设备通过无线网络发送来的信息,并通过串口发送给上位机,或者是从上位机得到命令,将命令发送到终端设备。对于路由器、终端节点,一样也要初始化CC2530,然后初始化协议栈。然后编写程序开始搜索网络,搜索网络时,申请加入该无线网络,之后终端节点进入待机休眠状态。如果终端传感器有信息要发送到协调器,或者是接收到协调器的命令,则会唤醒设备,进行无线发送或接收信息。当事件处理完时,终端节点又重新进入待机休眠状态。2.3.3大田农作物工作状态性能指标反映大田农作物工作状态是否正常的性能指标有很多,如果要对大田农作物的各种物理参数进行全面检测难免会造成硬件庞大、数据繁杂等问题,因此在检测指标上,要选择最能反映大田农作物工作状态的指标。以下是主要的检测指标:(a)加速度检测,利用振动信号检测技术,使用加速度传感器采集大田农作物在工作时的振动信号,这种技术可以采集各种类型、各种工作状况下的大田农作物振动信号,实用性非常强,缺点是采集到的振动信号很容易受到工作环境的影响,且会产生大量的噪声,信号采集完成以后,还需要我们队对噪声信号进行滤波等处理,然后才能较好的振动信号检测效果,所以相对比较麻烦。(b)声学检测,声学诊断技术是一种使用声学传感器(如声发射传感器等)来采集大田农作物在工作时因故障而产生的弹性波信号的先进技术。这种技术的目的是采集大田农作物工作时发出的高频应力波信号,这样的信号采集方式不容易受到工作环境噪声的干扰,能够比较容易地直接检测出故障,而且效果比较好。但是声学诊断技术成本相对是比较高的,不适合在生产实际中大量应用,实用性不强。(c)温度检测,温度诊断技术即监测大田农作物在工作时的温度信号,这种技术使用起来相对简单,实用性高,而且大田农作物的工作出现故障多可反应为大田农作物温度的显著升高。因此,就技术指标和成本来看,要对大田农作物工作状态的进行监测,选择对大田农作物进行温室大棚监测系统最为合适。2.3.4硬件模块与开发环境选择ZigBee射频模块选择CC2530,简单的温室大棚监测系统只需要一块ZigBee协调器和一个ZigBee传感器节点即可。CC2530是用于2.4-GHz

IEEE802.15.4、ZigBee和RF4CE应用的一个真正的片上系统(SoC)解决方案。它能够以非常低的总的材料成本建立强大的网络节点。CC2530结合了领先的RF收发器的优良性能,业界标准的增强型8051CPU,系统内可编程闪存,8-KBRAM和许多其它强大的功能。CC2530有四种不同的闪存版本:CC2530F32/64/128/256,分别具有32/64/128/256KB的闪存。CC2530具有不同的运行模式,使得它尤其适应超低功耗要求的系统。运行模式之间的转换时间短进一步确保了低能源消耗。我们选择版本为CC2530zdk的CC2530开发板,包括Q2530EB板一块和Q2530BB板一块,Q2503RF射频模块两块,天线两根以及串口线一根。传感器方面选择DHT11,DHT11虽然为温湿度传感器,但它对环境变化敏感,简单易用且性能可靠。仿真器选择TICC系列的SmartRF04EB。软件方面,编写ZigBee的代码以C语言完成,编译环境选择IAREW8051-8.1。与KeilC类似,IAR也是一个用于单片机程序开发的集成开发环境,它对CC2530提供完美的支持,因此在大对数针对CC2530(或者同类型)芯片的开发中有着广泛的用途。上位机的编写选择C#,在语言选择方面,用C#语言强大的控件功能,可以很方便地设计出我们需要的界面,对串口的数据进行接收和处理时我们可以借助使用SerialPort类。在.NETFramework2.0中为用户提供了SerialPort类,该类主要实现串口数据通信等,有了SerialPort类,我们可以很容易从串口接收到由协调发送来的温度数据,实现串口通信。编译环境选择VisualStdio2010。

3温室大棚监测系统系统硬件电路设计3.1传感器节点电路设计3.1.1硬件框图图3-1是传感器节点的硬件电路框图,主要由传感器电路、数据处理电路等组成。图3-1传感器节点硬件框图3.1.2ZigBee模块电路设计本课题设计的数据处理收发模块采用TI(TexasInstruments)的CC2530芯片,CC2530是用于IEEE802.15.4、ZigBee和RF4CE应用的片上系统(SoC)解决方案。CC2530可以以非常低的成本构建起非常强大的无线网络。CC2530射频收发模块结合了领先的RF收发器的性能,CPU采用增强型8051,系统内可编程闪存、8-KBRAM、5通道DMA、8通道14位精度AD转换器、IR发生电路、以及硬件支持CSMA/CA等功能。CC2530有四种不同的闪存版本:CC2530F32/64/128/256,分别为32/64/128/256KB的闪存。本系统设计使用CC2530F256为主控芯片,它具有256KB的超大程序存储空间。CC2530还具有不同的运行模式,使得它非常适合超低功耗要求的系统。各种运行模式之间的切换时间很短,这样就进一步降低了它对能源的消耗,仅仅几节干电池就能让它工作半年以上甚至数年之久。图3-2是CC2530的基本外围电路,包括晶振电路、复位,以及各个端口的初始化,并且CC2530内置射频模块,CC2530模块及其外围电路如图3-2所示。图3-2CC2530外围电路3.1.3传感器电路设计在本系统设计中,需要采集的物理信号为温度信号,可以选择用于采集温度信号的传感器有很多,这里选择DHT11,DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式存在OTP内存中,传感器内部在检测型号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,使其成为该类应用中,在苛刻应用场合的最佳选择。产品为4针单排引脚封装,接上电平,数据,接地脚即可使用,且非常灵敏,广泛应用于大田农作物大棚测温,洁净室测温,汽车内数据记录等各种非极限温度场合。其适应电压范围更宽,DHT11的工作电压范围为3.0~5.5V。图3-3是DHT11的接线电路图。图3-3DHT11接线电路3.1.4电源电路设计在本系统设计中,采用3节干电池为CC2530射频收发模块供电,由于CC2530在工作时所需的能耗非常小,采用干电池供电足以满足CC2530长达几个月的正常工作,且使用非常方便。干电池供电经过TPS79333稳压后转换成3.3V分别向CC2530系统和传感器电路供电。保证了系统器件工作的稳定和安全。图3-4电源电路3.2协调器节点电路设计3.2.1协调器节点硬件框架设计作为协调器,它的核心器件依旧是CC2530,协调器节点的电路框架如图3-5所示。图3-5协调器节点电路3.2.2其他模块电路设计LCD显示屏可以在我们进行调试时方便地进行提示,如显示模块功能,显示网络组建过程以及显示网络ID等等。图3-6是LCD显示的接口电路。图3-6LCD接口电路协调器的一个重要功能就是与上位机进行串口通信,本设计中采用MAX232进行电平转换,电路图如图3-7所示。图3-7串口电路

4温室大棚监测系统系统软件设计4.1协调器节点程序设计协调器节点的主要工作任务就是新建一个ZigBee网络并监听有无另外的节点请求加入网络,若有则同意加入并开始接收数据处理后向上位机传输。设备初始化完成之后就可以开始扫描信道并建立网络了,若无合适信道就中断进程,网络建立完成后启动监听程序,等待传感器节点来加入网络,然后接受数据。图4-1自行设计的协调器节点工作的流程。图4-1协调器节点工作流程组网过程必须在协议栈中进行,在安装好Z-stack协议栈后,我们就可以利用协议栈开始编写自己的工程了,协议栈中我们需要关注的是ZMain层和App层,ZMain层包含了主函数和一些硬件初始化的相关函数,所有C类程序都由main函数开始,Z-stack中main函数代码如下:intmain(void){//Turnoffinterruptsosal_int_disable(INTS_ALL);//InitializationforboardrelatedstuffsuchasLEDsHAL_BOARD_INIT();//Makesuresupplyvoltageishighenoughtorunzmain_vdd_check();//InitializeboardI/OInitBoard(OB_COLD);//InitialzeHALdriversHalDriverInit();osal_nv_init(NULL);ZMacInit();zmain_ext_addr();zgInit();#ifndefNONWK//SincetheAFisn'tatask,callit'sinitializationroutineafInit();#endif//InitializetheoperatingsystemInitializetheoperatingsystemosal_init_system();osal_int_enable(INTS_ALL);InitBoard(OB_READY);zmain_dev_info();/*DisplaythedeviceinfoontheLCD*/#ifdefLCD_SUPPORTEDzmain_lcd_init();#endif#ifdefWDT_IN_PM1/*IfWDTisused,thisisagoodplacetoenableit.*/WatchDogEnable(WDTIMX);#endifosal_start_system();//NoReturnfromherereturn0;//Shouldn'tgethere.}在main函数中,我们对硬件,电压,驱动等进行了一系列的初始化和必要的检查,而osal_init_system函数中,比较重要的一项就是初始化系统任务,右键点击gotodefinitionofsal_start_system,进入到osal_init_system函数内,我们可以看到osalInitTasks这一函数,即初始化系统任务,在这一函数中,我们作为用户可以开始创建自己的任务号,然后对自己的一系列任务参数进行初始化,并调用自己的任务处理函数,用户的操作就通过taskID与操作系统进行关联,用户需要进行的工作都在App层进行实现,初始化完成后,通过osal_start_system函数操作系统开始工作,右键点击gotodefinitionofsal_start_system,我们跳转到osal_start_system函数内部,这个函数是操作系统轮询的主要函数,它会查找发生的事件然后调用相应的事件执行函数,如果没有事件发生,那么就会进入休眠模式,这个函数永远不会返回。协调器节点函数清单如下:表4-1协调器节点函数清单函数功能voidGenericApp_Init(bytetask_id)初始化函数UINT16GenericApp_ProcessEvent(bytetask_id,UINT16events)任务事件处理函数voidGenericApp_MessageMSGCB(afIncomingMSGPacket_t*pkt)数据处理与串口发送函数uint8*osal_msg_receive(uint8task_id)数据接收函数主要代码如下:UINT16GenericApp_ProcessEvent(bytetask_id,UINT16events)//任务事件处理函数{afIncomingMSGPacket_t*MSGpkt;if(events&SYS_EVENT_MSG){MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(GenericApp_TaskID);while(MSGpkt){switch(MSGpkt->hdr.event){caseAF_INCOMING_MSG_CMD:GenericApp_MessageMSGCB(MSGpkt);break;default:break;}osal_msg_deallocate((uint8*)MSGpkt);MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(GenericApp_TaskID);}//returnunprocessedeventsreturn(events^SYS_EVENT_MSG);}return0;}我们用GenericApp_ProcessEvent函数负责处理操作系统的任务事件,包括接收处理数据包并处理出具包中的消息,获取网络状态,判断网络类型并返回未处理的任务事件的任务号。voidGenericApp_MessageMSGCB(afIncomingMSGPacket_t*pkt){unsignedcharbuffer[2];unsignedcharWenDuChars[4];P1DIR|=0xff;LED1=0;switch(pkt->clusterId){caseGENERICAPP_CLUSTERID:osal_memcpy(buffer,pkt->cmd.Data,2);if(buffer[0]!=0){WenDuChars[0]='R';WenDuChars[3]='#';WenDuChars[1]=buffer[0]/10+'0';WenDuChars[2]=buffer[0]%10+'0';HalUARTWrite(0,WenDuChars,4);}break;}}我们用GenericApp_MessageMSGCB函数负责接收数据包,对数据进行处理后将数据向串口发送。4.2传感器节点程序设计传感器节点搜索网络并请求加入,然后采集数据发送到协调器,自行设计的的工作流程如图4-2所示。我们对设备进行初始化之后,进行信道扫描,经扫描后发现合适的网络则表明协调器已经建立一个合适的ZigBee网络等待传感器节点加入,选择网络后还要选择父节点,通过父节点来加入网络。发送数据包请求与父节点进行绑定,绑定之后就可以就行数据的传输了,没一秒采集一次数据并发送到协调器。图4-2传感器节点工作流程图对于操作系统来说,协调器节点和传感器节点的不同只是他们执行各自的任务,对于操作系统来说是一样的,具体的任务函数在App层中进行开发。传感器节点的主要函数清单如表4-2所示。表4-2传感器节点函数清单函数功能voidDelay_us(void)1us延时voidDelay_10us(void)10us延时voidDelay_ms(uintTime)nms延时voidTemp_test(void)温度读取函数voidCOM(void)温度数据写入voidDHT11(void)数据接收处理voidGenericApp_SendTheMessage(void)数据发送voidGenericApp_Init(bytetask_id)终端板初始化UINT16GenericApp_ProcessEvent(bytetask_id,UINT16events)任务处理函数主要代码如下:voidGenericApp_SendTheMessage(void){externunsignedcharWenDu;unsignedchartheMessageData[10]="EndDevice";afAddrType_tmy_DstAddr;externvoidTemp_test(void);//温度读取函数my_DstAddr.addrMode=(afAddrMode_t)AddrBroadcast;my_DstAddr.endPoint=GENERICAPP_ENDPOINT;my_DstAddr.addr.shortAddr=0x0000;theMessageData[0]=WenDu;AF_DataRequest(&my_DstAddr,&GenericApp_epDesc,GENERICAPP_CLUSTERID,osal_strlen("EndDevice")+1,theMessageData,&GenericApp_TransID,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS);}用GenericApp_SendTheMessage函数负责读取采集到的传感数据并做处理,然后进行射频发送。UINT16GenericApp_ProcessEvent(bytetask_id,UINT16events){afIncomingMSGPacket_t*MSGpkt;if(events&SYS_EVENT_MSG){MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(GenericApp_TaskID);while(MSGpkt){switch(MSGpkt->hdr.event){caseZDO_STATE_CHANGE:GenericApp_NwkState=(devStates_t)(MSGpkt->hdr.status);if(GenericApp_NwkState==DEV_END_DEVICE){osal_set_event(GenericApp_TaskID,SEND_DATA_EVENT);}break;default:break;}osal_msg_deallocate((uint8*)MSGpkt);MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(GenericApp_TaskID);}//returnunprocessedeventsreturn(events^SYS_EVENT_MSG);}if(events&SEND_DATA_EVENT){externvoidDHT11(void);DHT11();GenericApp_SendTheMessage();osal_start_timerEx(GenericApp_TaskID,SEND_DATA_EVENT,3000);return(events^SEND_DATA_EVENT);}return0;}

GenericApp_ProcessEvent函数负责处理操作系统的任务事件,并调用函数启动传感器进行采集数据并发送数据到协调器。4.3上位机程序设计软件部分设计完成后硬件可以进行温度数据的采集以及进行无线传输,协调器向PC串口发送的数据也可以在串口调试助手上进行显示。串口调试助手是一款好用且方便的串口调试软件,它使用简单且十分小巧,串口调试助手支持常用的300-115200bps波特率,能设置校验、数据位和停止位,能以ASCII码或十六进制接收或发送任何数据或字符(包括中文),可以任意设定自动发送周期,并能将接收数据保存成文本文件,能发送任意大小的文本文件,在软件编写和调试阶段,我们可以使用串口调试助手来帮助进行测试,但串口调试助手只能单纯显示串口数据,不易使用者使用理解,我们可以设计自己的上位机软件来进对本设计采集到的温度数据进行显示,以及完成温度达到阈值时的报警功能。在语言选择方面,我们选择C#进行我们的上位机软件设计。用C#语言强大的控件功能,我们可以很方便地设计出我们需要的界面,这是上位机设计的第一步。设计完界面后,我们需要做的就是对串口数据的接收,处理和显示。对串口的数据进行接收和处理时我们可以借助使用SerialPort类。在.NETFramework2.0中为用户提供了SerialPort类,该类主要实现串口数据通信等,有了SerialPort类,我们可以很容易从串口接收到由协调发送来的温度数据,实现串口通信。表4-3是SerialPort类的基本属性。表4-3SerialPort类的基本属性名称说明BaseStream获取SerialPort对象的基础Stream对象BaudRate获取或设置串行波特率BreakState获取或设置中断信号状态BytesToRead获取接收缓冲区中数据的字节数BytesToWrite获取发送缓冲区中数据的字节数CDHolding获取端口的载波检测行的状态CtsHolding获取“可以发送”行的状态DataBits获取或设置每个字节的标准数据位长度DsrHolding获取数据设置就绪(DSR)信号的状态WriteBufferSize获取或设置串行端口输出缓冲区的大小Encoding获取或设置传输前后文本转换的字节编码Handshake获取或设置串行端口数据传输的握手协议IsOpen获取一个值,该值指示SerialPort对象的打开或关闭状态NewLine获取或设置用于解释ReadLine()和WriteLine()方法调用结束的值WriteTimeout获取或设置写入操作未完成时发生超时之前的毫秒数ReadBufferSize获取或设置SerialPort输入缓冲区的大小ReadTimeout获取或设置读取操作未完成时发生超时之前的毫秒数ReceivedBytesThreshold获取或设置DataReceived事件发生前内部输入缓冲区中的字节数StopBits获取或设置每个字节的标准停止位数表4-4简单介绍SerialPort类的主要方法,包括端口的打开与关闭,缓冲区读取数据,读与写操作等。表4-4SerialPort类的主要方法方法名称说明Close关闭端口连接,将IsOpen属性设置为False,并释放内部Stream对象Open打开一个新的串行端口连接Read从SerialPort输入缓冲区中读取ReadByte从SerialPort输入缓冲区中同步读取一个字节ReadChar从SerialPort输入缓冲区中同步读取一个字符ReadLine一直读取到输入缓冲区中的NewLine值ReadTo一直读取到输入缓冲区中指定value的字符串Write已重载。将数据写入串行端口输出缓冲区WriteLine将指定的字符串和NewLine值写入输出缓冲区上位机的界面显示主要完成实时温度的显示以及报警功能,参考串口调试助手的设计,还需要串口打开与关闭按钮,提供COM口以及波特率选择属性,其大致界面设计如图4-7。图4-7上位机界面串口的设置,串口数据的接收与读取,对数据进行处理是上位机的主要工作,对于串口处理的主要代码如下:publicpartialclassForm1:Form{///串口接收数据处理///</summary>voidCOMM_DataReceived(objectsender,SerialDataReceivedEventArgse){intn=this.COMM.BytesToRead;byte[]buf=newbyte[n];//声明临时数组存储当前来的串口数据this.COMM.Read(buf,0,n);//读取缓冲数据//因为要访问ui资源,所以需要使用invoke方式同步ui。this.Invoke((EventHandler)(delegate{byteflag_judge=0;//直接按ASCII规则转换成字符串stringrece_temp=Encoding.ASCII.GetString(buf);builder_temp.Append(rece_temp);while(flag_judge<n){if(buf[flag_judge]=='#'){flag++;intlength=builder_temp.Length;stringtemp_data=builder_temp.ToString();send_data=temp_data.Remove(length-1);builder_temp.Clear();break;}flag_judge++;}for(inti=0;i<n;i++){buf[i]=0;}if(flag>=2){if(flag>=100){flag=0;}deal_value(send_data);}}));}///处理接收的数据privatevoiddeal_value(stringvalue){byte[]RxdBuf=System.Text.Encoding.Default.GetBytes(value);Brushred_colour=newSolidBrush(Color.Red);Brushyellow_colour=newSolidBrush(Color.Yellow);if(RxdBuf[0]=='R')//开始标志{this.textBox1.Text=(RxdBuf[1]-'0').ToString()+(RxdBuf[2]-'0').ToString();}}privatevoidopen_Click(objectsender,EventArgse){this.COMM.PortName=ports.Text;this.COMM.BaudRate=int.Parse(botelu.Text);this.COMM.Parity=Parity.None;this.COMM.StopBits=StopBits.One;this.COMM.DataBits=8;try{this.COMM.Open();}catch(Exceptionex){this.COMM=newSerialPort();//现实异常信息给客户。MessageBox.Show(ex.Message);}close.Enabled=this.COMM.IsOpen;open.Enabled=!this.COMM.IsOpen;}privatevoidOnTimedEvent(objectsource,ElapsedEventArgse){Control.CheckForIllegalCrossThreadCalls=false;textBox4.Text=DateTime.Now.ToString();minutes++;if(set_zhi==1){intwendu_sj=Convert.ToInt32(textBox1.Text);//实时温度intwendu_ck=Convert.ToInt32(textBox10.Text);intshidu_ck=Convert.ToInt32(textBox9.Text);if(wendu_sj>wendu_ck||wendu_sj<shidu_ck){SendBuf[0]=0x31;SendBuf[1]=0x31;COMM.Write(SendBuf,0,2);this.pictureBox2.Image=Image.FromFile("C:\\Users\\korey\\Desktop\\基于ZigBee技术的大田农作物温室大棚监测系统系统设计\\Zigbee光盘文件\\上位机姜玉书\\Monitoringsystem\\MonitoringSystem\\MonitoringSystem\\Resources\\红.gif");}else{SendBuf[0]=0x31;SendBuf[1]=0x30;COMM.Write(SendBuf,0,2);this.pictureBox2.Image=Image.FromFile("C:\\Users\\korey\\Desktop\\基于ZigBee技术的大田农作物温室大棚监测系统系统设计\\Zigbee光盘文件\\上位机姜玉书\\Monitoringsystem\\MonitoringSystem\\MonitoringSystem\\Resources\\绿.gif");}}}}5调试和结果5.1硬件调试下图是ZigBee监测系统的协调器节点和传感器节点的实物图,给协调器节点上电之后打开开关,LED3/LED7长亮,等待片刻之后,LCD屏显示模块功能及网络ID号,表明此模块为监测系统的协调器模块,且ZigBee网络已经建立完成。 图5-1硬件实物图 DHT11传感器的VCC脚和GND脚分别接终端节点的VCC_IO脚和GND口,数据脚接P0_6口。给传感器节点上电后并打开开关,DHT11传感器的指示灯量,表明传感器已上电。连接协调器串口至PC机,打开串口调试助手,根据软件的设计选择波特率为115200bps,COM口选择COM4(视各人PC机而定)。串口调试助手显示接收到的信息为网络ID号及采集到的温度数据。如图5-2所示。图5-2串口调试助手采集到的数据5.2软件调试5.2.1协调器及传感器节点软件调试ZigBee的相关代码我们使用C语言编写,开发环境选择IAREW8051-8.1。代码编写完成后,在Workspace下拉框选择CoordinatorEB,点击Project->RebulidAll,对工程进行编译,编译完成后显示没有错误便可以开始烧写程序,如下图所示,图5-3编译信息在完成仿真器驱动安装后,我们即可开始对目标板进行程序烧写了,烧写程序我们需要用到SmartRF04EB,及仿真器器件,如图5-4所示,图5-4SmartRF04EB仿真器用USB线连接仿真器和PC机的USB口,仿真器接目标板,打开SmartRFFlashProgrammer软件,我们可以看到软件界面上显示仿真器的相关信息,如图5-5所示。图5-5SmartRFFlashProgrammer软件我们可以在SmartRFFlashProgrammer软件界面上进行.hex文件的烧写,也可以在IAR编译环境中直接烧写。按下仿真器的Reset键,红灯亮而绿灯灭,表示仿真器已检测到目标板,在IAR环境中点击DownloadandDebug键,程序开始自动烧写,烧写完成后,界面显示如图5-6所示。图5-6烧写程序完成烧写完协调器的程序后,我们选择传感器节点的工程,编译完成后,进行烧写,流程与上面对协调器节点的操作相同。5.2.2上位机软件调试上位机软件采用C#进行编写,编译环境为VisualStdio2010,运行编译完成的代码后,上位机软件如图5-6所示,图5-6上位机界面连接协调器和PC串口,选择COM4口,波特率选择115200bps,点击打开按钮,给协调器及传感器节点上电,上位机显示实时温度数据,如图5-7所示。图5-7上位机温度显示此时温度阈值设定为20℃~40℃,系统状态显示为正常。修改阈值人工改变传感器环境温度,触发报警,如图5-8所示,此时阈值设定为20℃~27℃,实时温度为29℃,系统显示为报警状态,如图5-8所示。图5-8上位机报警5.3调试结果经硬件调试和软件调试完成后,本设计已经能够完成温度数据进行采集,无线网络组建及数据传输,上位机实时温度显示以及在温度超出阈值范围时发出报警。

6总结和展望6.1总结本文主要介绍了一套基于ZigBee的大田农作物温室大棚监测系统系统的设计,并使用自行设计的上位机实时分析采集到的数据,通过采集到的数据对大田农作物温度进行监测,决定是否发出警报。完成的主要功能包括:完成ZigBee无线网络的组建,利用ZigBee协调器建立一个新的ZigBee网络,并监听等待ZigBee终端节点的加入。传感器节点完成采集数据功能。在传感器节点加入ZigBee网络后,传感器能够正确采集所需的数据并通过ZigBee无线网络将数据传输到ZigBee协调器。数据通过串口传输到PC机并在上位机界面显示。我们使用串口这一工具,成功将ZigBee接收到的温度数据经过处理之后上传到PC机串口,并使用自行设计的上位机将串口接收到的数据在上位机上显示出来。温度超出阈值时发出警报。在温度超出设定的阈值范围时,表明此时大田农作物已经进入一个非正常的工作环境,此时上位机显示红灯报警。6.2展望本设计完成了一套温室大棚监测系统系统的基本功能,实现温度数据采集,传输,显示并利用上位机软件进行报警。但由于对ZigBee协议栈理解还不够深,硬件设备存在一定限制,本设计还存在一些不够完善的地方,要将本设计应用到生产实际还需要进行一定的改进。

参考文献[1]吴晨霞.基于ZigBee技术的的大田农作物温度监控系统[D].大连:大连理工大学,2019[2]王恒迪.大田农作物试验机多点温度监控系统设计[D].郑州:河南科技大学,2019[3]钟永锋,刘永俊.ZigBee无线传感网络[M].北京:北京邮电大学,2019[4]孙韬.基于ZigBee的温度/湿度无线传感网络监控系统设计与实现[D].长沙:国防科技大学,2009[5]刘利秋.传感器原理与应用[M].北京:清华大学出版社,2019[6]王婷.基于ZigBee的无线传感器网络在桥梁健康监测系统中的应用研究[D].重庆:重庆大学,2019[7]谭浩强.C程序设计(第四版)[M].北京:清华大学出版社,2012[8]李全利.单片机原理及应用(第二版)[M].北京:清华大学出版社,2014[9]许毅.无线传感器网络技术原理及应用[M].北京:清华大学出版社,2015[10]王颖惠.通信原理(第七版)[M].长沙:国防工业出版社,2012[11]张高明,王新春.基于CC2530的大田农作物温室大棚监测系统[J].西南交通大学报,2016,11:1005-5517[12]张海传,许东卫.低功耗大田农作物温度无线检测系统的设计[J].大连理工大学学报,2019,10:1005-5517[13]续文浩,宿筱.基于无线传感网络的大田农作物温室大棚监测系统系统设计[J].山东理工大学学报,2019,01:1674-778X[14]王凯旋.基于WSN的煤矿风机状态监测系统的研究[D].西安科技大学,2015[15]宋丹,张青.基于ZigBee无线传感器网络的煤矿监测系统[J].西安理工大学学报,2013,5:1000-7105[16]李俊斌,胡永忠.基于CC2530的ZigBee通信网络的应用设计[J].西电子科技大学学报,2011,16:1674-6236[17]马锐,贾金玲.基于Zigbee技术的水质监测网络节点设计[J].四川理工学院学报,2019,12:1001-9944

致谢本论文是在导师的谆谆教诲和指导下完成的,从选题、构思到定稿无不渗透着导师的心血和汗水;导师渊博的知识和严谨的学风使我受益终身,在此表示深深的敬意和感谢。这次写论文的经历也会使我终身受益,我感受到,做论文是要真真正正用心去做的一件事情,是真正的自己学习的过程和研究的过程。没有认真学习和钻研,自己就不可能有研究的能力,就不可能有自己的研究,就不会有所收获和突破。希望这个经历,在今后的学习和生活中能够继续激励我前进。另外,还要特别感谢我的家人,他们时刻关心我,给我提供了学习的机会,时时刻刻为我鼓劲、为我加油,进而促使我不断成长和进步。同时,也要感谢寝室的室友以及所有关心我的朋友,感谢他们陪伴我走过了很多美好的时光,在我遇到困难时他们关心我、帮助我。在完成毕业论文的过程中,很多朋友都给了我无私的帮助和支持,在此表示由衷的谢意!最后,因本人水平有限,论文肯定还有不少不足之处,恳请各位老师批评指正,我希望可以有机会继续去完善,我将不断努力继续充实自己。

附录Ⅰ协调器节点程序清单intmain(void){osal_int_disable(INTS_ALL);//InitializationforboardrelatedstuffsuchasLEDs初始化板上相关的东西,如LEDHAL_BOARD_INIT();//Makesuresupplyvoltageishighenoughtorun确保电源电压足够高以便运行zmain_vdd_check();//InitializeboardI/O初始化板I/OInitBoard(OB_COLD);HalDriverInit();osal_nv_init(NULL);//初始化MACZMacInit();//Determinetheextendedaddress确定扩展地址zmain_ext_addr();zgInit();#ifndefNONWK//SincetheAFisn'tatask,callit'sinitializationroutineafInit();#endifosal_init_system();osal_int_enable(INTS_ALL);InitBoard(OB_READY);zmain_dev_info();#ifdefLCD_SUPPORTEDzmain_lcd_init();#endif#ifdefWDT_IN_PM1WatchDogEnable(WDTIMX);#endifosal_start_system();//NoReturnfromhere没有从这里返回return0;//Shouldn'tgethere.}//main()staticvoidzmain_vdd_check(void){uint8vdd_passed_count=0;booltoggle=0;while(vdd_passed_count<MAX_VDD_SAMPLES){if(HalAdcCheckVdd(ZMAIN_VDD_LIMIT)){vdd_passed_count++;//Keeptrack#timesVddpassesinarowMicroWait(10000);//Wait10mstotryagain}else{vdd_passed_count=0;//ResetpassedcounterMicroWait(50000);//Wait50msMicroWait(50000);//Waitanother50mstotryagain}if(vdd_passed_count==0){if((toggle=!(toggle)))HAL_TOGGLE_LED1();elseHAL_TOGGLE_LED2();}}HAL_TURN_OFF_LED1();HAL_TURN_OFF_LED2();}voidosal_start_system(void){#if!defined(ZBIT)&&!defined(UBIT)for(;;)//ForeverLoop#endif{uint8idx=0;osalTimeUpdate();Hal_ProcessPoll();//ThisreplacesMT_SerialPoll()andosal_check_timer().do{if(tasksEvents[idx])//Taskishighestprioritythatisready.{break;}}while(++idx<tasksCnt);if(idx<tasksCnt){uint16events;halIntState_tintState;HAL_ENTER_CRITICAL_SECTION(intState);events=tasksEvents[idx];tasksEvents[idx]=0;//CleartheEventsforthistask.HAL_EXIT_CRITICAL_SECTION(intState);events=(tasksArr[idx])(idx,events);HAL_ENTER_CRITICAL_SECTION(intState);tasksEvents[idx]|=events;//Addbackunprocessedeventstothecurrenttask.HAL_EXIT_CRITICAL_SECTION(intState);}}}voidGenericApp_Init(bytetask_id){halUARTCfg_tuartConfig;GenericApp_TaskID=task_id;GenericApp_TransID=0;GenericApp_epDesc.endPoint=GENERICAPP_ENDPOINT;GenericApp_epDesc.task_id=&GenericApp_TaskID;GenericApp_epDesc.simpleDesc=(SimpleDescriptionFormat_t*)&GenericApp_SimpleDesc;GenericApp_epDesc.latencyReq=noLatencyReqs;afRegister(&GenericApp_epDesc);uartConfig.configured=TRUE;uartConfig.baudRate=HAL_UART_BR_115200;uartConfig.flowControl=FALSE;uartConfig.callBackFunc=NULL;HalUARTOpen(0,&uartConfig);}UINT16GenericApp_ProcessEvent(bytetask_id,UINT16events){afIncomingMSGPacket_t*MSGpkt;if(events&SYS_EVENT_MSG){MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(GenericApp_TaskID);while(MSGpkt){switch(MSGpkt->hdr.event){caseAF_INCOMING_MSG_CMD:GenericApp_MessageMSGCB(MSGpkt);break;}osal_msg_deallocate((uint8*)MSGpkt);MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(GenericApp_TaskID);}return(events^SYS_EVENT_MSG);}return0;}voidGenericApp_MessageMSGCB(afIncomingMSGPacket_t*pkt){unsignedcharbuffer[2];unsignedcharWenDuChars[4];switch(pkt->clusterId){caseGENERICAPP_CLUSTERID:osal_memcpy(buffer,pkt->cmd.Data,2);if(buffer[0]!=0){WenDuChars[0]='R';WenDuChars[3]='#';WenDuChars[1]=buffer[0]/10+'0';WenDuChars[2]=buffer[0]%10+'0';HalUARTWrite(0,WenDuChars,4);HalUARTWrite(0,"\n",1);}break;}}

附录Ⅱ传感器节点程序清单//延时函数voidDelay_us(void)//1us延时{MicroWait(1);}voidDelay_10us(void)//10us延时{MicroWait(10);}voidDelay_ms(uintTime)//nms延时{unsignedchar

温馨提示

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

评论

0/150

提交评论