引言
现代家居越来越追求高效、便捷、智能理念,不仅仅表现在物理层面上的生存空间,更表现为追求安全、舒适、方便、智能的生活环境。这使得智能家居系统成为一种强烈的需求。人们越来越重视智能家居系统,家居智能化是大势所趋。在这种趋势下,本文给出了一种基于ZigBee、智能识别及GPRS技术的嵌入式智能家居系统方案[1]。
1 系统方案
本文设计完成的智能家居管理系统为了完成既定的人脸智能识别门禁系统、室内各种环境参数的检测、GPRS短信通知及局域网异地控制等功能,在家庭组网技术中采用具有近距离、高安全性、低复杂度、低功耗及低成本优点的ZigBee技术[2]。在远程网络控制技术中采用成本低、可靠性高、性能优良的GPRS技术。利用这两种技术,完全可以对智能家居进行近程及远程控制,提高了智能家居管理系统的实用性。
本文完成的智能识别家居控制系统是以嵌入式技术及ZigBee技术为基础,综合Internet网络通信技术、GPRS无线通信建立起来的智能家居系统。系统框图如图1所示。
图1 系统框图
2 系统设计
2.1 家庭控制子网组建
2.1.1 家居节点
在智能家居系统中,家居主节点作为协调器,处于ZigBee网络的最上层,完成保证家居设备节点之间数据信息传输及节点控制等功能,完成的功能相对复杂,这里采用全能型设备。
ZigBee模块作为家居设备节点,在各设备节点之间组成网络,来完成检测各种室内环境参数,进行信号的接收及发送,以及对数据进行处理等功能。用于家居设备节点的ZigBee模块分别完成温度湿度检测、烟雾浓度检测、门磁模拟、红外对射检测等功能。根据这些功能,可以把各个ZigBee模块设计为温度湿度检测设备节点、烟雾浓度检测节点及报警信号采集节点等家居设备节点。
家居节点拓扑结构如图2所示。
图2 家居节点拓扑结构图
2.1.2 子网通信协议
家居设备节点和家居主节点之间必须制定统一的通信协议,用以识别设备之间发送的数据所包含的信息。家居主节点对家居设备节点的操作主要有查看设备节点的状态及对设备节点进行功能性的操作等。本次智能识别家居控制系统使用的ZigBee子网通信协议使用的是ZigBee模块中默认的子网通信协议。
2.2 家庭网关
2.2.1 家庭网关的结构和功能
家庭控制网络需要家庭网关[3]来与外界进行信息交换,同时对家中设备进行远程控制及管理。家庭控制网络必须通过家庭网关才能与外界网络进行连接,才能实现远程控制。家庭网关应具备协议转换及提供远程控制接口的功能。
家庭网关在本智能识别家居控制系统中充当网络接口单元的作用,既可以与家庭内部子网的设备进行直接通信,还能与外部Internet进行直接连接。
2.2.2 家庭网关软件
家庭网关软件系统设计主要分为用户界面和程序模块两部分。
用户界面设计主要体现在智能家居主控界面的设计。智能家居主控界面使用Qt来进行开发制作。Qt既可以开发GUI程序,也可以开发非GUI程序。良好的封装机制、signals/slots安全类型、丰富的应用程序编程接口等优势,使得用户开发变得非常方便快捷。
程序模块主要完成对整个系统所用功能的模块划分及实现,并为用户界面提供接口支持。这样的划模块设计使得整个系统具有更强的扩展性和更清晰的结构。本智能识别家居控制系统所涉及的程序模块的编写,是由Qt在进行智能家居主控界面设计时自动生成程序模块主函数。
2.3 人脸识别模块设计
在本智能识别家居控制系统中,智能识别主要体现在采用先进的人脸识别机制的门禁安防系统。设计中,使用OpenCV来实现人脸识别的功能。
2.3.1 OpenCV项目配置及文件说明
(1) 相关项目及UI配置
对Qt进行相关的项目配置,指定相关库文件目录,利用Qt软件来制作基于OpenCV的智能门禁系统的UI界面。在UI人机交互界面上添加人脸显示区域、显示系统中存入人脸图像的区域及对系统中的存储的人脸信息进行相关操作的按键,如加入、删除、上移、下移等,完成UI界面的制作。
(2) 核心代码编写
本文设计的智能识别人脸门禁系统中的人脸识别功能是以人脸信息为基础来完成的[4]。编码过程中最核心的部分为添加及删除授权人的人脸信息的相关代码的编写。
添加人脸按键及删除人脸按键事件的代码如下:
void MainWidget::on_pushButton_Up_clicked(){
QListWidgetItem *item= listWidget->currentItem();
if(item){
int id=item->text().toInt();
if(id==1) return;
QFile::rename(QString("data/%1.pgm").arg(id),QString("data/tmp.pgm"));
QFile::rename(QString("data/%1.pgm").arg(id-1),QString("data/%1.pgm").arg(id));
QFile::rename(QString("data/tmp.pgm"),QString("data/%1.pgm").arg(id-1));
fresh();
}
}
void MainWidget::on_pushButton_Down_clicked(){
QListWidgetItem *item= listWidget->currentItem();
if(item){
int id=item->text().toInt();
if(id==faceNum) return;
QFile::rename(QString("data/%1.pgm").arg(id),QString("data/tmp.pgm"));
QFile::rename(QString("data/%1.pgm").arg(id+1),QString("data/%1.pgm").arg(id));
QFile::rename(QString("data/tmp.pgm"),QString("data/%1.pgm").arg(id+1));
fresh();
}
}
2.3.2 OpenCV在ARM上的移植
在ARM上移植OpenCV需要执行以下步骤[5]。OpenCV的移植环境为PC机系统Ubuntu10.10。交叉编译工具为armlinuxgcc 4.5.1。对OpenCV压缩包进行解压,转到OpenCV目录,进行相关配置,然后对其进行编译安装。将相关库文件移植到嵌入式芯片中,测试移植是否成功。
OpenCV在开发板上移植成功后即可完成利用摄像头进行人脸识别的功能。实现了本智能识别家居系统的智能识别功能。
2.4 GPRS模块设计
GPRS[6]在智能家居安防系统中在如下情况下将会向用户发送短消息:如果家里有安全隐患时,需通过GPRS网络向用户发送短信,以便用户及时处理。本文根据相关ARM体系结构进行编程[7]。
GPRS模块的主要软件编程如下:
void gprs_msg(char *number, int num){
printf("*******************gprs_msg start write sensor:%d*****************\\n",num);
tty_writecmd(gprs_fd, "AT", strlen("AT"));
tty_writecmd(gprs_fd, "AT+CMGF=1", strlen("AT+CMGF=1"));//发送修改字符集命令
tty_write(gprs_fd, "AT+CMGS=", strlen("AT+CMGS="));//发送发短信命令
tty_write(gprs_fd, "\\"", strlen("\\""));
tty_write(gprs_fd, number, 11);
tty_write(gprs_fd, "\\"", strlen("\\""));
tty_write(gprs_fd, ";\\r", strlen(";\\r"));
sensor=num;
}
void gprs_baud(char *baud,int num){
tty_write(gprs_fd, "AT+IPR=", strlen("AT+IPR="));
tty_writecmd(gprs_fd, baud, strlen(baud) );
usleep(200000);
}
3 调试结果
经过一系列软硬件设计及软件调试,基于S3C6440嵌入式芯片及外部模块电路的智能识别家居控制系统设计完成,并较好地实现了既定的目标。具体的调试结果如下。
外部模块各ZigBee节点信息如图3所示;智能家居主控界面如图4示。
图3 ZigBee节点信息
图4 智能家居主控界面
人脸识别通过时,智能家居相关功能激活,如图5所示;人脸识别未通过时,智能家居的相关功能未激活,如图6所示。
图5 智能家居功能激活界面
图6 智能家居功能未激活界面
局域网异地控制客户端如图7所示。
图7 局域网异地客户端界面
结语
论文以ZigBee技术为基础,综合Intemet网络通信技术、GPRS无线通信,设计实现了一套功能相对完整的智能识别家居控制系统。论文主要完成了总体方案设计、软件开发及系统测试,实现了人脸智能识别门禁系统、室内各种环境参数的检测、GPRS短信通知及局域网异地控制等功能。经过现场测试,设计达到了预期要求。