文档库 最新最全的文档下载
当前位置:文档库 › 基于ARM9和ZigBee的嵌入式无线家庭安防系统的设计

基于ARM9和ZigBee的嵌入式无线家庭安防系统的设计

第30卷第5期 辽宁工业大学学报(自然科学版) V ol.30, No.5

2010年10月 Journal of Liaoning University of Technology(Natural Science Edition) Oct.

2010

收稿日期:2010-08-25

作者简介:胡 玮(1983-),男,河北南皮人,硕士生。

孙福明(1972-),男,辽宁大连人,副教授,博士。

基于ARM9和ZigBee 的嵌入式 无线家庭安防系统的设计

胡 玮,孙福明

(辽宁工业大学 电子与信息工程学院,辽宁 锦州 121001)

摘 要:介绍了基于嵌入式Linux 系统的ARM9平台和ZigBee 技术的家庭安防系统。ZigBee 模块组成无线网络与ARM9控制器相连,ARM9控制器驱动摄像头捕捉图片并将图片通过SIM300模块发送彩信通知给用户。

关键词:ZigBee ;ARM9;嵌入式Linux ;Video4linux2

中图分类号:TP316 文献标识码:B 文章编号:1674-3261(2010)05-0288-04

Design of Embedded Wireless Home Security System

Based on ARM9 and ZigBee

HU Wei, SUN Fu-ming

(Electron & Information Engineering College, Liaoning University of Technology, Jinzhou 121001, China )

Key words: ZigBee; ARM9; embedded Linux; video4linux2

Abstract: The design of house monitor system was introduced which is ARM9 platform based on the embedded linux and ZigBee technology. ZigBee modules consist of building network, which connects with ARM9 controller, ARM9 controller catches the picture by camera and transmits the picture to householders by SIM300 module which sends multimedia message to users.

传统的家庭安防系统不仅布线繁琐,影响室内的美观,而且容易误报,图像要么存储在本地计算机硬盘之中,等待主人回来后查验,要么由主人通过远程计算机进行实时监控,浪费了人力。为了改进上述安防系统的缺点,设计了一款基于ARM9和ZigBee 的无线家庭安防系统。由于采取ZigBee 技术,系统功耗低,节省了布线,采用Liunx 操作系统的ARM9开发板能够及时抓取图像并通过彩信传递给主人,提高了实时性及准确性。

1 系统组成

1.1 系统硬件组成

系统由控制传输系统、网络采集系统组成。其中控制传输系统包括ARM9开发板、彩信模块和

USB 摄像头,网络采集系统由ZigBee 节点、ZigBee 协调器和热红外传感器组成,系统结构如图1所示。ARM9开发板采用主频为400 MHz 的三星公司生产的S3C2440微处理器;热红外传感器模块使用的芯片型号为BISS0001. 采用两个ZigBee 无线收发模块,模块采用的芯片是TI 公司成产的CC2430. CC2430芯片具有低功耗的特性,它采用0.18 μm CMOS 工艺生产,工作时的电流损耗为27 mA ;在接收和发射模式下,电流损耗分别低于27 mA 或25 mA ;休眠模式时仅0.9 μA 的电流损耗,外部的中断能唤醒系统。CC2430的休眠模式,特别适合那些要求电池寿命非常长的应用。采用了一个USB 摄像头,其芯片是中星微ZC301P. 还有一个SIMCOM 公司生产的SIM300-MMS 彩信模块,内

第5期 胡玮等:基于ARM9和ZigBee的嵌入式无线家庭安防系统的设计289

部封装好了MMS协议,可以直接发送彩信。

1.2工作原理

两个CC2430模块分别作为协调器和终端节点并组成无线网络。当有人进入房间时,触发网络采集系统内的热红外感应模块,产生3.3 V的高电平传给与之相连的ZigBee终端节点。该节点通过ZigBee协议栈将报警信息传输给ZigBee协调器。协调器通过串口0与ARM9相连接,告知ARM9开发板有突发事件,驱动USB摄像头抓拍现场图像并压缩储存。ARM9开发板通过串口1连接彩信模块将图片以彩信的方式发送给主人。系统组成如图1所示。

图1 系统组成

2 网络采集系统软件设计

2.1 ZigBee技术

网络采集系统采用ZigBee技术,它基于IEEE 802.15.4标准,是一个支持低功耗、低数据传输率的无线网络标准。ZigBee技术特点:ZigBee数据传输速率低,协议简单,成本低;网络可容纳65 000个设备;低功耗;使用免费的2.4 GHz频段等。

使用Z-Stack协议栈进行组网,Z-Stack协议栈中定义了三种设备:协调器、路由器、终端节点。协调器是整个网络的核心,它的主要功能是启动网络。协调器的地址是0000H,其他设备的网络地址由协调器分配。终端节点主要功能是采集数据并向上一级发送。采用的Z-Stack协议栈是一个轮转查询式操作系统。当各层初始化之后,系统进入低功耗模式,当事件发生时,唤醒系统,开始进入中断处理事件,结束后继续进入低功耗模式。Z-Stack 协议栈完成了从MAC层到设备应用层的事件处理函数,只需用户编写应用层的任务和处理函数即可,无需改动Z-Stack协议栈核心代码。

2.2协调器程序设计

当协调器中ZB_ENTRY_EVENT事件触发时,调用zb_StartRequest函数,ZDApp_NetworkInit函数会触发ZDO_NETWORK_INIT事件,在处理函数中调用ZDO_StartDevice函数,自动启动网络,这由Z-Stack协议栈完成[1]。协调器如果收到节点数据后就会调用任务事件处理函数SAPI_ ProcessEvent(),在此函数中使用UartTX_Send_ String(char *Data, 8)向串口发送数据,Data数组中存放着待发送字符串“breaking”,通过在for循环中执行U0DBUF = *Data++,将字符串通过串口发送出去。ARM9开发板如果检测到串口收到此字符串,就会驱动摄像头进行图片捕捉。

2.3终端节点程序设计

节点设备上电后扫描指定的信道,调用NLME_NetworkDiscoveryRequest()发现网络后,调用NLME_OrphanJoinRequest()加入网络。CC2430节点没有中断产生时要进入睡眠状态,所以要设置PCON和 SLEEP这两个相关寄存器进入睡眠状态。设置寄存器IEN0和IEN1,将总中断和P0口中断打开。设置P0IFG和PICTL寄存器清空P0口的中断标志位并设置上升沿产生中断。在中断处理函数中,判断寄存器P0IFG如果为1,表明P0_1有中断产生,节点就会由睡眠状态唤醒,然后发送信号给ZigBee协调器,最后清空P0口中断。

3 控制传输系统软件设计

3.1移植Linux系统

因为要在ARM9开发板上运行Linux系统,这就需要将Linux系统移植到开发板上。首先搭建交叉编译环境,宿主机采用的操作系统是redhat9,使用的交叉编译器为arm-linux-gcc-4.3.2,目标机为ARM9开发板。

3.1.1制作Bootloader

Bootloader就是在操作系统内核运行之前的一段程序,可以初试化硬件设备、建立内存空间的映射图,并为最终调用操作系统内核准备好正确的环境。本设计采用的Bootloader为u-boot,从网上下载u-boot源代码,在虚拟机上以smdk2410为参考开发板,修改Makefile等配置得到适合mini2440开发板使用的u-boot.执行make mini2440_config和make命令交叉编译u-boot,生成u-boot.bin,通过jtag接口下载到开发板的nor flash中。

3.1.2制作linux内核

从网上下载得到的liunx内核版本为2.6.29,在虚拟机上压缩得到源代码,使用make clean 命令清理内核文件。使用开发板自带的mini2440.config作为配置文件对内核进行配置,执行make menuconfig 对内核进行剪裁工作,除掉对设计无关的选项,同时把万能摄像头驱动和主程序编译进内核。然后执行make uImage得到内核文件uImage.

290 辽宁工业大学学报(自然科学版) 第30卷

3.1.3 制作根文件系统

在虚拟机中建立目录fs ,在其中创建bin,dev,sbin,usr,sys,mnt,tmp,proc,lib 等文件夹,以及usr 和lib 下的子目录。使用mknod 命令创建null 和console 这两个设备文件。使用如下三条命令编译内核模块并装入根文件系统: make modules;

make modules_install;

ARCH=arm INSTALL_MOD_PATH=/fs;

最后将busybox 安装到根文件系统之中,这样就做好了根文件系统。可以通过ramdisk 启动根文件系统,即使用系统内存的一部分作为根文件系统。将ramdisk 进行压缩得到ramdisk.gz ,得到可以下载的根文件系统。然后当开发板从u-boot 启动后通过tftp 命令将内核和根文件系统下载到开发板中。至此,整个系统移植完成。 3.1.4 Linux 主程序

Linux

主程序流程如图2所示。

图2 linux 主程序流程

首先使用open 函数打开串口0和串口1对应的设备文件ttySAC0和ttySAC1,返回文件描述符fd 和fd1。然后对串口0和1初始化,通过cfsetispeed 和cfsetospeed 函数把ARM9开发板的输入和输出串口波特率设为115200. 运行在ARM9开发板的Linux 系统采用轮询法,在while 循环中通过read(fd, rbuff, 8)和strncmp(rbuff, “breaking”, 8)函数判断有没有数据接收。当ARM9开发板收到ZigBee 协调器通过串口发过来的数据后就会调用capture 函数驱动USB 摄像头捕捉图像,然后通过SIM300彩信模块将图片传送出去。最后调用close 函数关闭串口0和1,完成整个流程。 3.2 图像采集程序设计

图像采集程序采用Video4linux2(简称V4L2),这是Linux 关于视频设备的内核驱动。摄像头的设备文件名为dev 下的video0. 因为Linux 内核2.6.29

内部包含了GSPCA ,它是一个万能USB 摄像头驱动程序,只需在配置内核时选上ZC301选项,摄像头驱动就可以编译到内核中去了。基于V4L2编写的摄像头图像采集程序其流程如图3所示,步骤如下:

(1)打开设备

在capture 函数中首先使用open (“/dev/video0”, O_RDWR | O_NONBLOCK)函数打开usb 摄像头设备,返回的设备文件描述符是videofd. 通过videofd 对摄像头进行操作。

(2)初始化设备

ioctl(videofd, VIDIOC_QUERYCAP, &cap);

fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;

首先使用 VIDIOC_QUERYCAP 命令来获得当前设备的各个属性,查看设备对各项功能的支持程度,v4l2驱动都必须支持VIDIOC_QUERYCAP. 视频图像采集格式设为YUYV 格式。

(3)内存映射

memory mapped 方式可以把设备文件直接映射到内存中,文件中的位置直接就有对应的内存地址,方便对其进行读写操作。

ioctl(videofd, VIDIOC_REQBUFS, &req); buffers=calloc (req.count, sizeof (*buffers));

buffers[i].start=mmap(NULL,buf.length,PROT_REA D|PROT_WRITE,MAP_SHARED,videofd,buf.m.off set);

上述程序中Memory mapped buffers 是通过 VIDIOC_REQBUFS 在device memory 中申请的。count 是要申请的buffer 的数量。在for 循环中依次对缓存进行映射,用mmap 函数将在设备缓存和应用程序所分配内存间建立映射,并返回应用程序内存的首地址,至此内存映射初始化完毕。

(4)图像采集

xioctl (videofd, VIDIOC_QBUF, &buf);

ioctl (videofd, VIDIOC_STREAMON, &type);

刚映射过的所有缓存开始都处于等待输入队列状态。对于应用程序来说,首先是要通过VIDIOC_QBUF 将所有映射过的缓存加入队列,然后通过VIDIOC_STREAMON 开始捕获,并进入循环中。

int r = select (videofd + 1, &fds, NULL, NULL, &tv); xioctl (videofd, VIDIOC_DQBUF, &buf); [3]

在主循环中,可以使用select 函数来监听文件描述符的状态,一旦有数据可读,就调用函数来读

第5期 胡玮等:基于ARM9和ZigBee的嵌入式无线家庭安防系统的设计291 取数据。在read_frame函数中,读取一帧,调用xioctl

函数,缓存被塞满数据以后会自动变为输出队列,

然后调用process_image函数处理这一帧。

(5)图像处理

sprintf(filename, "pic%d.jpg", c++);

fp=fopen(filename,"w");

fwrite(p, 320, 160, fp);

在处理函数中,将一帧图片写入到pic0.jpg之

中,p是该缓存的首地址,保存的图像大小为8448

字节。保存的图片存在Linux的当前目录下。

(6)关闭设备

free (buffers);

munmap(buffers, buffers.length);

close (videofd);

最后关闭设备文件,解除内存映射,释放掉分

配的内存资源,完成整个图像采集过程。采集到的

图片从ARM9开发板传到PC上如图4

所示。

图3 图像采集流程

图4 采集到的图片

3.3图片传输程序设计

保存为pic0.jpg的图片需要通过串口1传到彩信模块发送出去。对于SIM300-MMS彩信模块,可以使用AT指令进行彩信的发送:

(1)编辑彩信

printf("AT+CMMSEDIT=1\t");

printf("AT+CMMSRECP=\"151********\"\t"); printf("AT+CMMSDOWN=\"PIC\",8448,70000\t");

通过串口1发送AT指令通知SIM300-MMS创建一条彩信并设置接收人的手机号码接受彩信。最后通知SIM300-MMS准备上传大小为8448字节的图片。

(2)打开图片

int img_fd = open("/home/pic0.jpg",O_RDWR);

int nread=read(img_fd,buff,8448);

打开保存的图片得到文件描述符img_fd,可以通过它对图片文件进行操作。将图片保存在buff中,准备通过串口写入彩信模块。

(3)上传图片

void*img_addr=mmap(NULL,8448,PROT_READ,M AP_PRIV ATE,img_fd,0);

for(i = 0; i <16; i++){

delay(200);

memcpy(buff,img_addr+num,528);

int nwrite=write(fd1,buff,528);

num+=528;}

将图片进行内存映射后通过for循环将图片数据分成16块通过串口中发送给彩信模块。

(4)发送彩信

通过“AT+CMMSSEND”这条AT命令通知彩信模块可以发送这条彩信。手机接收到彩信如图5

所示。

图5 手机收到的彩信图片

4 测试与总结

经测试,由于受到GPRS网络环境的影响,整个系统从红外触发到用户手机接收到彩信图片大概在7~16 s之间,适合于家庭安防的需要。

本文介绍了一种基于ARM9和ZigBee技术相结合的家庭安防系统的设计。通过ZigBee技术组网,不仅功耗低而且省去布线的烦恼;采用S3C2440处理器能够快速反应捕捉图像并通过彩信发送出去。此系统在目前家庭安防有很好的应用价值,随着3G 技术的发展,可以把彩信模块换成3G模块以达到监控动态画面的效果,这是未来家庭安防系统的趋势。 (下转第295页)

第5期 孙德辉等:基于PSK 调制的扩频通信研究 295

10

10

10

10

10

图4 不同实验次数M 序列和Gold 序列扩频误码率曲线

3 展 望

由于直接序列扩频通信具有抗干扰、抗噪声、

抗多径衰落、可低功率谱密度下工作、保密性强、

可多址复用和任意选址、高精度测量等许多优点,

不但广泛用于民用通信领域,而且在军事通信中也

逐渐发挥了巨大的作用。在传输距离较长,传输能

量受限并且SNR 较低的情况下,使用扩频技术仍然

能够取得较低的误码率。因此,随着通信技术的迅 速发展,扩频通信以其难以比拟的灵活性、移动性、可扩展性。扩频通信将具有很好的发展前景。

参考文献: [1] 赵令艳, 王梅, 李娟. 基于SystemView 的DSSS 通信仿真与分析[J]. 电脑开发与应用, 2009, 22(4): 28-30. [2] 朱永松, 张海勇. 直接序列扩频通信抗干扰性能分析[J].现代防御技术, 2005, 33(4): 50-53. 责任编校:孙 林 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (上接第291页)

参考文献:

[1] 高守玮, 吴灿阳. ZigBee 技术实践教程[M]. 北京: 北京

航空航天大学出版社, 2009.

[2] 陈亮, 裴海龙, 伍越. 基于Video4Linux2的图像采集程

序设计[J]. 数采与监测: 微计算机信息, 2009, 25(3): 65-67.

[3] V4L2 API Specification [DB/OL]. [2010-04-10].

http://v4l2spec. https://www.wendangku.net/doc/0913897569.html,/spec/book1.htm.

责任编校:孙 林

不同实验次数Gold序列扩频误码率曲线

信噪比

误码率

相关文档