张 如,董喜慧
(福州职业技术学院 计算机系,福建 福州 350108)
随着科技的迅猛发展和人们生活水平的提高,人类已经进入了网络化、数字化的智能社会阶段,人们对于保护自身财产与人身安全也有了新的要求.随着人们生活节奏的不断加快,迫切需要一种远程智能安防系统,能让出门在外的业主及时了解和处理物业中的突发安防事件,全面实现远程监控,为自己的物业提供最全面的保护.针对现代安防的实际要求,本研究结合了功能强大的ARM处理器、GPRS无线通信技术、无线组网的ZigBee技术,设计了一套基于无线传输的嵌入式智能安防系统.
本系统拥有全面的防盗功能,能实现门、窗、阳台等进出门户的监控报警;实现火灾与有毒气体泄漏的检测;实现重要地点或重要物品的监控保护,具有摄像头抓拍功能;实现对某些特殊人员的人身安全的保护;实现积水报警;在出现火灾时能对一些危险电器的电源实现远程关闭;实现安全状况的远程实时查询与报警.
本系统主要由两部分组成:控制传输部分与内网采集部分.内网采集部分主要由安防监控模块、ZigBee终端节点、ZigBee协调器组成;控制传输部分主要由ARM主处理器平台、GPRS无线通信模块、USB监控摄像头等部分组成.系统结构图如图1所示.安防监控模块由不同功能的传感器处理模块及电源开关继电器控制模块组成,它们各自连接一个ZigBee无线收发模块.这些ZigBee终端节点会在ZigBee协调器开启后陆续加入到协调器建立的ZigBee网络中,并由协调器赋予各节点以网络地址.这些节点通过ZigBee无线自组网与ARM主处理器平台进行无线通信连接,ARM就可通过地址来判断是何节点传来的信号.ARM主处理器平台同时连接USB监控摄像头,当发生安全隐患时会对物业相关部位进行实时抓拍.ARM主处理器平台可通过相连的GPRS模块与业主手机进行远程连接,实现安防系统的远程监控.当物业出现安防问题时,ARM向业主发送短信并进行报警,控制摄像头进行抓拍,并将图像数据转成彩信经由GPRS网络发送给业主手机.当然,出现安全隐患时,业主也可通过手机发送控制短信来控制物业中电源设备的继电器开关.
图1 系统结构图
本系统硬件主要由ARM主处理器平台,USB红外摄像头,GPRS模块,ZigBee无线收发模块(协调器与终端节点)、安防监控模块(各个传感器模块,以及继电器控制模块组成).
ARM主处理器平台主要由ARM11主处理器、FLASH、SDRAM、电源复位模块、LCD触摸屏及相关外围电路组成.本系统选用SAMSUNG公司的基于ARM1176JZF-S 内核的16/32位RISC微处理器的S3C6410作为主处理器.S3C6410采用了64/32位内部总线架构,为2.5G和3G通信服务提供优化的H/W性能,具有4通道UART,为与ZigBee模块和GPRS模块通信提供了方便,支持修剪过的嵌入式操作系统,具有低功率、高性价比、高性能的优点[1].
GPRS—General Packet Radio Service,是通用分组无线业务的简称,由欧洲电信协会GSM系统中有关分组数据所规定的标准[2].GPRS基于GSM网,提供端到端的、广域的无线IP连接.GPRS以封包(Packet)式来传输,计费只以流量计算,提高了资源利用率,而且始终在线[2].在嵌入式系统的应用开发中使用GPRS无线数据传输技术是较优选择.GPRS 模块的功能是通过GPRS网络实现ARM主处理器平台与业主手机间的数据传输.经选择,本系统选用SIMCom的SIM900模块.SIM900属于四频850/900/1800/1900MHz的GSM/GPRS模块,完全采用SMT封装形式,支持数据、语音、短消息和传真等多种通信方式,内置TCP/IP协议,具有MMS(彩信)功能.GPRS模块与ARM主处理器平台采用AT指令集通过串口进行数据通信.
ZigBee无线收发模块使用基于IEEE802.15.4协议的TI公司的CC2530芯片.系统采用一个ZigBee协调器节点与多个ZigBee终端节点组成的星形网络结构.系统通过Z-Stack协议栈实现整个网络的启动自组,在网络中协调器节点是整个网络的管理者,它负责启动整个网络,将终端节点加入到网络中,并为它们配置网络地址.协调器节点与各终端节点间通过无线通信方式进行数据传输,而协调器与S3C6410间采用串口通信.终端节点将信息传输给协调器后,再由协调器传到S3C6410,S3C6410会对接收到的信息进行解析,通过网络地址判断是哪个终端节点发送来的信息.
根据安防要求,系统要实现防火、防有毒气体泄漏、防盗、防水淹等功能.根据不同的检测内容设置不同的传感器.为了提高检测的准确度,本系统采用多种传感器结合的方法进行某一种项目的检测.
火灾中会有烟雾与温度的上升,因而由MQ2烟雾传感器和数字型温湿度传感器SHT10组成检测元件,两者均检测到信号时才确认有火灾发生,这样精确度较高.
有毒气体泄漏检测采用MQ5气体传感器,它对煤气、天然气、液化气有较好灵敏度,抗乙醇、烟雾的干扰.
防盗方面的检测主要根据不同环境来设置对应的传感器.比如在窗户处的防盗采用两种传感器进行双保险感应.在窗户外围布置主动式红外对射传感器,主动式红外对射传感器可采用多束红外线射束构成多束的密集防卫,可设定规定的若干射束被侵入者阻断多少时间后产生报警输出,它构成对窗、阳台等出入口的封闭式防范,御贼于户外但又不妨碍业主在室内的活动.对于盗贼可能通过砸玻璃进入室内的安全隐患,采用声控——震动型双技术玻璃破碎传感器,只有同时探测到玻璃破碎时发出的高频声和敲玻璃时的震动才输出报警信号,此类传感器监测整个房间,与窗户多少无关.当业主在外时,对于入户门的安防工作,采用振动传感器结合门磁传感器对门进行安防感应.同时还可在室内安装红外感应器感应人员闯入,此感应器是靠探测人体发射的10um左右的红外线进行感应报警的.
对于要求积水报警的场所,将点式水浸传感器的探头面平行安装于被检测的区域处,使水浸传感器平行于地面.此传感器是应用电极浸水阻值变化的原理来进行水浸检测的,其探针有防电蚀设计.
Linux 操作系统具有完整的TCP/IP协议,有易于裁减移植、内核小、源代码开放等优点,为本系统的开发提供了技术支持.本系统软件设计主要是基于ARM-Linux操作系统,ARM-Linux是裁剪了的Linux 操作系统,基于ARM体系,易于移植[3-4].
建立本ARM系统的开发环境就是将ARM-Linux移植到ARM主处理器平台,并搭建移植QT/Embedded环境.首先建立交叉编译环境,然后引导Bootloader实现系统的快速引导,将Linux内核载到内存并进行内核初始化(系统采用的交叉编译器为arm-linux-gcc-4.5.1,Linux内核版本为Linux-2.6.36,Bootloader采用U-boot.),移植操作系统,装载文件系统[3-4].然后完成QT/E环境的搭建,将QT/E移植到ARM11上,开发图形界面,进行应用程序的编写[5].
系统主程序根据系统具体功能由多个功能子程序组成.子程序主要包括GPRS无线通信程序、图像采集程序、ZigBee通信程序、各智能安防模块程序、QT /E用户界面等.系统主程序流程图如图2所示.
图2 系统主程序流程图
系统启动时首先对S3C6410进行初始化,通过按键值来判断运行状态,当被定义为设防状态时,分别建立ZigBee模块和GPRS模块的操作线程.首先S3C6410通过串口向ZigBee协调器发送查询指令,由ZigBee协调器通过ZigBee无线网络转发给各终端节点,查询ZigBee各终端节点的信息.终端节点将当前的采集数据通过ZigBee无线网络经由协调器返回给S3C6410.S3C6410收到ZigBee信息后,对数据进行判析,若是普通信息,则在界面上实时显示;若发生异常安防问题时,系统判断是何种事件,则界面图标闪烁,启动对应的报警安防措施,并发送GPRS短信、GPRS彩信通知业主.若S3C6410收到GPRS短信,解析短信是否是控制短信,如果是则向ZigBee协调器发送控制命令,经由ZigBee无线网络转发给对应终端节点,最终实现对终端节点的远程控制.
GPRS 模块程序设计主要结合函数调用AT指令实现串口初始化、GPRS模块的初始化、网络参数配置、短信收发和发送彩信等操作.
(1) GPRS模块的初始化与模块的短信收发.系统启动时,通过调用Equipinit_sp()、Equipinit _gprs()等函数实现基本的初始化配置工作.S3C6410通过串口发送AT指令到GPRS模块并读取GPRS 模块的回馈.S3C6410通过调用int sendgprs(int fd,char*s_buffer)函数发送AT命令到GPRS 模块,并通过int readgprs (int fd,char*r_buffer)函数读取GPRS模块的数据.
系统通过AT指令实现短信接收与发送.当出现突发情况时,系统只要调用对应的AT指令即可完成短信的收发.当系统要向业主手机发送短信时,首先会向GPRS模块发送“AT”命令,设备串口通讯正常会回馈“OK”后,再发送命令“AT+CSCA=SIM卡归属地短信中心号码”及“AT+CMGF= 1(1表示为文本格式)”,均回馈“OK”后,再向GPRS模块发送命令“AT+CMGS=业主手机号”,GPRS模块将返回“>”,这时就可将要指定格式的短信内容输入,发送成功后将返回“OK”,而业主手机上就能收到对应的短信.
对于接收短信的情况,先使用AT+CNMI=2,1设置接收短信的模式后,当GPRS模块接收到业主手机发来的信息时,短信会存储在SIM卡中,并通知串口有新消息:+CMTI:“SM”,6.系统得到提示后会向GPRS模块发送读短信命令“AT+CMGR =6”,GPRS模块就返回指定格式的数据+CMGR: "REC UNREAD"," 手机号","","14/01/27,15:30:21+32"closepower1!.可以通过返回的数据得出短消息内容.然后ARM将根据收到的指令要求控制节点完成指定任务.
(2)彩信的发送.彩信的作用是当物业内发生突发情况时,启动摄像头进行抓拍,并将截图以彩信形式发送到用户手机.
当保存好的抓图图片需要通过GPRS模块发送出去时,系统同样调用对应的AT指令进行发送.发送AT+CMMSEDIT=1 、AT+CMMSDOWN="PIC",12836,40000 、AT+CMMSRECP="手机号"等指令,通知SIM900创建一条彩信及设置好彩信接收手机号并通知SIM900准备传输大小为12836字节的图片.最后通过AT+CMMSSEND这条指令通知GPRS模块可以发送这条彩信了.
Video for Linux Two(V4L2)是Linux为图像视频采集设备驱动程序的编写提供的统一接口,本系统的USB摄像头的图像采集是基于V4L2实现的.摄像头的文件名为/dev/video0,在程序中对文件video0进行读操作就是对摄像头的操作.系统通过ioctl给驱动发送命令、设置不同的参数,来实现采集过程.当ARM收到报警信息后,调用capture函数对USB摄像头驱动并捕抓图像.
(1)在capture函数中先调用int fd=open(“/dev/video0,O_RDWR|O_NONBLOCK,0)函数打开摄像头,通过返回的文件描述符fd对摄像头进行操作.
(2)通过 ioctl (int fd, VIDIOC_QUERYCAP, &cap) 查询摄像头属性、配置和驱动功能;通过fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV; ioctl(fd, VIDIOC_S_FMT, &fmt)等设置捕获格式.
(3)捕捉摄像头数据,在V42L接口中设定应用程序与摄像头驱动之间提取数据的交互方式为mmap映射方式.这种方式是驱动将内部数据空间映射到应用程序空间上,两者直接在这个空间上交换数据.通过ioctl(fd, VIDIOC_REQBUFS, &req)为捕获的视频申请了req. count个缓存;通过buffers = calloc (req.count, sizeof (*buffers))在内存中建立对应空间;通过int ioctl(fd, VIDIOC_QUERYBUF, &buf) 获取这些缓存的地址;用buffers[n_buffers].start = mmap(NULL, buf.length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, buf.m.offset)将设备缓存和应用程序分配内存发生映射.
(4)ioctl(fd, VIDIOC_QBUF, &buf)将这段所映射缓存加入队列,然后通过ioctl (fd, VIDIOC_STREAMON, &type)开始捕捉图像数据,并进入循环.在循环中通过select函数判断摄像头是否可读,如可读则执行read_frame()函数读取一帧数据.完成采集处理后,解除映射释放内存源,关闭设备文件.
ZigBee通信程序设计基于ZStack2006 协议栈,由协调器和各终端节点两大模块设计组成.协调器负责ZigBee网络的建立维护,启动后的协调器初始化并按设好的参数构建ZigBee网络,终端节点继而申请入网,协调器分配网络地址给终端节点,ZigBee网络组建成功.ZigBee组网成功后,协调器进入ZigBee协议栈事件处理循环中,轮询所有触发事件后调用任务处理函数,无任务则休眠.触发事件包括节点加入、查询采集数据、向控制节点传递控制指令.ZigBee终端节点初始化后搜索网,申请入网成功后得到网络地址.终端采集节点定时调用采集程序进行采集,并将信息发送给协调器,并由协调器发给ARM;控制节点在接到协调器转来的控制命令后,调用对应控制程序对设备进行控制.
智能安防模块程序的功能是完成数据采集或设备控制,其软件开发必须根据各终端实际实现的功能进行设计,这里不再详述.
当开启设防后,依次对每个智能安防模块进行测试.比如火灾测试中,当MQ2烟雾传感器感应到烟雾时,系统界面提示有烟雾,仅根据预设的应急处理程序自动做出对应处理,但并未触动火灾报警,这时将温度传感器加温到较高温度时,系统的火灾报警被启动,过一会儿在远处的业主手机收到“Fire Alarm”;当物业出现水漫情况时,业主手机得到“Water Alarm”后,业主为了保证家里电器安全要及时切断部分电器的电源时,可以向系统发短信“closepower1”,系统将指定电器连接的电源断电;当人接近红外感应器时,入侵警报启动,摄像头进行抓图,远处的业主手机得到报警短信并得到摄像截图彩信;其他智能安防模块均一一进行测试,都按系统要求完成报警操作.
本文设计了一种基于GPRS与ARM技术的智能安防系统,该系统应用ZigBee自组网技术组建了无线传感网络,实现了各安防终端模块与ARM嵌入式网关的无线通信;利用GPRS技术实现了手机远程监控安防系统.经测试,该系统能及时将安防系统的报警信息通过GPRS网络传输到业主手机,实现了业主对安防系统的远程实时监测,并能根据实际需要进行远程控制.测试结果表明,该系统报警及时,误报率低,扩展方便,操作性强,具有较广阔的市场空间.
参考文献:
[1]杜春雷.ARM体系结构与编程[M].北京:清华大学出版社,2003:1-80.
[2]文志成.GPRS网络技术[M].北京:电子工业出版社,2005:30-100.
[3]周立功.ARM嵌入式linux系统构建与驱动开发范例[M].北京:北京航空航天大学出版社,2006:110-218.
[4]韦东山.嵌入式Linux应用开发完全手册[M].北京:人民邮电出版社,2008:37-124.
[5]方双莲,李小力.基于ARM单片机的温度控制系统的设计与实现[J].无线互联科技,2014(5):66.