您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > 基于zigbee的温度采集系统
基于zigbee的温度采集实验作者:姚志强一般而言,无线传感网络具有采集点众多,分布面积广;网络节点间的位置关系不定,节点动态加入或脱离网络等特性。Z-Stack2007协议栈具有这些实验功能特性。5.3.1实验目的与器材1)实验目的本实验将利用Z-Stack2007协议栈构建一个具有实际意义的无线传感器网络。该网络中具有采集节点和传感节点。传感节点连接各种传感器,利用传感器获取环境温度、光照等外界信息。采集节点负责接收该zigbee网络里传感节点的信息,并通过串口上传至PC端的串口助手进行显示。采集节点,上电启动后负责建立网络,并开启允许绑定功能;传感节点,上电启动后加入网络,并自动发起绑定请求,待采集节点建立绑定后,将传感器节点的外界温度信息和光照信息发送到采集节点上。为了实验简单,只有一个采集节点收集这些信息,处理后通过串口上传到计算机,可以在串口调试工具上看到,为了提高网络的负载能力,可以增加中心收集节点。所以我们可以建立星形拓扑网络,协调器是采集节点,终端节点是传感节点。为了实现上述实验目的,应该做到:自动形成一个网络;传感器设备必须能自动加入网络,并自动完成绑定;如果传感器设备没有从中心节点收到应答,它将自动移除到该中心节点的绑定。然后它将自动的去发现新的中心节点绑定。本实验中传感节点具有获取节点内部温度信息、外界温度信息、外界光照信息等功能。2)实验器材4个CC2530开发模块(1个采集器节点,1个路由器,2个传感器节点);2个DS18B20温度传感器;2个光敏电阻;5.3.2实验原理与步骤1)硬件介绍1温度传感器DS18b20DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种数字化单总线器件。属于新一代适配微处理器的改进型智能温度传感器。它能够直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。可以分别在93.75ms和750ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写。其测量温度范围为-55℃~+125℃。现场温度直接以“一线总线”的数字方式传输,用符号扩展的16位数字方式串行输出,大大提高了系统的抗干扰性。广泛用于工业、民用、军事等领域的温度测量及控制仪器、测控系统和大型设备中。DS18B20的性能特点如下:采用DALLAS公司独特的单线接口方式:DS18B20与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯;在使用中不需要任何外围元件;可用数据线供电,供电电压范围:+3.0V~+5.5V;测温范围:-55~+125℃。固有测温分辨率为0.5℃。当在-10℃~+85℃范围内,可确保测量误差不超过0.5℃,在-55~+125℃范围内,测量误差也不超过2℃;通过编程可实现9~12位的数字读数方式;用户可自设定非易失性的报警上下限值;支持多点的组网功能,多个DS18B20可以并联在唯一的三线上,实现多点测温负压特性,即具有电源反接保护电路。当电源电压的极性反接时,能保护DS18B20不会因发热而烧毁,但此时芯片无法正常工作;DS18B20的转换速率比较高,进行9位的温度值转换只需93.75ms;适配各种单片机或系统;内含64位激光修正的只读存储ROM,扣除8位产品系列号和8位循环冗余校验码(CRC)之后,产品序号占48位。出厂前产品序号存入其ROM中。在构成大型温控系统时,允许在单线总线上挂接多片DS18B20。DS18b20温度传感器实物如图所示。图DS18b20温度传感器实物图Zigbee实验板与温度传感器18b20的连接如图所示图Zigbee实验板与温度传感器18b20的连接ZigBee芯片通过P6_2管脚读取DS18b20所产生的温度数据。2光敏电阻器光敏电阻器是利用半导体的光电效应制成的一种电阻值随入射光的强弱而改变的电阻器;入射光强,电阻减小,入射光弱,电阻增大。光敏电阻器一般用于光的测量、光的控制和光电转换(将光的变化转换为电的变化)。常用的光敏电阻器硫化镉光敏电阻器,它是由半导体材料制成的。光敏电阻器的阻值随入射光线(可见光)的强弱变化而变化,在黑暗条件下,它的阻值(暗阻)可达1~10M欧,在强光条件(100LX)下,它阻值(亮阻)仅有几百至数千欧姆。光敏电阻器对光的敏感性(即光谱特性)与人眼对可见光(0.4~0.76)μm的响应很接近,只要人眼可感受的光,都会引起它的阻值变化。光敏电阻的主要参数:光敏电阻的主要参数是:光电流、亮电阻。光敏电阻器在一定的外加电压下,当有光照射时,流过的电流称为光电流,外加电压与光电流之比称为亮电阻,常用“100LX”表示。暗电流、暗电阻。光敏电阻在一定的外加电压下,当没有光照射的时候,流过的电流称为暗电流。外加电压与暗电流之比称为暗电阻,常用“0LX”表示。灵敏度。灵敏度是指光敏电阻不受光照射时的电阻值(暗电阻)与受光照射时的电阻值(亮电阻)的相对变化值。光谱响应。光谱响应又称光谱灵敏度,是指光敏电阻在不同波长的单色光照射下的灵敏度。若将不同波长下的灵敏度画成曲线,就可以得到光谱响应的曲线。光照特性。光照特性指光敏电阻输出的电信号随光照度而变化的特性。从光敏电阻的光照特性曲线可以看出,随着的光照强度的增加,光敏电阻的阻值开始迅速下降。若进一步增大光照强度,则电阻值变化减小,然后逐渐趋向平缓。在大多数情况下,该特性为非线性。伏安特性曲线。伏安特性曲线用来描述光敏电阻的外加电压与光电流的关系,对于光敏器件来说,其光电流随外加电压的增大而增大。温度系数。光敏电阻的光电效应受温度影响较大,部分光敏电阻在低温下的光电灵敏较高,而在高温下的灵敏度则较低。额定功率。额定功率是指光敏电阻用于某种线路中所允许消耗的功率,当温度升高时,其消耗的功率就降低。光照传感器实物如图所示图光照传感器实物图Zigbee实验板与光敏电阻的连接如图所示图Zigbee实验板与光敏电阻的连接将ZigBee芯片的P04引脚设置为AD采样的模拟输入引脚,这样由光敏电阻阻值变换所引起的电压的变化量就会反映在芯片的模拟输入引脚上,芯片根据电压的变化量可以判断出当前的光照强度。2)程序流程1传感节点发送数据流程在节点成功加入网络并且同协调器绑定成功后,通过SimpleSensor.c文件中的zb_BindConfirm()函数来调用myApp_StartReporting()函数1.voidzb_BindConfirm(uint16commandId,uint8status){(void)commandId;if((status==ZB_SUCCESS)&&(myAppState==APP_START)){myAppState=APP_BOUND;myApp_StartReporting();}else{osal_start_timerEx(sapi_TaskID,MY_FIND_COLLECTOR_EVT,myBindRetryDelay);}}2.在myApp_StartReporting()函数中触发测量温度事件。voidmyApp_StartReporting(void){osal_start_timerEx(sapi_TaskID,MY_REPORT_TEMP_EVT,myTempReportPeriod);osal_start_timerEx(sapi_TaskID,MY_REPORT_BATT_EVT,myBatteryCheckPeriod);}3.在函数zb_HandleOsalEvent()中对该事件进行响应。voidzb_HandleOsalEvent(uint16event){……uint8pData[2];if(event&MY_REPORT_EXTEMP_EVT){pExTemp[0]=EXTEMP_REPORT;myApp_ReadExTemperature();osal_memcpy(pExTemp+1,ch,8);zb_SendDataRequest(0xFFFF,SENSOR_REPORT_CMD_ID,9,pExTemp,0,AF_ACK_REQUEST,0);}……}4.事件响应函数通过调用myApp_ReadExTemperature()函数读取当前温度值。voidmyApp_ReadExTemperature(void){UINT8temh,teml;UINT16num;UINT8i;uint8Temp_channel;P0DIR=0x00;P1DIR|=0x0d;//设置P1.0,P1.2,P1.3为输出方式P2DIR|=0x01;//同上read_data();//读取温度Temp_channel=0x31;teml=sensor_data_value[0];temh=sensor_data_value[1];i=(Temp_channel-0x31)*2;ch[0]=Temp_channel;//当前显示的传感器的编号ch[1]='';num=teml*625;//小数部分的取值每位代表0.0625(精度)if(flag==1)//判断正负温度{ch[2]='-';//+0x2d为变-ASCII码}elsech[2]='+';if(temh/100==0)ch[3]='';elsech[3]=temh/100+0x30;//+0x30为变0~9ASCII码if((temh/10%10==0)&&(temh/100==0))ch[4]='';elsech[4]=temh/10%10+0x30;ch[5]=temh%10+0x30;ch[6]='.';ch[7]=num/1000+0x30;//忽略小数点后1位的数}read_data()是负责从DS18b20中读取当前温度的函数,其中涉及到对DS18b20器件单总线结构的操作函数,该函数位于DS18B20.c文件中,详细操作流程请结合DS18b20相关数据手册参看附录中的程序清单,在此就不详细列出。5.事件响应函数通过调用zb_SendDataRequest()函数将得到的温度值发送至协调器节点。2汇聚节点接收数据流程程序接收数据函数voidzb_ReceiveDataIndication(uint16source,uint16command,uint16len,uint8*pData){......uint8sensorReading;uint8tmpBuf[32];uint8*outputBuf;if(command==SENSOR_REPORT_CMD_ID){sensorReading=pData[1];outputBuf=tmpBuf;switch(pData[0]){caseEXTEMP_REPORT:tmpBuf[1]='7';tmpBuf[6]='*';while(ilen){tmpBuf[7+i]=pData[1+i];//接收到的数据i++;}i=0;tmpBuf[len+6]='#';HalUARTWrite(Urtport,tmpBuf,len+7);//写串口向上位机报告osal_mem_free(tmpBuf);break;default:{}......}}HalUARTWrite(HAL_UART_PORT_0,buf,32);osal_set_event(sapi_TaskID,LED_TOGGLE_EVT);}接收到数据后,通过串口汇报给上位机程序。程序的流程图如图所示。zb_BindConfirm绑定成功myApp_StartReporting开始报告MY_REPORT_TEMP_EVTzb_HandleOsalEvent事件处理myApp_ReadLight报告光照myApp_ReadEXTemperature报告温度zb_SendDataRequest发送触发响应zb_ReceiveDataIndication接收传感节点汇聚节点HalUARTWrite串口图
本文标题:基于zigbee的温度采集系统
链接地址:https://www.777doc.com/doc-2535401 .html