当前位置:文档之家› 无线传感网络技术课程设计报告模板

无线传感网络技术课程设计报告模板

辽宁工业大学无线传感网络技术课程设计(论文)题目:加速度传感器数据采集系统院(系):电子与信息工程学院专业班级:物联网学号:学生姓名:指导教师:教师职称:起止时间:14-06-23至14-07-11辽宁工业大学课程设计说明书(论文)课程设计(论文)任务及评语院(系):电子与信息工程学院教研室:目录第1章加速度数据采集系统设计方案 (1)1.1 引言 (1)1.2 总体方案论述 (1)第2章加速度数据采集系统的硬件设计 (2)2.1 系统所需的硬件 (2)2.2 硬件系统各部分实现的功能 (4)2.3系统整体实现的功能简介 (5)第3章加速度传感器数据采集系统的软件设计 (6)3.1 系统软件的功能说明 (6)3.2 系统程序流程图 (6)3.3 系统主要代码 (7)第4章课程设计总结 (15)参考文献 (16)第1章加速度数据采集系统设计方案1.1 引言随着智能化脚步的到来,人们已经发明出了很多用于测量的高智能产品,其中就有加速度传感器,加速度传感器是通过测量由于重力引起的加速度,你可以计算出设备相对于水平面的移动速度,通过分析动态加速度,你可以分析出设备移动的方式。

加速度传感器不仅可以测量牵引力产生的加速度,甚至可以用来分析发动机的振动。

其应用非常广泛,例如加速度传感器可应用于地震波的检测,车祸报警的应用,还可用于高压电线的摆动监测,应用十分的广泛。

1.2 总体方案论述加速度数据采集系统的总体结构如图1所示。

系统主要由三部分组成,包括加速度传感器节点,协调器,PC。

首先我们将编写好的协调器代码通过IAR环境烧写到协调器中,然后修改协调器中各节点ID,此时协调器将会组建一个小范围的网络来控制各个节点协调工作。

加速度传感器节点将采集到的数据通过无线的方式传给协调器,协调器通过串口将数据上传到上位机的显示屏。

本次的系统设计在原有的基础上增加了难度,不仅通过串口通信输出到 PC 机上实时显示,而且同过无线的方式用加速度传感器采集到的信息来控电机,通过转动与停止来检测是否产生加速度。

其系统组成框图如图1.1所示图1.1 系统总体框图第2章加速度数据采集系统的硬件设计2.1 系统所需的硬件加速度数据采集系统所需的硬件包括加速度传感器节点,协调器,电机传感器节点,PC机,烧写代码的工具。

其实物图如下:图2.1 加速度传感器节点图2.2 烧写代码工具图2.3 协调器图 2.4 电机传感器节点2.2 硬件系统各部分实现的功能2.2.1 数据的采集与发送部分实现该部分功能的部件是加速度传感器节点,该节点中的敏感元件将测点的加速度信号转换为相应的电信号,进入前置放大电路,经过信号调理电路改善信号的信噪比,再进行模数转换得到数字信号,最后送入到其嵌入的的单片机中,单片机再进行数据存储与控制。

当传感元件以加速度a运动时,质量块受到一个与加速度方向相反的惯性力作用,发生与加速度成正比a的形变,使悬臂梁也随之产生应力和应变。

该变形被粘贴在悬臂梁上的扩散电阻感受到。

根据硅的压阻效应,扩散电阻的阻值发生与应变成正比的变化,将这个电阻作为电桥的一个桥臂,通过测量电桥输出电压的变化可以完成对加速度的测量。

其框图如图2.2:图 2.2 无线加速度传感器网络节点框图2.2.2 协调器节点部分协调器是加速度传感器数据采集系统中的重要组成部分,它的作用主要包括协调建立网络,还包括检测网络状态、发送维护信号、发送采集命令,其他功能还包括:传输网络信标、管理网络节点及存储网络节点信息,并且提供关联节点之间的路由信息;此外,网络协调器要存储一些基本信息,如节点数据设备、数据转发表及设备关联表等。

其框图如图2.3:图2.3 协调器节点框图2.2.3 结果的表达与输出部分该部分包括两部分,一是电机节点,二是PC机的显示屏。

由加速度传感器节点采集到的数据最终将通过串口输出数据显示在屏幕上,还有通过电机的转动与停止来观察数据。

图 2.4 数据显示在屏幕上2.3系统整体实现的功能简介各个节点的代码及协调器的代码烧写完毕后,对加速度传感器进行一定动作后,在协调器所组建的这个小网络下将进行数据的无线传输。

协调器接收到数据后通过串口将数据上传到显示屏上,电机接收到数据后会开始转动。

其实现的功能如下图所示:第3章加速度传感器数据采集系统的软件设计3.1 系统软件的功能说明主程序是系统的监控程序,主要对系统中各部分进行初始化工作,使整个系统在上电后进入初始化状态,,主要工作流程是:系统在上电后首先完成CPU和外部端口的初始化,采集节点会将采集到的数据在ZigBee网络中广播,协调器将收到的数据上传上位机,电机收到数据后发生转动,这就是系统软件实现的功能。

3.2 系统程序流程图图 3.1 系统程序流程图3.3 系统主要代码3.3.1 加速度传感器节点代码void SerialApp_Init( uint8 task_id ){halUARTCfg_t uartConfig;static uint8 deviceID;SerialApp_TaskID = task_id;afRegister( (endPointDesc_t *)&SerialApp_epDesc );RegisterForKeys( task_id );Init_I2c();ADXL345Init();IReadData(ADXL345_ADDR<<1, WHO_AM_I, &deviceID); //0xD3if(deviceID == 0xE5){}else{while(1);}UART0_Format.Header_1 = 0xee;UART0_Format.Header_2 = 0xcc;UART0_Format.NodeSeq = 0x01;UART0_Format.NodeID = Accele;UART0_Format.Tailer = 0xff;SerialApp_TxAddr.addrMode =(afAddrMode_t)Addr16Bit;//发送地址初始化 SerialApp_TxAddr.endPoint = SERIALAPP_ENDPOINT;SerialApp_TxAddr.addr.shortAddr = 0xffff;TXPOWER = 0xf5;}void SerialApp_Init( uint8 task_id ){halUARTCfg_t uartConfig;static uint8 deviceID;SerialApp_TaskID = task_id;afRegister( (endPointDesc_t *)&SerialApp_epDesc );RegisterForKeys( task_id );Init_I2c();ADXL345Init();IReadData(ADXL345_ADDR<<1, WHO_AM_I, &deviceID); //0xD3if(deviceID == 0xE5){}else{while(1);} UART0_Format.Header_1 = 0xee;UART0_Format.Header_2 = 0xcc;UART0_Format.NodeSeq = 0x01;UART0_Format.NodeID = Accele;UART0_Format.Tailer = 0xff;SerialApp_TxAddr.addrMode =(afAddrMode_t)Addr16Bit;//发送地址初始化void SerialApp_ProcessMSGCmd( afIncomingMSGPacket_t *pkt ) //处理接收到的RF消息{static UART_Format *receiveData;switch ( pkt->clusterId ){case SERIALAPP_CLUSTERID1: //处理各个传感器节数据receiveData = (UART_Format *)(pkt->cmd.Data);if((receiveData->Header_1==0xcc)&&(receiveData->Header_2==0xee)&&(receiveData->Tailer==0xff)) //校验包头包尾{if(receiveData->NodeID == Accele) //地址{HalLedBlink(HAL_LED_2,1,50,600);}}break;case SERIALAPP_CLUSTERID2:break;default:break;}}3.2 协调器节点主要代码void SerialApp_ProcessMSGCmd( afIncomingMSGPacket_t *pkt ) //处理接收到的RF消息{UART_Format *receiveData;/*UART_Format rsp;rsp.Header_1 = 0xcc;rsp.Header_2 = 0xee;rsp.NodeSeq = 0x01;rsp.Tailer = 0xff;*/receiveData = (UART_Format *)(pkt->cmd.Data);int8 receive_rssi;receive_rssi = pkt->rssi;switch ( pkt->clusterId ){case SERIALAPP_CLUSTERID1: //处理各个传感器节数据if((receiveData->Header_1==0xee)&&(receiveData->Header_2==0xcc)&&(receiveData->Tailer==0xff)) //校验包头包尾{if(receiveData->Command == MSG_PERIOD) //如果是周期消息{receiveData->Data[0] = receive_rssi;}HalUARTWrite(SERIAL_APP_PORT, (uint8*)receiveData, sizeof(UART_Format)); //通过串口发送给网关if(receiveData->NodeID == LED_PWM){PWM_TxAddr = pkt->srcAddr;}}break;case SERIALAPP_CLUSTERID2:break;default:break;}if (afStatus_SUCCESS != AF_DataRequest(txaddr, //发送地址(endPointDesc_t*)&SerialApp_epDesc, //endpoint描述cID, //clusterIDlen, p, //发送数据包的长度和地址&SerialApp_MsgID, 0, AF_DEFAULT_RADIUS)){}else{HalLedBlink(HAL_LED_1,1,50,600);}void SerialApp_ProcessMSGCmd( afIncomingMSGPacket_t *pkt ) //处理接收到的RF消息{UART_Format *receiveData;/*UART_Format rsp;rsp.Header_1 = 0xcc;rsp.Header_2 = 0xee;rsp.NodeSeq = 0x01;rsp.Tailer = 0xff;*/receiveData = (UART_Format *)(pkt->cmd.Data);int8 receive_rssi;receive_rssi = pkt->rssi;switch ( pkt->clusterId ){case SERIALAPP_CLUSTERID1: //处理各个传感器节数据if((receiveData->Header_1==0xee)&&(receiveData->Header_2==0xcc)&&(receiveData->Tailer==0xff)) //校验包头包尾{if(receiveData->Command == MSG_PERIOD) //如果是周期消息{receiveData->Data[0] = receive_rssi;}HalUARTWrite(SERIAL_APP_PORT, (uint8*)receiveData, sizeof(UART_Format));//通过串口发送给网关if(receiveData->NodeID == LED_PWM){PWM_TxAddr = pkt->srcAddr;}}break;case SERIALAPP_CLUSTERID2:break;default:break;}}3.3.3 电机节点代码void SerialApp_Init( uint8 task_id ){halUARTCfg_t uartConfig;SerialApp_TaskID = task_id;afRegister( (endPointDesc_t *)&SerialApp_epDesc );RegisterForKeys( task_id );Motor_Init();LED_Init();uartConfig.configured = TRUE; // 2x30 don't care - seeuart driver.uartConfig.baudRate = SERIAL_APP_BAUD;uartConfig.flowControl = FALSE;uartConfig.flowControlThreshold = SERIAL_APP_THRESH; // 2x30 don't care - seeuart driver.uartConfig.rx.maxBufSize = SERIAL_APP_RX_SZ; // 2x30 don't care - seeuart driver.uartConfig.tx.maxBufSize = SERIAL_APP_TX_SZ; // 2x30 don't care - seeuart driver.uartConfig.idleTimeout = SERIAL_APP_IDLE; // 2x30 don't care - seeuart driver.uartConfig.intEnable = TRUE; // 2x30 don't care - seeuart driver.uartConfig.callBackFunc = SerialApp_CallBack;HalUARTOpen (SERIAL_APP_PORT, &uartConfig);UART0_Format.Header_1 = 0xee;UART0_Format.Header_2 = 0xcc;UART0_Format.NodeSeq = 0x01;UART0_Format.NodeID = Motor;UART0_Format.Tailer = 0xff;SerialApp_TxAddr.addrMode =(afAddrMode_t)Addr16Bit;//发送地址初始化SerialApp_TxAddr.endPoint = SERIALAPP_ENDPOINT;SerialApp_TxAddr.addr.shortAddr = 0x0000;TXPOWER = 0xf5;}void SerialApp_ProcessMSGCmd( afIncomingMSGPacket_t *pkt ) //处理接收到的RF消息{static UART_Format *receiveData;static UART_Format Rsp;Rsp.Header_1 = 0xee;Rsp.Header_2 = 0xcc;Rsp.NodeSeq = 0x01;Rsp.NodeID = Motor;mand = MSG_RSP;Rsp.Tailer = 0xff;switch ( pkt->clusterId ){case SERIALAPP_CLUSTERID1: //处理各个传感器节数据receiveData = (UART_Format *)(pkt->cmd.Data);if((receiveData->Header_1==0xee)&&(receiveData->Header_2==0xcc)&&(receiveData->Tailer==0xff)) //校验包头包尾{if(receiveData->NodeID == Accele) //地址{Motor_Control(FRONT);Rsp.Data[0] = FRONT;}else{Motor_Control(HALT);第4章课程设计总结为期三周的加速度传感器数据采集系统的课程设计即将结束,这次的课设对我来说真的很重要,很贴近我们所学习的专业,真的学到了很多有用的知识。

相关主题