基于ZigBee的无线温湿度采集系统.docx

上传人:b****6 文档编号:4283013 上传时间:2022-11-28 格式:DOCX 页数:19 大小:1.21MB
下载 相关 举报
基于ZigBee的无线温湿度采集系统.docx_第1页
第1页 / 共19页
基于ZigBee的无线温湿度采集系统.docx_第2页
第2页 / 共19页
基于ZigBee的无线温湿度采集系统.docx_第3页
第3页 / 共19页
基于ZigBee的无线温湿度采集系统.docx_第4页
第4页 / 共19页
基于ZigBee的无线温湿度采集系统.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

基于ZigBee的无线温湿度采集系统.docx

《基于ZigBee的无线温湿度采集系统.docx》由会员分享,可在线阅读,更多相关《基于ZigBee的无线温湿度采集系统.docx(19页珍藏版)》请在冰豆网上搜索。

基于ZigBee的无线温湿度采集系统.docx

基于ZigBee的无线温湿度采集系统

基于ZigBee的无线温湿度采集系统

摘要:

针对传统温湿度检测存在的问题,结合无线传感器网络技术,本文提出一种基于ZigBee技术的无线温湿度采集系统的设计方法。

设计采用CC2530射频芯片及SHT11数字温湿度传感器,在ZigBee协议栈的基础上进行应用开发。

阐述了ZigBee技术,系统组成及工作原理,系统软硬件设计等内容,并通过实验测试表明,该无线温湿度采集系统能够稳定可靠的运行,并且具有组网简单、功耗低,成本低等优点,具有十分好的实用价值和经济效益。

关键字:

ZigBee,温湿度,CC2530,协议栈

WirelesstemperatureandhumidityacquisitionsystembasedonZigBeetechnology

Abstract:

Accordingtotheproblemsexistingintemperatureandhumiditydetectingoftraditionalways,combiningwithwirelesssensornetworktechnology,thispaperputsforwardanewdesignoftemperatureandhumidityacquisitionsystembasedonZigBeetechnology.ThedesignwascarriedoutbasedontheZigBeeprotocol,adoptingCC2530RFchipanddigitalhumidityandtemperaturesensorSHT11.PaperintroducesZigBeetechnology,theoveralldesignofthesystem,hardwareandsoftwaredesignofthenodesandsoforth.Finally,theexperimentaltestshaveprovedthatthewirelesstemperatureandhumidityacquisitionsystemwasstableandcredible,withtheadvantagesofsimplenetworking,lowcostandlowpower,andithasaverygoodpracticalvalueandeconomicbenefits.

Keywords:

ZigBee,Temperatureandhumidity,CC2530,Protocol

 

1引言

在冷链物流、农业生产、仓库管理以及食品保存等领域,温度和湿度控制显得十分重要,但传统的方法采用测试器材来测量温度和湿度,通过人工进行检测,这种人工测试方法费时费力、效率低,而且测试的温度及湿度的误差大,随机性大。

因此,开发一种全新的温湿度采集系统就显得十分迫切和重要了。

本文设计了一种采用无线传感器网络技术进行温度和湿度的采集系统。

无线传感器网络不需要较高的传输带宽,但需要较低的传输时延和较低的功率消耗。

ZigBee是一种新兴的短距离、低功耗、低数据速率、低成本、低复杂度的无线网络技术,它的出现正好满足了这个要求。

2ZigBee技术

ZigBee是一种标准,该标准定义了短距离、低数据传输速率无线通信所需要的一系列通信协议,它拥有一套完整的协议层次结构,由IEEE802.15.4和ZigBee联盟共同制定完成。

其工作频段分别是868MHz(欧洲)、915MHz(北美)、2.4GHz(全球)3个频段,可以应用于不同的场合,诸如家庭自动化网络、工业控制网络、交互式玩具、远程检测等。

完整的ZigBee协议栈包括物理层(PHY)、媒体访问控制层(MAC)、网络层(NWK)和应用层(APL)。

其中,ZigBee的应用层由应用支持子层(APS)、ZigBee设备对象(ZDO)和制造商定义的应用对象组成。

在ZigBee协议栈中,每一层通过使用下层提供的服务完成自己的功能,同时对上层提供服务,网络中的通信在对等的层次上进行。

ZigBee网络含三种类型的节点,即协调器、路由器和终端设备,其中协调器和路由器均为全功能设备(FFD),而终端设备选用精简功能设备(RFD)。

一个ZigBee网络有且仅有一个协调器,该设备负责启动网络,配置网络成员地址,维护网络,维护节点的绑定关系表等,需要最多的存储空间和计算能力,它可以看作是一个PAN的网关节点。

路由器主要实现扩展网络及路由消息的功能,终端设备则负责与实际的监控对象相连,实现具体功能的单元。

无线传感器网络中可以根据不同的需要组成星型、簇型网和网状型三种不同的网络拓扑结构。

星状网络由一个PAN协调器和多个终端设备组成。

只存在PAN协调器与终端设备的通信,终端设备间的通信都需通过PAN协调器的转发;树状网络由一个协调器和一个或多个星状结构连接而成,设备除了能与自己的父节点或子节点进行点对点直接通讯外,其他只能通过树状路由完成消息传输;网状网络是树状网络基础上实现的,与树状网络不同的是,它允许网络中所有具有路由功能的节点直接互连,由路由器中的路由表配合实现消息的网状路由。

一个ZigBee网络最多可含有65000多个子节点,通过无线网络数据从一个节点传送到另一个节点,最终传送到控制中心。

另外,它可以与其他的无线网络如GPRS和CDMA等兼容,也可以接入有线网络如Internet、Ethernet,实现远程监控。

3系统结构和原理

基于ZigBee的无线温湿度采集系统采用ZigBee星型拓扑组网方式,多个具有简单功能的设备和传感器构成传感器节点(终端设备),一台具有完整功能的设备作为中心节点(协调器节点),中心节点与中心控制计算机(PC机)相连,中心控制计算机通过上位机软件可以实现对整个系统节点的监测和控制。

整个系统工作时,传感器节点负责现场温湿度数据的采集,将采集到数据一定的数据格式存储起来,当上位机需要读取温湿度时,就发送相应指令给协调器,协调器将指令翻译后发送给传感器节点,传感器节点接收到指令,就将温湿度数据无线发送给协调器,协调器通过串口RS232将数据发送给PC机,PC机就可以对温湿度数据进行显示、分析和处理,从而实现了温湿度全程的无线采集和监测工作。

此外,整个温湿度采集系统还可以实现协调器自检、发送功率设置、终端节点地址设定、时间读取和设置、低功耗设置、拍照等其它功能。

4系统硬件设计

4.1传感器节点

无线传感器节点由数据采集、数据处理、无线通信和能量供应四个模块组成。

数据采集模块由数字传感器或者模拟传感器加A/D转换器组成,负责区域内的温湿度信息采集和数据转换;数据处理模块由微控制器组成,负责控制整个传感器节点的操作和数据存储;无线通信模块由无线收发器组成,负责与其他传感器节点进行通信,能量供应模块为系统其他的三个部分提供能量。

传感器节点由瑞温湿度传感器SHT11检测得到温湿度信息,并转化为数字信号,传输至CC2530,由CC2530负责对信号进行处理发送。

节点电源部分使用两节五号电池为整个节点供电。

为了使系统工作时间持续长,节点通常在闲置时快速进入休眠模式,其外设模块进入休眠状态,或者电源管理部分不对这些外设模块供电。

SHT11是瑞士Sensirion公司推出的基于CMOSensTM技术的新型温湿度传感器。

SHT11将温湿度传感器、信号放大调理、A/D转换、I2C总线接口全部集成于一个芯片上,该芯片包括一个电容性聚合体湿度敏感元件和一个用能隙材料制成的温度敏感元件。

这两个敏感元件分别将湿度和温度转换成电信号,该电信号首先进入微弱信号放大器进行放大器;然后进入一个14位的A/D转换器;最后经过二线串行数字接口输出数字信号。

SHT11通过DATA数据总线输出的是相对湿度,需要进行线性补偿和温度补偿后才能得到较为准确的湿度值。

CC2530芯片是用于2.4-GHz IEEE802.15.4、ZigBee和RF4CE应用的一个真正的片上系统(SoC)解决方案。

它能够以非常低的总的材料成本建立强大的网络节点。

CC2530结合了领先的RF收发器的优良性能,业界标准的增强型8051CPU,系统内可编程闪存,8-KBRAM和许多其它强大的功能。

在本无线温湿度采集系统中,我们采用的是CC2530F256芯片,它结合了德州仪器的业界领先的黄金单元ZigBee 协议栈(Z-Stack™),提供了一个强大和完整的ZigBee解决方案。

温湿度传感器SHT11采集到的温湿度数据,存储在CC2530的FLASHROM中,当传感节点接收到读取温湿度指令时,就通过ZigBee协议栈将温湿度数据发送出去。

4.2协调器节点

网络协调器主要负责网络的建立,信息的接收、汇总、处理及控制指令的发送ZigBee网络最初由协调器发动并建立。

协调器通过主动扫描选择一个合适信道,根据扫描的结果选择自己的PANID及0x0000作为自己的短地址,其网络层将通过向MAC层发送MLME2START.request原语启动一个新的PAN。

协调器节点在建成网络后,开始数据收发工作及各种操作指令的执行。

当协调器收到数据时,根据数据的串ID来判断传送的数据是地址信息还是传感器采集的数据,根据不同的数据类型解析数据包提供给PC机显示和处理。

5系统软件设计

本系统的软件设计是基于Ti公司推出的跟CC2530芯片配套的Z2STACK协议栈和IAR集成开发环境进行设计的。

ZSTACK协议栈运行在一个基于任务调度机制的OSAL操作系统上,OSAL通过触发任务的事件来实现任务调度。

OSAL中的任务可以通过任API将其添加到系统中,实现多任务机制。

系统中传感器节点由CC2530内部的MCU(8051)控制,定时向温湿度传感器SHT11发送读温度和湿度指令,SHT11完成温度和湿度转换后会发出转换完成信号,MCU在接收到转换完成信号后,读取温湿度值,并将这些数据信号传送给协调器。

协调器通过串口RS232和上位机(PC)相连,通过人机交互的方式对整个区域的进行检测。

为了实现这一功能,必须知道节点的长短地址对应表,这就需要节点在加入网络后发送自己的长短地址给协调器,协调器将长短地址对应列表存储起来,以便用户要求采集数据时依据地址表来采集每个传感器的数据。

传感节点与协调器节点的温湿度采集及通信流程图如下图1所示。

图1传感器节点与协调器节点的通信流程图

6系统测试验证

本无线温湿度采集系统设计完成后,进行了一系列的测试工作,包括通信距离,穿墙能力,系统稳定性以及数据准确性等。

经过测试,系统通信距离200米左右(与发送功率有关),可以成功穿越一堵墙通信(与网络拓扑形式有关),并可以稳定工作,预计传感器节点工作寿命可达1年。

7结束语

本文设计的基于ZigBee技术的CC2530无线温湿度采集系统,其外围设备简单、功耗低、传输无线化,而且精度高,可靠性好,提供了良好的人机交互界面,方便控制使用,在冷链物流,农业生产以及食品保存等等领域都有很好的应用前景。

 

参考文献:

[1]王小强,欧阳骏,黄宁淋,ZigBee无线传感网络设计与实现,北京:

化学工业出版社,2012.5.

[2]高手玮,吴灿阳.ZigBee技术实践教程,北京:

北京航空航天大学出版社,2009.6

[3]瞿雷,刘盛德,胡咸斌.ZigBee技术及应用,北京:

北京航空航天大学出版社,2007.9.

[4]吕强,刘玉华,刘志军,王国胜.基于ZigBee的无线温湿度检测终端设计.科学技术与工程,2008.12;8(23).

[5]ShahinFarahani.ZigBeeWirelessNetworksandTransceivers,ElsevierLtd,2008

[6]Sensirion.SHT11Datasheet.http//pdf

[7]X.Li,W.David.CombiningtheBestofGlobal2as2ViewandLocal2as2ViewforDataIntegration[C].PODS,2004.

[8]ACal,DLembo,etal.ExperimentingDataInte2grationwithDIS@DIS[C].CAiSE2004,LectureNotesinComputerScience,2004,3084,9:

51~66.

 

附录:

实物图及部分代码

1实物图

传感器节点实物传感器节点外包装

手持读写器(协调器节点)

2部分程序代码

2.1终端节点(传感器节点)部分代码

staticvoidSerialApp_ProcessZDOMsgs(zdoIncomingMsg_t*inMsg);

staticvoidSerialApp_HandleKeys(uint8shift,uint8keys);

staticvoidSerialApp_ProcessMSGCmd(afIncomingMSGPacket_t*pkt);

staticvoidSerialApp_Send(void);

staticvoidSerialApp_Resp(void);

staticvoidSerialApp_CallBack(uint8port,uint8event);

voidSerialApp_ProcessHym8563(void);//处理时钟芯片,得到时间数据

voidSerialApp_ProcessSht11(void);//处理温湿度传感器,得到温湿度数据

uint8SerialApp_GetVoltage(void);//获取电压数据

voidSerialApp_MemoryTime(void);//存储时间数据(一组时间以及第一组温湿度数据)

voidSerialApp_MemoryTemp_Humi(void);//存储温湿度数据(第二组到第十七组温湿度数据)

voidSerialApp_LowPower(void);//低功耗处理函数

if(events&SERIALAPP_MEM_TIME_EVT)

{

PktNum++;//存储时间事件发生,温湿度组数加1

SerialApp_ProcessHym8563();

SerialApp_ProcessSht11();

SerialApp_GetVoltage();

SerialApp_MemoryTime();

osal_start_timerEx(SerialApp_TaskID,SERIALAPP_MEM_TEMP_HUMI_EVT,10000);

//一组时间数据和第一组温湿度数据存储好后,等待10秒,触发温湿度存储事件,存储第二到第十七组温湿度

//注意:

此处时间最大为65536毫秒,因此为了方便,最多我们可以设置1分钟的延时,即60000

return(events^SERIALAPP_MEM_TIME_EVT);

}

if(events&SERIALAPP_MEM_TEMP_HUMI_EVT)

{

if(PktNum>1&&PktNum<=17)//温湿度数据的组数小于17时,依次每10秒存一组温湿度数据

{

//SerialApp_ProcessHym8563();

SerialApp_ProcessSht11();

SerialApp_MemoryTemp_Humi();

PktNum++;//存一组温湿度,其组数加1

osal_start_timerEx(SerialApp_TaskID,SERIALAPP_MEM_TEMP_HUMI_EVT,10000);

//每10秒存储一组,同上最长延时为65536毫秒,为方便,可最多设置为一分钟

}

if(PktNum==18)//当存满17组温湿度数据时,NV条目自动加1,温湿度数据组数重新归1,并再次注册存储时间任务

{

PktNum=1;

CCLD_NV=CCLD_NV+1;

offset=5;

osal_start_timerEx(SerialApp_TaskID,SERIALAPP_MEM_TIME_EVT,100);

}

return(events^SERIALAPP_MEM_TEMP_HUMI_EVT);

}

voidSerialApp_ProcessMSGCmd(afIncomingMSGPacket_t*pkt)

{

uint8buffer[20];

uint8Temp_Humi_Read[70];//存放读取的温湿度数据

uint8Time_Read[5];//存放读取的时间数据

uint8Data_Package[80];//存放要发给协调器的数据包

uint8delay;

uint8i,ReturnValue1,ReturnValue2;

switch(pkt->clusterId)

{

//Amessagewithaserialdatablocktobetransmittedontheserialport.

caseSERIALAPP_CLUSTERID1:

//Storetheaddressforsendingandretrying.

osal_memcpy(&SerialApp_RxAddr,&(pkt->srcAddr),sizeof(afAddrType_t));

if(pkt->cmd.Data[3]==0x00)//读温湿度指令

{

CCLD_NV=0x0400+pkt->cmd.Data[4];//将选择读取的数据包与NV条目对应起来

ReturnValue1=osal_nv_read(CCLD_NV,0,5,Time_Read);//读时间数据

ReturnValue2=osal_nv_read(CCLD_NV,5,68,Temp_Humi_Read);//读17组温湿度数据

if(ReturnValue1==ZSUCCESS&&ReturnValue2==ZSUCCESS&&osal_nv_item_len(CCLD_NV))//读取成功,返回相应数据

{

Data_Package[0]=pkt->cmd.Data[0];//前缀

Data_Package[1]=pkt->cmd.Data[1];//读写器ID

Data_Package[2]=pkt->cmd.Data[2];//TagID

Data_Package[3]=pkt->cmd.Data[3];//功能位,读温湿度

Data_Package[4]=0xFF;//状态位

Data_Package[5]=Time_Read[0];//时间

Data_Package[6]=Time_Read[1];

Data_Package[7]=Time_Read[2];

Data_Package[8]=Time_Read[3];

Data_Package[9]=Time_Read[4];

for(i=10;i<78;i++)//将17组温湿度的有效数据提取出来

{

Data_Package[i]=Temp_Humi_Read[i-10];//温湿度

if(Data_Package[i]==0xFF)break;//NV条目初始化后全为FF,故当读到的温湿度数据为FF时,说明实际温湿度已经读完,该处没有存温湿度

}

SerialApp_TxAddr.addrMode=(afAddrMode_t)Addr16Bit;//单播发送

SerialApp_TxAddr.addr.shortAddr=0x0000;//协调器地址

SerialApp_TxAddr.endPoint=SERIALAPP_ENDPOINT;//发送端口

AF_DataRequest(&SerialApp_TxAddr,

(endPointDesc_t*)&SerialApp_epDesc,

SERIALAPP_CLUSTERID1,

i,Data_Package,

&SerialApp_MsgID,0,AF_DEFAULT_RADIUS);

}

else//读取失败,则返回下面数据

{

Data_Package[0]=pkt->cmd.Data[0];//前缀

Data_Package[1]=pkt->cmd.Data[1];//读写器ID

Data_Package[2]=pkt->cmd.Data[2];//TagID

Data_Package[3]=pkt->cmd.Data[3];//功能位,读温湿度

Data_Package[4]=0xFE;//状态位

SerialApp_TxAddr.addrMode=(afAddrMode_t)Addr16Bit;

SerialApp_TxAddr.addr.shortAddr=0x0000;

SerialApp_TxAddr.endPoint=SERIALAPP_ENDPOINT;

AF_DataRequest(&SerialApp_TxAddr,

(endPointDesc_t*)&SerialApp_epDesc,

SERIALAPP_CLUSTERID1,

5,Data_Package,

&SerialApp_MsgID,0,AF_DEFAULT_RADIUS);

}

}

if(pkt->cmd.Data[3]==0x01)//设定冷链标签时间,通常设定为当前时间

{

externuint8seconds,minute,hour,date,week,month,years;

minute=pkt->cmd.Data[8];//设定时间,将协调器发送过来的年月时分秒分别对应赋给年月时分秒

hour=pkt->cmd.Data[7];

date=pkt->cmd.Data[6];

month=pkt->cmd.Data[5];

years=pkt->cmd.Data[4];

HYM8653_Init();//时钟芯片初始化

HYM8563_Write_time();//将设定的时间写入时钟

buffer[0]=pkt->cmd.Data[0];//前缀

buffer

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1