资源描述
武汉华夏理工学院
信息工程课程设计报告书
课 程 名 称 物联网应用系统设计
课程设计总评成绩
学 生 姓 名
学 号
学 生 专 业 班级
指 导 教 师 姓名
课程设计起止日期 2018.6.11~2018.7.15
一、课程设计项目名称
基于ZigBee合同栈智能家居控制灯系统
二、项目设计目及技术规定
2.1 项目设计目
通过《物联网应用系统设计》课程设计,使学生可以掌握物联网应用系统设计开发流程、设计办法,使学生可以综合应用《无线传感器网络技术》、《嵌入式技术》、《JAVA WEB程序设计》《Andriod程序设计》、《物联网应用系统设计》等物联网工程专业课程知识。规定学生通过课程设计教学环节进一步理解物联网应用系统总体架构,掌握物联网应用系统基本设计办法,程序开发流程,从而使学生对物联网应用系统设计能力有较大提高。
2.2 项目重要任务
1.设计内容:
课程设计题目普通由指引教师提供,也可以在教师批准下学生自己题;
4人一组,每组完毕内容不能雷同。设计参照题目如下:
1)智能家居环境监测系统
2)智能家居控制灯系统
3)智能农业区-自动灌溉系统
2.基本规定:
1)学会单片机应用办法,开发环境;
2)结合任务规定,完毕系统设计和调试,勉励功能扩展和创新;
3)会应用protues工具,依照设计电路,画电路图,并运用protues进行验证仿真;
4)熟悉汇编或C51语言,用C51完毕系统软件编程;
5)按规范撰写课程设计阐明书。
3. 项目分工
上位机:李永红、夏智君
下位机:陈建、李元毅
4、课程设计环节及时间进度和场地安排
1)指引教师下达课程设计任务书;
2)完毕物联网应用系统设计;
3)完毕系统制作和调试;
4)绘制系统框图和电路图、或程序代码;
5)撰写课程设计阐明书
时间进度和场地安排:
1.6月11日,下达课程设计任务书,简介物联网应用系统设计,查阅有关资料,拟定设计方案,给团队分工合伙。
2.6月11日—14日,审查设计方案,拟定自己在团队里面要完毕任务,开始有关代码编写及调试。
3. 6月15日,撰写课程设计报告书,并准备答辩。
5、实验室(423)开放时间
周次
地点
星期一
星期二
星期三
星期四
星期五
第1周
第5-8节
第5-8节
第5-8节
第5-8节
第5-8节
实验室423
实验室423
实验室423
实验室423
实验室423
6、课程设计考核及评分原则
1.设计阐明书规定
课程设计阐明书规定逻辑清晰、层次分明、书写整洁。阐明书格式涉及标题(中英文)、提纲、正文(涉及①设计项目规定与阐明。②电路原理分析。③软件流程分析。④调试分析。⑤实验数据分析。⑥答辩。⑦成绩评估。)、附录(图纸.程序清单或软盘) 。课程设计阐明书须每人一份,独立完毕。
2.图纸规定
系统构造框图、protel电路图
三、项目设计方案论证
3.1基于ZigBee合同栈智能家居控制灯系统设计整体方案
对ZigBee合同框架构造进行分析,然后通过阐述合同应用层、网络层、数据链路层、物理层和MAC层功能,将无线传感器网络与ZigBee技术相结合,阐述无线传感器网络节点硬件和软件设计办法。在本设计中,选用功耗较小CC2530芯片作为通信芯片来设计节点。通过编写合同栈程序,进行包括汇聚节点及传感器节点组网通信实验。运用VC++编写上位机程序,通过串口进行数据交互,从而控制小灯。此系统构成框图如图3-1所示:
发送
无线模块
接受
CC2530
Zigbee4模块
CC2530
Zigbee3模块
图3-1 基于ZigBee合同栈智能家居控制灯系统设计整体方案
3.2系统实现原理
3.2.1硬件原理图
本实验使用是CC2530芯片, CC2530 具备一种IEEE 802.15.4 兼容无线收发器。RF 内核控制模仿无线模块。此外,它提供了MCU 和无线设备之间一种接口,这使得可以发出命令,读取状态,自动操作和拟定无线设备事件顺序。无线设备还涉及一种数据包过滤和地址辨认模块。本系统重要涉及LED、RS485模块、USB转串口电路、CC2530典型应用电路。如下图所示:
图3-2-1 CC2530LED模块 图3-2-2 小灯模块
图3-2-3 USB转串口电路
3.2.2 节能灯模块
本实验用节能灯传感器为12V供电,接通电源后节能灯亮,该节能灯可以通过继电器控制其开关,通过控制四路继电器P1吸合与断开,控制节能灯打开与关闭。
图3.2.2 节能灯传感器
接线阐明
节能灯模块信号
DC12V
GND
--
四路继电器端子
电源板+ J1
电源板-
P1
机柜面板
--
--
IO(绿色)
表3.2 节能灯模块连线阐明
通信合同设计
SOF
Sensor type
Sensor index
Cmd id
Data
Exten Data
END
2Byte
1Byte
1Byte
1Byte
6Byte
2Byte
1Byte
阐明:
SOF: 固定为0xEE 0xCC,标志一帧开始。
Sensor type: 见附表一传感器阐明。
Sensor index: 固定为0x01。
Cmd id: 固定为0x01。
Data: 为6Byte传感器数据域,见附表一传感器阐明。
Exten Data: 为2Byte扩展数据域
END: 固定为0xFF,标志一帧结束。
开灯指令:EE CC 01 01 01 00 00 00 00 00 01 00 00 FF
关灯指令:EE CC 01 01 01 00 00 00 00 00 00 00 00 FF
3.2.3 实验连线阐明
1.一方面将节能灯模块下方信号孔(绿色香蕉孔)与香蕉线相连。
2.将zibgee模块下方绿色香蕉孔(P1_4)与电扇香蕉线相连接。然后将红黄蓝三根信号线分别插到相应颜色香蕉孔。Zigbee Debuger USB仿真器连接到ZigBee模块下方20PIN插孔上。
3.通过上位机软件给ZigBee下载本实验程序(途径:家居农业综合实训区\传感层工程\实验九 节能灯模块),详细下载办法详见《IAR软件下载阐明文档》。用IAR MCS-51 8.10.3软件,打开光盘源码目录中人体传感器工程并下载。
4.将无线通讯节点三根信号线分别接在智能网关上,设备上电(注意:红黄两根线一定要交叉!)。
5.打开网关端SensorDemo软件,配备好串口波特率115200并连接。
6.点击界面上开关按键进行控制。当DATA数据区打印00 00 00 00 00 00:表达关闭状态,打印00 00 00 00 00 01:时表达打开状态(详细合同详见《CBT 模块通讯合同V2.5》文档)。电扇上电后ZigBee模块上LED1红灯会亮。
四、软件流程分析
开始
开始
终端接受
点击上位机中按钮
与否等于01
串口发送
是 是
与否等于00
协调器接受
节能灯亮
节能灯灭
协调器广播发送
终端组播发送应答指令
协调器接受
通过串口发送至上位机
显示在上位机编辑框中
结束
4.1硬件某些功能程序实现
4.1.1 终端程序
voidSampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{ uint16flashTime;switch ( pkt->clusterId )
{case SAMPLEAPP_PERIODIC_CLUSTERID: //接受广播消息
HalLedBlink( HAL_LED_1,4,50,1000 );
if((pkt->cmd.Data[0]==0xEE)&&(pkt->cmd.Data[1]==0xCC))
{HalLedBlink( HAL_LED_2,4,50,500 );
if(pkt->cmd.Data[10]==0x01) { P1_4=0x01;
HalLedBlink( HAL_LED_2,4,50,500 );
if ( AF_DataRequest( &SampleApp_Flash_DstAddr,&SampleApp_epDesc,
SAMPLEAPP_FLASH_CLUSTERID,14,xzj,&SampleApp_TransID,AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ){ }}
if(pkt->cmd.Data[10]==0x00) { P1_4=0x00;
HalLedBlink( HAL_LED_2,4,50,500 );
if ( AF_DataRequest( &SampleApp_Flash_DstAddr,&SampleApp_epDesc,
SAMPLEAPP_FLASH_CLUSTERID,14,xzz,&SampleApp_TransID,
AF_DISCV_ROUTE,AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ){ }}
HalLedBlink( HAL_LED_1,4,50,1000 );}break;
4.1.2串口使用
通过CC2530芯片解决无线传播到协调器节点,串口调试助手在PC机上显示。在Z_Stack合同栈中,运用串口回调函数进行发送和接受。UART操作由USART控制和状态寄存器UxCSR以及UART控制寄存器UxUCR来控制。寄存器UxBAUD用于设立波特率,寄存器 UxBUF是USART接受/传送数据缓存。
uint8 RX_BUFFER[20];//接受缓冲区;
void UartCallBackFunction(uint8 port ,uint8 event);//回调函数声明,定义在最背面;
Uart_Config();//配备串口
HalUARTOpen(0 ,&uartConfig);//打开串口
/* 配备串口 */
halUARTCfg_tuartConfig;//定义串口配备构造体变量;
void Uart_Config(void);//函数声明;
void Uart_Config(void) //函数定义;
{
uartConfig.configured = TRUE; //容许配备;
uartConfig.baudRate = HAL_UART_BR_9600;//波特率;
uartConfig.flowControl = FALSE;
uartConfig.flowControlThreshold = 64; //don't care - see uart driver.
uartConfig.rx.maxBufSize = 128; //串口接受缓冲区大小
uartConfig.tx.maxBufSize = 128; //串口发送缓冲区大小
uartConfig.idleTimeout = 6; //don't care - see uart driver.
uartConfig.intEnable = TRUE;//使能中断
uartConfig.callBackFunc = UartCallBackFunction;}
static void UartCallBackFunction(uint8 port ,uint8 event)
{uint8 RX_Length = 0;//接受到字符串大小;
RX_Length = Hal_UART_RxBufLen(0);//读取接受字符串大小;
if(RX_Length != 0){HalUARTRead(0 ,RX_BUFFER ,RX_Length);
if((RX_BUFFER[0]==0xEE)&&(RX_BUFFER[1]==0xCC)){
SampleApp_SendPeriodicMessage();delay_ms(100);
HalLedBlink( HAL_LED_1,4,50,500 );}} }
4.1.3解决组播消息
voidSampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{uint16flashTime;
switch ( pkt->clusterId ){
case SAMPLEAPP_PERIODIC_CLUSTERID: //接受广播消息
// HalUARTWrite(0 ,pkt->cmd.Data,12 );
// HalLedBlink( HAL_LED_1,4,50,1000 );
// HalUARTWrite(0 ,pkt->cmd.Data ,14 );break;
case SAMPLEAPP_FLASH_CLUSTERID:
HalLedBlink( HAL_LED_2,2,50,500 );
HalUARTWrite(0 , pkt->cmd.Data ,14);
// flashTime = BUILD_UINT16(pkt->cmd.Data[1],pkt->cmd.Data[2] );
// HalLedBlink( HAL_LED_4,4,50,(flashTime / 4) );break;}}
4.2 软件某些功能程序实现
4.2.1串口发送查询指令
void CCMonitorList::Onon()
{UpdateData(TRUE);//读取编辑框内容
int Count=14;int j=0;
int TxData[14]={0xee,0xcc,0x01,0x01,0x01,0x00,
0x00,0x00,0x00,0x00,0x01,0x00,0x00,0xff};//要发送字符串送字符数组
CByteArray array;array.SetSize(Count);for(j=0;j<Count;j++)
array.SetAt(j,TxData[j]);//将字符数组型
AfxMessageBox("发送数据!");
m_ctrlcomm.SetOutput(COleVariant(array));//发送数据
AfxMessageBox("发送成功!");m_state="开灯";}
void CCMonitorList::Onoff()
{UpdateData(TRUE);int Count=14;//字符串长度
int j=0;int TxData[14]={0xee,0xcc,0x01,0x01,0x01,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xff};//要发送字符串送字符数组
CByteArray array;
array.SetSize(Count);
for(j=0;j<Count;j++)
array.SetAt(j,TxData[j]);//将字符数组型
AfxMessageBox("发送数据!");
m_ctrlcomm.SetOutput(COleVariant(array));//发送数据
AfxMessageBox("发送成功!");
m_state="关闭";}
4.2.2接受应答指令
void CCMonitorList::OnOnCommMscomm1()
{VARIANT variant_inp;COleSafeArray safearray_inp;
LONG len,k; CString strtemp;
BYTE rxdata[2048];//设立BYTE数组
if( m_ctrlcomm.GetCommEvent()==2) //事件值为2表达接受缓冲区内有字符
{ variant_inp=m_ctrlcomm.GetInput();//读缓冲区
safearray_inp=variant_inp;//VARIANT变量转化为COleSafeArray变量
len=safearray_inp.GetOneDimSize();//得到有效数据长度
for( k=0;k<len;k++) {
safearray_inp.GetElement(&k,rxdata+k);}
for( k=0;k<len;k++){ BYTE bt=*(char*)(rxdata+k);//字符型
strtemp.Format("%2x",bt); //将字符送入暂时变量
m_strRXData+=strtemp;} } UpdateData(FALSE);}
五、项目设计成果分析
5.1 上位机测试
图5-1 登陆界面
5.2 系统测试
5.2.1关灯测试
5.2.2 开灯测试
5.3问题及解决办法
(1)组网成功后,终端采集数据发送个协调器是乱码。
解决:通过重复测试后,发现接受数据过程无问题,在查看串口函数回调函数时发现串口没在初始化过程中打开;只有串口初始化函数,才干将发送字符串显示在上位机上。
六、参照文摘
[1]王殊,胡富平等.无线传感器网络理论及其应用.北京:北京航空航天大学出版社,.
[2]姜仲,刘丹等.ZigBee技术与实训教程.北京:清华大学出版社,.
[3] 姜仲,刘丹 ZigBee技术与实训教程.北京.清华大学出版社..
[4] 王小强,欧阳骏 无线传感网络设计与实现。北京.化学工业出版社。
[5] 基于CC2530无线传感器网络监控平台 任珍文,黄玉清
刊名:《电子技术应用》出版日期: 期号:第10期
[6] MFC Windows应用程序设计习题解答及上机实验/任哲,李益民,车进辉编著.2版,北京:清华大学出版社,. 10
[7] MFC Windows程序设计:第2版/(美)帕罗赛斯(Prosise,J.)著;北京博彦科技发展有限责任公司译.北京:清华大学出版社,.
课程设计评分表
评 定 项 目
评提成绩
1.系统硬件软件
15分
2.系统软件软件
15分
3.功能扩展和创新
10分
3.成果演示
20分
4.图纸、资料
10分
5.设计报告规范化、参照文献(不少于3篇)
10分
6.答辩
20分
总分
100分
答辩记录:
指引教师综合评语:
指引教师(签名)
日 期: 年 月 日
展开阅读全文