基于zigbee的温度采集系统_第1页
基于zigbee的温度采集系统_第2页
基于zigbee的温度采集系统_第3页
基于zigbee的温度采集系统_第4页
基于zigbee的温度采集系统_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、基于zigbee的温度采集实验作者:姚志强一般而言,无线传感网络具有采集点众多,分布面积广;网络节点间的位置关系不定,节点动态加入或脱离网络等特性。Z-Stack2007协议栈具有这些实验功能特性。5.3.1 实验目的与器材1)实验目的本实验将利用Z-Stack2007协议栈构建一个具有实际意义的无线传感器网络。该网络中具有采集节点和传感节点。传感节点连接各种传感器,利用传感器获取环境温度、光照等外界信息。采集节点负责接收该zigbee网络里传感节点的信息,并通过串口上传至PC端的串口助手进行显示。采集节点,上电启动后负责建立网络,并开启允许绑定功能;传感节点,上电启动后加入网络,并自动发起绑

2、定请求,待采集节点建立绑定后,将传感器节点的外界温度信息和光照信息发送到采集节点上。为了实验简单,只有一个采集节点收集这些信息,处理后通过串口上传到计算机,可以在串口调试工具上看到,为了提高网络的负载能力,可以增加中心收集节点。所以我们可以建立星形拓扑网络,协调器是采集节点,终端节点是传感节点。为了实现上述实验目的,应该做到: u 自动形成一个网络;u 传感器设备必须能自动加入网络,并自动完成绑定;u 如果传感器设备没有从中心节点收到应答,它将自动移除到该中心节点的绑定。然后它将自动的去发现新的中心节点绑定。 本实验中传感节点具有获取节点内部温度信息、外界温度信息、外界光照信息等功能。2)实验

3、器材u 4个CC2530开发模块(1个采集器节点,1个路由器,2个传感器节点);u 2个DS18B20温度传感器;u 2个光敏电阻;5.3.2 实验原理与步骤1)硬件介绍1 温度传感器DS18b20DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种数字化单总线器件。属于新一代适配微处理器的改进型智能温度传感器。它能够直接读出被测温度,并且可根据实际要求通过简单的编程实现912位的数字值读数方式。可以分别在93.75ms和750ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写。其测量温度范围为-55+1

4、25。现场温度直接以“一线总线”的数字方式传输,用符号扩展的16位数字方式串行输出,大大提高了系统的抗干扰性。广泛用于工业、民用、军事等领域的温度测量及控制仪器、测控系统和大型设备中。DS18B20的性能特点如下:l 采用DALLAS公司独特的单线接口方式:DS18B20与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯; l 在使用中不需要任何外围元件;l 可用数据线供电,供电电压范围:+3.0V+5.5V;l 测温范围:-55+125。固有测温分辨率为0.5。当在-10+85范围内,可确保测量误差不超过0.5,在-55+125范围内,测量误差也不超过2;l 通过编程可

5、实现912位的数字读数方式;l 用户可自设定非易失性的报警上下限值;l 支持多点的组网功能,多个DS18B20可以并联在唯一的三线上,实现多点测温l 负压特性,即具有电源反接保护电路。当电源电压的极性反接时,能保护DS18B20不会因发热而烧毁,但此时芯片无法正常工作;l DS18B20的转换速率比较高,进行9位的温度值转换只需93.75ms;l 适配各种单片机或系统;l 内含64位激光修正的只读存储ROM,扣除8位产品系列号和8位循环冗余校验码(CRC)之后,产品序号占48位。出厂前产品序号存入其ROM中。在构成大型温控系统时,允许在单线总线上挂接多片DS18B20。 DS18b20温度传感

6、器实物如图 所示。图 DS18b20温度传感器实物图Zigbee实验板与温度传感器18b20的连接如图 所示图 Zigbee实验板与温度传感器18b20的连接ZigBee芯片通过P6_2管脚读取DS18b20所产生的温度数据。2 光敏电阻器光敏电阻器是利用半导体的光电效应制成的一种电阻值随入射光的强弱而改变的电阻器;入射光强,电阻减小,入射光弱,电阻增大。光敏电阻器一般用于光的测量、光的控制和光电转换(将光的变化转换为电的变化)。常用的光敏电阻器硫化镉光敏电阻器,它是由半导体材料制成的。光敏电阻器的阻值随入射光线(可见光)的强弱变化而变化,在黑暗条件下,它的阻值(暗阻)可达110M欧,在强光条

7、件(100LX)下,它阻值(亮阻)仅有几百至数千欧姆。光敏电阻器对光的敏感性(即光谱特性)与人眼对可见光(0.40.76)m的响应很接近,只要人眼可感受的光,都会引起它的阻值变化。光敏电阻的主要参数:光敏电阻的主要参数是: 光敏电阻的实验图l 光电流、亮电阻。光敏电阻器在一定的外加电压下,当有光照射时,流过的电流称为光电流,外加电压与光电流之比称为亮电阻,常用“100LX”表示。 l 暗电流、暗电阻。光敏电阻在一定的外加电压下,当没有光照射的时候,流过的电流称为暗电流。外加电压与暗电流之比称为暗电阻,常用“0LX”表示。 l 灵敏度。灵敏度是指光敏电阻不受光照射时的电阻值(暗电阻)与受光照射时

8、的电阻值(亮电阻)的相对变化值。 l 光谱响应。光谱响应又称光谱灵敏度,是指光敏电阻在不同波长的单色光照射下的灵敏度。若将不同波长下的灵敏度画成曲线,就可以得到光谱响应的曲线。 l 光照特性。光照特性指光敏电阻输出的电信号随光照度而变化的特性。从光敏电阻的光照特性曲线可以看出,随着的光照强度的增加,光敏电阻的阻值开始迅速下降。若进一步增大光照强度,则电阻值变化减小,然后逐渐趋向平缓。在大多数情况下,该特性为非线性。 l 伏安特性曲线。伏安特性曲线用来描述光敏电阻的外加电压与光电流的关系,对于光敏器件来说,其光电流随外加电压的增大而增大。 l 温度系数。光敏电阻的光电效应受温度影响较大,部分光敏

9、电阻在低温下的光电灵敏较高,而在高温下的灵敏度则较低。 l 额定功率。额定功率是指光敏电阻用于某种线路中所允许消耗的功率,当温度升高时,其消耗的功率就降低。光照传感器实物如图 所示图 光照传感器实物图Zigbee实验板与光敏电阻的连接如图 所示图 Zigbee实验板与光敏电阻的连接 将ZigBee芯片的P04引脚设置为AD采样的模拟输入引脚,这样由光敏电阻阻值变换所引起的电压的变化量就会反映在芯片的模拟输入引脚上,芯片根据电压的变化量可以判断出当前的光照强度。2)程序流程1 传感节点发送数据流程在节点成功加入网络并且同协调器绑定成功后,通过SimpleSensor.c文件中的zb_BindCo

10、nfirm()函数来调用myApp_StartReporting()函数1.void zb_BindConfirm( uint16 commandId, uint8 status ) (void)commandId; if ( ( status = ZB_SUCCESS ) && ( myAppState = APP_START ) ) myAppState = APP_BOUND; myApp_StartReporting(); else osal_start_timerEx( sapi_TaskID, MY_FIND_COLLECTOR_EVT, myBindRetryDe

11、lay ); 2.在myApp_StartReporting()函数中触发测量温度事件。void myApp_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()中对该事件进行响应。void zb_HandleOsalEvent( uint16 even

12、t ) uint8 pData2; if ( event & MY_REPORT_EXTEMP_EVT ) pExTemp0 = 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()函数读取当前温度值。void myApp_ReadExTemper

13、ature( void ) UINT8 temh,teml; UINT16 num; UINT8 i; uint8 Temp_channel; P0DIR=0x00; P1DIR |= 0x0d; / 设置P1.0,P1.2,P1.3为输出方式 P2DIR |= 0x01; / 同上 read_data();/ 读取温度 Temp_channel=0x31; teml=sensor_data_value0; temh=sensor_data_value1; i=(Temp_channel-0x31)*2; ch0=Temp_channel;/当前显示的传感器的编号 ch1=' '

14、; num=teml*625; /小数部分的取值每位代表0.0625(精度) if(flag=1) /判断正负温度 ch2='-' /+0x2d 为变"-"ASCII码 else ch2='+' if(temh/100=0) ch3=' ' else ch3=temh/100+0x30; /+0x30 为变 09 ASCII码 if(temh/10%10=0)&&(temh/100=0) ch4=' ' else ch4=temh/10%10+0x30; ch5=temh%10+0x30; ch

15、6='.' ch7=num/1000+0x30;/忽略小数点后1位的数 read_data()是负责从DS18b20中读取当前温度的函数,其中涉及到对DS18b20器件单总线结构的操作函数,该函数位于DS18B20.c文件中,详细操作流程请结合DS18b20相关数据手册参看附录中的程序清单,在此就不详细列出。5.事件响应函数通过调用zb_SendDataRequest()函数将得到的温度值发送至协调器节点。2 汇聚节点接收数据流程程序接收数据函数void zb_ReceiveDataIndication( uint16 source, uint16 command, uint1

16、6 len, uint8 *pData ) . uint8 sensorReading; uint8 tmpBuf32; uint8 *outputBuf; if (command = SENSOR_REPORT_CMD_ID) sensorReading = pData1; outputBuf =tmpBuf; switch( pData0 ) case EXTEMP_REPORT: tmpBuf1='7' tmpBuf6 = '*' while(i<len) tmpBuf7+i = pData1+i;/接收到的数据 i+; i=0; tmpBuflen

17、+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); 接收到数据后,通过串口汇报给上位机程序。程序的流程图如图 所示。图 数据报告程序流程图通过以上流程,由温度传感器DS18b20获得的温度数据就可以通过ZigBee网络发送至与ZigBee汇聚节点通信的上位

18、机软件中。完成对远程温度数据的采集工作。3)实验步骤第一步:开发模块加电,并连接好仿真器。利用IAR开发工具设置成debug,2个模块下载collector.c文件,2个模块下载sensor.c文件。其中下载collector.c程序的模块是采集器,下载sensor.c程序的模块是传感器。第二步:下载成功后,先启动一个采集器,按顺序按下模块的上键->右键->下键,此时四个灯都一直亮,表明该采集器建立了网络,并可以让其他模块加入到该网络中。第三步:启动另一个采集器,按键上键即可,此时四个灯都一直亮。第四步:分别启动两个传感器,按下模块的下键,此时传感器模块的绿灯、红灯、黄灯一起快速闪

19、烁,采集器的红灯在慢速闪烁,表明传感器的数据在不停的向采集器发送数据。第五步:采集数据,分析数据。传感器每隔2秒一次上传至采集器。4)程序清单清单5.1 读取传感器测出的外界温度信息/* * 函数名 myApp_ReadExTemperature * 描述 读取传感器测出的外界温度信息 AD采样使用P07管脚 * 参数 无 * 返回值 返回环境的温度信息,只保留了整数部分 */static uint8 myApp_ReadExTemperature( void ) UINT8 temh,teml; read_data(); / 读取温度 teml=sensor_data_value0;/小数部

20、分 temh=sensor_data_value1;/整数部分 return temh;清单5.2 把读取的温度数据转换为真实的温度信息/* * 函数名 read_data * 描述 利用read_1820函数读取温度数据之后,把温度数据转换为温度信息 * 参数 无 * 返回值 无 */void read_data(void) UINT8 temh,teml; UINT8 a,b,c; init_1820(); /复位18b20 write_1820(0xcc); / 发出转换命令 搜索器件 write_1820(0x44); /启动 Delay_nus(50000); init_1820()

21、; write_1820(0xcc); write_1820(0xbe); teml=read_1820(); /读数据 temh=read_1820(); if(temh&0x80)/判断正负 flag=1; c=0; c=c|temh; c=c&0x00ff; c=c<<8; a=c; a=c|teml; a=(a0xffff);/异或 a=a+1; /取反加1 teml=a&0x0f; temh=a>>4; else flag=0; /为正 a=temh<<4; a+=(teml&0xf0)>>4; /得到高

22、位的值 b=teml&0x0f; temh=a; teml=b&0x00ff; sensor_data_value0=teml; sensor_data_value1=temh;清单5.3 利用DS18B20读取温度数据函数/* * 函数名 read_1820 * 描述 利用DS18B20读取温度数据的底层函数 * 参数 无 * 返回值 返回读取的温度数据 */UINT8 read_1820(void) UINT8 temp,k,n; temp=0; for(n=0;n<8;n+) CL_DQ; SET_DQ; SET_IN; k=IN_DQ; /读数据,从低位开始 if

23、(k) temp|=(1<<n); else temp&=(1<<n); Delay_nus(70); /60120us SET_OUT; return (temp); 清单5.4 传感器读取外部光照强度的函数/* * 函数名 myApp_ReadLight* 描述 读取传感器测出的外界光度强度信息 AD采样使用P04管脚 * 参数 无 * 返回值 返回环境的光照强度信息,范围在0100之间,100最亮 */static uint8 myApp_ReadLight( void ) INT8 adc_value; P0DIR &= (0x01<<4); /设置P04为输入模式,采集P04的电压 ADCCFG |= (0x01<<0x04); /设置P04使能/设置A

温馨提示

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

评论

0/150

提交评论