无线传感网络技术课程设计报告模板
辽 宁 工 业 大 学
无线传感网络技术 课程设计(论文)
题目: 加速度传感器数据采集系统
院(系): 电子与信息工程学院 专业班级: 物联网 学 号: 学生姓名: 指导教师: 教师职称:
起止时间:14-06-23至14-07-11
--
--
课程设计(论文)任务及评语
院(系):电子与信息工程学院 教研室: 学 号 课程设计(论文)题目 学生姓名 专业班级 加速度传感器数据采集系统 利用加速度传感器进行数据采集,并将采集到的数据传递到上位机,并显示 。用加速度传感器采集到的信息来控制电机,通过转动与停止来检测是否产生加速度。 主要设计内容: 1. 画出实验原理图 课程设计(论文)任务 2. 编写功能代码,烧写代码 3. 功能熟练演示 要求: 1. 根据题目和所用的传感器节点,用计算机绘制出原理图以及程序流程图; 2. 认真独立完成所规定的设计内容(4000字左右),严禁相互抄袭; 平时成绩: 论文质量: 答 辩: 指导教师评语及成绩 总 成 绩: 指导教师签字: 年 月 日 --
--
目 录
第1章 加速度数据采集系统设计方案 ........................ 1 1.1 引言 ................................................. 1 1.2 总体方案论述 ......................................... 1 第2章 加速度数据采集系统的硬件设计 .................... 2 2.1 系统所需的硬件 ...................................... 2 2.2 硬件系统各部分实现的功能 ............................. 3 2.3系统整体实现的功能简介 ............................... 4 第3章 加速度传感器数据采集系统的软件设计 .............. 5 3.1 系统软件的功能说明 .................................. 5 3.2 系统程序流程图 ...................................... 5 3.3 系统主要代码 ........................................ 6 第4章 课程设计总结 ................................... 13 参考文献 ................................................ 14
--
--
第1章 加速度数据采集系统设计方案
1.1 引言
随着智能化脚步的到来,人们已经发明出了很多用于测量的高智能产品,其中就有加速度传感器,加速度传感器是通过测量由于重力引起的加速度,你可以计算出设备相对于水平面的移动速度,通过分析动态加速度,你可以分析出设备移动的方式。加速度传感器不仅可以测量牵引力产生的加速度,甚至可以用来分析发动机的振动。其应用非常广泛,例如加速度传感器可应用于地震波的检测,车祸报警的应用,还可用于高压电线的摆动监测,应用十分的广泛。 1.2 总体方案论述
加速度数据采集系统的总体结构如图1所示。系统主要由三部分组成,包括加速度传感器节点,协调器,PC。首先我们将编写好的协调器代码通过IAR环境烧写到协调器中,然后修改协调器中各节点ID,此时协调器将会组建一个小范围的网络来控制各个节点协调工作。加速度传感器节点将采集到的数据通过无线的方式传给协调器,协调器通过串口将数据上传到上位机的显示屏。本次的系统设计在原有的基础上增加了难度,不仅通过串口通信输出到 PC 机上实时显示,而且同过无线的方式用加速度传感器采集到的信息来控 电机,通过转动与停止来检测是否产生加速度。
其系统组成框图如图1.1所示
加速度传感器 协调器 PC显示屏 电源模块 电机传感器 图1.1 系统总体框图
--
--
第2章 加速度数据采集系统的硬件设计
2.1 系统所需的硬件
加速度数据采集系统所需的硬件包括加速度传感器节点,协调器,电机传感器节点,PC机,烧写代码的工具。
其实物图如下:
图2.1 加速度传感器节点
图2.2 烧写代码工具
--
--
图2.3 协调器
图 2.4 电机传感器节点
2.2 硬件系统各部分实现的功能
2.2.1 数据的采集与发送部分
实现该部分功能的部件是加速度传感器节点,该节点中的敏感元件将测点的加速度信号转换为相应的电信号,进入前置放大电路,经过信号调理电路改善信号的信噪比,再进行模数转换得到数字信号,最后送入到其嵌入的的单片机中,单片机再进行数据存储与控制。当传感元件以加速度a运动时,质量块受到一个与加速度方向相反的惯性力作用,发生与加速度成正比a的形变,使悬臂梁也随之产生应力和应变。该变形被粘贴在悬臂梁上的扩散电阻感受到。根据硅的压阻效应,扩散电阻的阻值发生与应变成正比的变化,将这个电阻作为电桥的一个桥臂,通过测量电桥输出电压的变化可以完成对加速度的测量。
其框图如图2.2:
--
--
无线单片机 (CC2430) 加速度传感器 外围匹配电路 系统电源 电源监测电路以及相应的指示电路 图 2.2 无线加速度传感器网络节点框图
2.2.2 协调器节点部分
协调器是加速度传感器数据采集系统中的重要组成部分,它的作用主要包括协调建立网络,还包括检测网络状态、发送维护信号、发送采集命令,其他功能还包括:传输网络信标、管理网络节点及存储网络节点信息,并且提供关联节点之间的路由信息;此外,网络协调器要存储一些基本信息,如节点数据设备、数据转发表及设备关联表等。
其框图如图2.3:
初始化 有节点加入网络
开始 建立网络 图 2.3 协调器节点框图 分配网络地址 2.2.3 结果的表达与输出部分
该部分包括两部分,一是电机节点,二是PC机的显示屏。由加速度传感器节点采集到的数据最终将通过串口输出数据显示在屏幕上,还有通过电机的转动与停止来观察数据。
图 2.4 数据显示在屏幕上
2.3系统整体实现的功能简介
各个节点的代码及协调器的代码烧写完毕后,对加速度传感器进行一定动作后,在协
--
--
调器所组建的这个小网络下将进行数据的无线传输。协调器接收到数据后通过串口将数据 上传到显示屏上,电机接收到数据后会开始转动。
其实现的功能如下图所示:
第3章 加速度传感器数据采集系统的软件设计
3.1 系统软件的功能说明
主程序是系统的监控程序,主要对系统中各部分进行初始化工作,使整个系统在上电后进入初始化状态,,主要工作流程是:系统在上电后首先完成CPU和外部端口的初始化,采集节点会将采集到的数据在ZigBee网络中广播,协调器将收到的数据上传上位机,电 机收到数据后发生转动,这就是系统软件实现的功能。 3.2 系统程序流程图
开始
处理器初始化
各功能模块初始化 --
--
ADC初始化设置
到接收数据时间 Y 相应寄存器标志位清零
读取数据寄存器
处理并通过串口发送数据 图 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); //0xD3
if(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); //0xD3
if(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, //clusterID
len, 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 - see
uart driver.
--
--
uartConfig.baudRate = SERIAL_APP_BAUD;
uartConfig.flowControl = FALSE;
uartConfig.flowControlThreshold = SERIAL_APP_THRESH; // 2x30 don't care - see
uart driver.
uartConfig.rx.maxBufSize = SERIAL_APP_RX_SZ; // 2x30 don't care - see
uart driver.
uartConfig.tx.maxBufSize = SERIAL_APP_TX_SZ; // 2x30 don't care - see
uart driver.
uartConfig.idleTimeout = SERIAL_APP_IDLE; // 2x30 don't care - see
uart driver.
uartConfig.intEnable = TRUE; // 2x30 don't care - see
uart 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; Rsp.Command = 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章 课程设计总结
为期三周的加速度传感器数据采集系统的课程设计即将结束,这次的课设对我来说真的很重要,很贴近我们所学习的专业,真的学到了很多有用的知识。最近我们专业的实验 室引进了一批物联网实验箱,这是我以前所没有见过的,我想通过这次的学习会对我以后的工作有很大的帮助的。
这三周的课设共分为三个部分,第一部分是中软国际的一位老师给我们做了一次很有意义的培训。首先他灌输给我们无线传感器网络的一个整体的思维,然后给我们讲解其中各个小部分,例如协调器是如何组建网络的,紧接着给我们讲解C语言中的代码。在我看来这次的培训实用性真的很强,更贴近实践,我想在以后的工作中会给我很大的帮助,在 此,我要感谢这位老师教给我们这么多有用的知识。
--
--
第二部分是贾旭老对我们这次课程设计进行综合的指导,在一些细节方面给予我们帮助与解答。事实证明,前一阶段所学习的知识已经做到活学活用,很多以前不懂的地方现在已经都不是问题了,以前对于我们来说困难的问题大部分自己都能够解决,还有一些细 节问题在贾老师的帮助下都已经解决了,最后自己动手将整个加速度传感器数据采集系统连接成功,加速度传感器节点将采集到的数据通过无线的方式传给协调器,协调器通过串口将数据上传到上位机的显示屏。整个课程设计就完成了,在此,还要感谢贾老师给予我 们的指导
最后这部分主要是我们自己根据自己所做的系统书写课设论文。整个过程给了我很大 的启发,多动手实践对于以后找工作会有很大的帮助。
参考文献
[1] 许晓青, 王宝光, 孙春生. 基于 MEMS 传感器技术的微型化、数字式倾角仪的研究[J]. 电子测量技术, 2008( 2) .
[3] 李德胜, 王东红, 等. MEMS 技术及应用[ M]. 哈尔滨: 哈尔滨 工业大学出版社, 2002. [5] 周立功. ARM 嵌入式系统基础教程[ M] . 北京: 北京航空航 天大学出版社, 2005 [3] 张毅刚.单片机原理及应用,北京:高等教育出版社,2003:126—135 [4] 顾兴源.计算机控制系统,北京:冶金工业出版社, 1981:25—40 [5] 张毅刚.单片机原理及接口技术.北京:人民邮电出版社,2008:53-70
--
因篇幅问题不能全部显示,请点此查看更多更全内容