基于ZigBee的磁场系统.docx
《基于ZigBee的磁场系统.docx》由会员分享,可在线阅读,更多相关《基于ZigBee的磁场系统.docx(19页珍藏版)》请在冰豆网上搜索。
基于ZigBee的磁场系统
计算机科学与技术学院
《zigbee无线网络原理》课程设计报告
设计题目:
基于zigbee磁场检测系统的设计
设计人员:
学号:
学号:
学号:
学号:
学号:
指导教师:
年月
目录
摘要I
AbstractII
1设计目的1
2设计内容2
2.1磁场检测系统的工作原理2
2.2设计方案2
3实验器材2
4实验电路图3
5相关模块的性能参数6
6软件程序功能实现模块6
6.1应用层代码6
6.2显屏程序8
7实物展示14
8小组分工15
9设计总结15
10实验小组成员评分16
参考文献17
摘要
随着社会的发展,无线网络发展的越来越快,作为无线网络中的zigbee也是大受关注。
本课题研究的是基于ZigBee技术,设计和实现了一种无线传输检测磁场新的解决方案。
设计以电脑控制端、ZigBee技术、霍尔传感器模块等硬件模块组成的检测系统。
实现当有磁场靠近传感器时指示灯亮并且上位机有提示的功能。
使得磁场检测变得方便简洁。
关键字:
ZigBee;干簧管传感器;磁场检测
Abstract
WiththeriseoftheInternetofthings,ZigBeetechnologywithitsuniqueadvantageistoprovideuswithmorehighqualityconvenienttechnologicalachievements.
ThistopicresearchisbasedonZigBeetechnology,designedandimplementedanewwirelesstransmissiontestmagneticfieldsolution.Designwithcomputercontrolend,ZigBeetechnology,hallsensormoduleofhardwaremoduletestingsystem.Implementationwhenthereisamagneticfieldsensorneartheindicatorandtheuppermachinehasthefunctionofthetip.Makethemagneticfielddetectionbecomesconvenientandconcise.
[keywords]ZigBeeMisensorMagneticfielddetection
1设计目的
本次设计要求实现一个PC端可以接收到下位机传来的数据并判断周围是否有强烈磁场的功能。
PC端控制软件可以用VB语言,对VB串口控件要熟悉的掌握。
同时要求学生对CC2530芯片编程和zigbee协议栈有相当程度的理解以及熟练的应用,熟悉ZigBee串口以及中断的使用,会基本的C语言熟练掌握IARFOR8051软件的使用与程序下载以及手机软件开发环境。
2设计内容
2.1磁场检测系统的工作原理
我们运用干簧管传感器采集到的信号传输给系统处理核心单片机CC2530。
当出现磁场时时,磁场会使干簧管传感器中密封于一装填有高纯度的惰性气体玻璃管中的端点处分隔的距离仅约几个微米两片簧片端点位置附近产生不同的极性,结果两片不同极性的簧片将互相吸引并闭合,电路由高电平变成低电平。
2.2设计方案
(1)了解干簧管传感器工作原理,根据原理画好PCB原理图。
(2)根据PCB原理图自制PCB板电路,将液晶屏,干簧管,CC2530单片机等相关元件设备进行集成。
(3)测试PCB电路,检查相关电路能否正常工作,以及核心板的能否正常调试。
(4)在完成电路调试后,用jlink下载器下载调试程序成功完成程序对相关元件的驱动。
(5)实验完成后做好相应的实验总结。
3实验器材
此处用CC2530芯片用作接收信息和控制芯片,实现无线遥控,单跳控制距离可以达到100米以上,L298N驱动模块(驱动电机)
(1)干簧管传感器
(2)磁铁
(3)电脑和ZigBee核心板和JLINK下载模块及其相关的驱动
(4)杜邦线若干,电池若干(最好是可以充电的)
4实验电路图
图3.1干簧管传感器接口电路
图3.2终端电路图
图3.3协调器电路图
图3.4终端PCB图
图3.5协调器PCB图
5相关模块的性能参数
干簧管传感器性能参数
1、采用进口常开型干簧管
2、比较器输出,信号干净,波形好,驱动能力强,超过15mA。
3、工作电压3.3V-5V
4、输出形式:
数字开关量输出(0和1)
5、设有固定螺栓孔,方便安装
6、小板PCB尺寸:
3.2cmx1.4cm
7、使用宽电压LM393比较器
8、干簧管需要和磁铁配合使用,在感应到有一定的磁力的时候,会呈导通状态,模块输出低电平,无磁力时,呈断开状态,输出高电平,干簧管与磁铁的感应距离在1.5cm之内,超出不灵敏或会无触发现象。
9、模块DO输出端可以与单片机I/O口直接相连,通过单片机可以检测干簧管的触发状态。
10.模块DO输出端与继电器IN端相连,组成大功率干簧管开关,直接控制高电压。
6软件程序功能实现模块
6.1应用层代码
//定义IO
#defineLEDP1_5//LED提醒
#definesenorP0_6//传感器检测口
/******干簧管传感器电路初始化******/
P0SEL&=~0X40;//设置P0.6为普通IO口
P0DIR&=~0X40;//在P0.6口,设置为输入模式
P0INP&=~0x40;//打开P0.6上拉电阻
//传感器的判断:
if(events&SAMPLEAPP_SEND_PERIODIC_MSG_EVT)
{//周期性发送函数
if(senor==1)//正常
SampleApp_SendPeriodicMessage1();//正常,无磁场
else
if(senor==0)//有磁力
SampleApp_SendPeriodicMessage2();//有磁场!
21
//接收数据函数
voidSampleApp_MessageMSGCB(afIncomingMSGPacket_t*pkt)//接收一个信息包
{
uint16flashTime;
switch(pkt->clusterId)//簇id
{
caseSAMPLEAPP_CHENYUJIAO_ID:
//默认接收接收ID为自定义广播传输编号
HalUARTWrite(0,&pkt->cmd.Data[0],5);//打印串口收到数据
HalUARTWrite(0,"\n",1);//回车换行
break;
caseSAMPLEAPP_FLASH_CLUSTERID:
flashTime=BUILD_UINT16(pkt->cmd.Data[1],pkt->cmd.Data[2]);
HalLedBlink(HAL_LED_4,4,50,(flashTime/4));//小灯闪烁
break;
}
}
//发送数据函数:
voidSampleApp_SendPeriodicMessage1(void)//正常,无磁场
{
uint8L[5];
L[0]='1';
L[1]='1';
L[2]='';
L[3]='1';
L[4]='2';
if(AF_DataRequest(&SampleApp_Periodic_DstAddr,&SampleApp_epDesc,
SAMPLEAPP_CHENYUJIAO_ID,
5,
L,
&SampleApp_TransID,
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS)==afStatus_SUCCESS)
{
}
else
{
//Erroroccurredinrequesttosend.
}
}
voidSampleApp_SendPeriodicMessage2(void)//有磁场!
21
{
uint8L[5];
L[0]='1';
L[1]='1';
L[2]='';
L[3]='2';
L[4]='1';
//LED=1;
if(AF_DataRequest(&SampleApp_Periodic_DstAddr,&SampleApp_epDesc,
SAMPLEAPP_CHENYUJIAO_ID,
5,
L,
&SampleApp_TransID,
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS)==afStatus_SUCCESS)
{
}
else
{
//Erroroccurredinrequesttosend.
}
}
6.2显屏程序
#include"5110LCD.h"
voiddelay_ms(intt)
{
inti,j;
for(i=t;i>0;i--)
for(j=110;j>0;j--);
}
//------------GPIO口设置----------------------------
voidGPIO_Configuration_LCD(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//改变指定管脚的映射GPIO_Remap_SWJ_JTAGDisable,JTAG-DP禁用+SW-DP使能
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOD,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_14|GPIO_Pin_15|GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
//-----------配置各端口的高低电平------------//
}
//----------------------------------英文字符库-------------------------------------
//6x8font
//1pixelspaceatleftandbottom
//位置=(ASCII-32)*6
//----------------------------------------------------------------------------------
//*******************************************************************
//英文字符大小
//*******************************************************************
#defineWIDTH6
#defineHEIGHT8
//*******************************************************************
//中文字符大小
//*******************************************************************
#defineWIDTH_CN13
#defineHEIGHT_CN16
unsignedcharlcd_display[]="0123456789";
//*******************************************************************
//写一字节
//*******************************************************************
voidLCD_WriteByte(unsignedchardt,unsignedcharcommand)
{
unsignedchari;
sce0;//使能LCD
if(command==0)//传送命令
dc0;
else
dc1;//传送数据
for(i=0;i<8;i++)
{
if(dt&0x80)
sdin1;
else
sdin0;
dt=dt<<1;
sclk0;
sclk1;
}
dc1;
sce1;//关闭LCD
sdin1;
}
//*******************************************************************
//LCD初始化
//*******************************************************************
voidLCD_Init(void)
{
sce1;
res0;//产生一个让LCD复位的低电平脉冲
delay_ms(10);
res1;
delay_ms(100);
LCD_WriteByte(0x21,0);//使用水平寻址,进入拓展指令
LCD_WriteByte(0x13,0);//定液晶偏置系统1:
48
LCD_WriteByte(0xbb,0);//设定设置Vop,相当于亮度
LCD_WriteByte(0x20,0);//芯片活动使用基本指令并且水平寻址
LCD_WriteByte(0x0c,0);//设定显示模式,正常显示
LCD_Clear();
}
//---------------------------------------
//名称:
设置坐标函数
//参数:
X:
0-83Y:
0-5
//作者:
huoenlai
//-----------------------------------------
voidLCD_Set_XY(unsignedcharX,unsignedcharY)
{
Y|=0x40;
X|=0x80;
LCD_WriteByte(Y,0);//列
LCD_WriteByte(X,0);//行
sce1;
}
//*******************************************************************
//LCD清屏
//*******************************************************************
voidLCD_Clear(void)
{
unsignedchart,k;
LCD_Set_XY(0,0);
for(t=0;t<6;t++)
{
for(k=0;k<84;k++)
{
LCD_WriteByte(0x00,1);
}
}
}
//*******************************************************************
//写一个字符
//*******************************************************************
voidLCD_WriteChar(unsignedcharX,unsignedcharY,unsignedcharc)
{
unsignedchari,j;
constunsignedchar*map=&font[0][0];
c-=32;//变换
map+=c*(HEIGHT/8*WIDTH);
for(i=0;i{
LCD_Set_XY(X,Y+i);
for(j=0;jLCD_WriteByte(*map++,1);
}
}
//*******************************************************************//写英文字符串
//*******************************************************************
voidLCD_WriteString_en(unsignedcharX,unsignedcharY,unsignedchar*s)
{
unsignedchari=0,j=0;
while(*s)
{
LCD_WriteChar(X,Y,*s++);
X+=WIDTH;
i++;
if(i>=(84/WIDTH))
{
X=0;
Y+=HEIGHT;
i=0;
j++;
}
if(j>=(48/HEIGHT))
{
return;
}
}
}
//*******************************************************************
//写一个任意数字
//*******************************************************************
voidLCD_WriteNumber(unsignedcharx,unsignedchary,unsignedlongnumber)
{
unsignedcharnum[10]={""},i,j,k;
if(number==0)//number0时候
{
LCD_WriteChar(x,y,'0');
}
else
{
for(i=0;number>0;i++)
{
num[i]=lcd_display[number%10];//每位以字符表示
number/=10;
}
for(j=0;j
LCD_WriteString_en(x,y,num);
}
}
//*******************************************************************
//写一个汉字
//*******************************************************************
voidLCD_Write_cn(unsignedcharrow,unsignedcharpage,unsignedcharc)//row:
列page:
页dd:
字符
{
unsignedchari;
LCD_Set_XY(row,page);//列,页
for(i=0;i<12;i++)
{
LCD_WriteByte(chinese1[c*24+i],1);
}
LCD_Set_XY(row,page+1);//列,页
for(i=12;i<24;i++)
{
LCD_WriteByte(chinese1[c*24+i],1);
}
}
7实物展示
8小组分工
负责分配任务,编写程序,督促组员认真完成各自的任务
负责画PCD图
制作电路板,根据原理图焊接实物元器件
上位机控制端的美工
查找相关资料文献,总结完成实践报告
9设计总结
经过这一段时间的课程实践,我们收获颇多。
在老师的帮助与指点下,我们从对ZigBee几乎一无所知到画底板原理图、PCB图,制板焊接等,到写程序、下载程序、调试程序的过程中,我们遇到了很多困难,但最后都在自己的努力和同学的帮助下顺利完成了课程实践。
我们不仅学会了有些实用的东西,就像画电路图、制板、焊接、用j-link下载程序等各种技巧与方式,还明白了团结的力量是巨大的,收获了友谊。
分工合作让我们的工作变得更简单,同时也大大提高了工作效率。
不管我们做出来的东西是好是坏,最起码我们从中学到了知识、技巧,我们学到的才是属于我们的。
这次课程实践是给们留下了深刻的印象,感谢老师和同学在实践过程中给予的帮助,我们受益匪浅!
10实验小组成员评分
《嵌入式综合实践》成绩单
学号
姓名
成绩
签名
指导老师签名:
年月日
参考文献
[1]无线龙,zigbee无线网络原理[M],北京:
冶金工业出版社.
[2]YuChengbo.LiuYanfei.WangChengResearchonZigBeewirelessworkbasedonModbusprotocol20092.
[3]许洪华.刘科基于Modbus协议的ZigBee工业以太网网关设计[期刊论文]-微计算机信息2009.
[4]刘桂臣.阳宪惠Modbus报文有线/无线混合传输的实现2008.
[5]涂煊.彭瑜.周怡颋Modbus通信协议的紫蜂无线传输网络的研究[期刊论文]-自动化仪表2007.
[6]Zig,BeeAllianceZigBee-specification2005.
[7]WilligA.M