智能家居是以住宅为平台,利用通信技术、自动控制技术等新技术,将各种家电安防设施进行集成,组成住宅设施管理系统,造就一个安全便利舒适环保的家居生活环境。近年随计算机技术、通信技术和网络技术的发展,智能家居逐渐成为未来家居生活的发展方向[1]。
在智能家居的控制系统中,控制终端是其核心设备,目前主要有以下几种方案:第一种是采用键盘、LCD显示器和红外遥控器等设备对各种家用设备进行控制[2],这种方式需要对终端的软件和硬件分别进行设计,因而设计复杂且成本高。第二种是采用PC作为控制终端[3],使用这种方式的缺陷是只能在固定的位置进行控制。第三种是采用智能手机作为控制终端,通过WiFi、蓝牙、GSM等无线网络对家居系统进行控制[4],此方案使用方便、快捷。
随着Android智能终端日益普及,其作为控制终端将成为未来智能家居系统发展的趋势。本系统以Android智能设备作为遥控终端,以FPGA作为主控中心处理器,通过蓝牙与手机端进行通信并对数据进行处理,实现视频监控、红外遥控、温湿度检测、振动检测、GSM远程报警等功能。FPGA内部资源丰富,接口方便,还可实现脸部识别、指纹识别等功能。
1 系统结构
系统结构框图如图1所示,首先在Android平台下开发一个应用程序,数据通过蓝牙发送给主控中心,当FPGA接收处理完数据后通过串口给相应的功能模块发送指令,各功能模块执行相应任务后也会将数据通过主控中心返回给智能终端并显示,其中采用串口通信可让通信方式多样化[5],如485总线、蓝牙模块、WiFi模块、ZigBee模块等都可用串口进行收发数据。这种结构使得用户只需用手机、平板电脑等Android终端就能任意控制各种家用设备并实时掌握周围的环境情况,使用非常简单快捷。
2 主控中心FPGA设计
本系统采用FPGA作为中间控制部分的处理器主要基于以下两点考虑,首先整个系统中用到多个串口,普通单片机内部不超过3个串口,而FPGA可以根据需求搭建多个UART接口;其次FPGA可以采用平行以及流水线处理,可以完成视频数据采集、VGA接口输出等高速处理,还可完成脸部识别、指纹识别等复杂运算。设计中采用的FPGA芯片型号是Altera公司Cyclone II系列EP2C8Q208C8,在Quartus II平台下用Verilog语言进行开发。
2.1 UART模块的设计
由于FPGA与各功能模块均利用串口进行通信,因此需要搭建多个UART接口,对数据进行传输和处理。UART通信模块主要由波特率产生模块、发送模块和接收模块三部分组成,其中波特率产生模块是将50 MHz的主时钟经过多次分频后为UART的收发模块提供特定的波特率。
FPGA中的每个UART都被例化成一个子模块,各模块间通过输出输入接口进行数据的交互,此外还有一个控制模块,用于控制每个串口的发送和接收。
2.2 视频监控的设计
视频监控是家庭防盗系统中必不可少的部分,本系统通过OV7670摄像头获取视频信息,用FPGA进行数据的采集和存储,最后通过VGA接口用显示器显示出来。框架如图2所示。
OV7670是OmmVision公司生产的CMOS摄像头,通过SCCB总线控制,图像最高达到30帧/s。FPGA先构建一个配置模块,用SCCB总线对OV7670进行初始化设置并使其开始工作,其中的SCCB总线本质为简化了的I2C总线。
配置成功后,FPGA将接收RGB565格式的数据,即第一个字节的前5位表示红色,第一字节的后3位和第二字节前3位表示绿色,第二字节后5位表示蓝色。数据通过SDRAM控制模块存进外部SDRAM中,SDRAM的主要作用是把图像数据以30帧/s的速率进行缓存,然后再以60帧/s的速率读出。从SDRAM读出的数据将通过VGA控制模块转换为VGA协议输出,最后通过一个三路10位高速视频DAC芯片ADV7123进行D/A转换后显示在显示器上,进行实时的监控。
除了可实时监控外,当系统触发警报信息后可以对视频信息存储到外接Flash中,由于Flash的容量以及读写速度有限,不能将所有视频数据保存下来,因此采样间断性存储的方法,即以图片的形式将现场的情况保存下来,这种方式既能减少Flash的容量,又可以较好地保存现场的信息。
3 Android应用程序的开发
Android终端的应用程序是基于Android 2.3版本,在Eclipse平台下用Java语言进行开发,其主要内容包括设计一个人机交流界面、获取已配对的蓝牙设备并建立连接、利用Socket进行数据传输等。
3.1 界面设计
该应用程序主要有两个界面,开启时首先进入主控界面,主要包括温湿度的显示、防盗系统的开启与关闭、电视遥控等功能,点击电视遥控按键将进入红外遥控界面。界面通过AbsoluteLayout进行布局设计,这是一种绝对布局,可以任意调整每个控件的横坐标和纵坐标,界面上每个按键通过绑定一个地址和添加一个监听器,点击按键后会触发监听器并执行相应的操作。
3.2 蓝牙的获取和连接
应用程序中需要建立一个蓝牙通信通道,以便与FPGA端的蓝牙模块进行数据传输,在建立蓝牙通信之前先搜索出已配对的蓝牙设备并用列表显示,当点击其中一个设备进行连接时,其地址值会被记录下来并通过Intent回传给主Activity[6]。当本机蓝牙开启以及要连接设备的地址获取后就可建立Socket连接,通过Thread创建的一个线程来进行Socket连接,连接成功后界面上会显示“连接成功”。
4 功能模块的开发
4.1 无线通信设计
系统中主要运用了蓝牙、GSM这两种无线通信协议,其中蓝牙是应用在手机和主控中心之间的通信,它的传输距离达10 m左右,满足室内使用要求。而GSM用于远距离报警。
4.2 学习型红外遥控
现在大多数家庭中使用到红外遥控器多达数个,如果将控制全部集中于手机则会十分便利,但不同遥控器的红外编码是不一致的,因此本系统设计的是学习型红外遥控,它以STM8S105S4单片机作为主控芯片,包括了红外发射和接收两部分电路,能够学习并存储各种红外编码,工作流程如图3所示。
4.3 温度检测
温度检测采用NTC(热敏电阻),它是随温度上升电阻呈指数关系减小、具有负温度系数的材料,因此只要采样出的电阻值然后与其温度阻值变化列表进行对应便可得出当前的温度值。设计中用单片机内部的10位A/D转换器采样其电压值,再根据分压电阻求出NTC的阻值,最后通过取表得出温度值。
4.4 湿度检测
湿度检测采用HS1100湿度传感器,它是一种基于电容原理的湿度传感器,相对湿度的变化和电容值呈线性规律。在实际测试中,电容值随着空气湿度的变化而变化,因此将电容值的变化转换成电压或频率的变化,才能进行有效地数据采集。设计中用NE555组成振荡电路,HS1100湿度传感器充当振荡电容,从而完成湿度到频率的转换。
4.5 振动检测
振动检测采用MMA7631三轴小量程加速度传感器,它根据物体运动和方向改变输出信号的电压值。各轴的信号在不运动或不被重力作用的状态下,其输出为1.65 V。采用STM8S105S4单片机内部的10位A/D转换器采样3个方向的电压,根据采样结果的变化来判断门窗是否振动,当变化范围超过一定的限值时,则判断门窗被开启,触发报警信息。
本文设计并实现了一个基于Android智能终端及FPGA的智能家居系统,在3个平台下完成开发,分别是用Java语言在Android系统下进行应用程序开发,用Verilog语言对主控FPGA进行设计以及基于STM8单片机的功能模块设计。以FPGA作为主控中心,相比于AMR11、STM32等串行处理器,它可实现视频监控、人脸识别等高速复杂处理,而且无须后台服务器,减低了成本。系统以Android设备作为遥控终端,与传统控制方案比,它可以实现程序化控制,可存贮各种个性化的控制方案。本系统使用方便、操作简单,能满足普通家庭的需求,具有较高的实用性和推广价值。
参考文献
[1] 陈致远,朱叶承,周卓泉.一种基于STM32的智能家居控制系统[J].电子技术应用,2012,38(9):138-140.
[2] 满莎,杨恢先,彭友,等.基于ARM9的嵌入式无线智能家居网关设计[J].计算机应用,2010,30(9):2541-2544.
[3] 陈乔云,贾金玲.基于智能手机与PC机的智能家居系统设计[J].电子设计工程,2009,17(9):25-29.
[4] 王朝华,陈德艳,黄国宏,等.基于Android的智能家居系统的研究与实现[J].计算机技术与发展,2012,22(6):225-228.
[5] DEBONO CJ, KURT ABELA. Implementation of a Home Automation System through a Central FPGA Controller[C]. 2012 16th IEEE Mediterranean Electrotechnical Conference (MELECON). Piscataway, N.J: IEEE press,2012:641-644.
[6] PAYET ETIENNE,SPOTO FAUSTO. Static analysis of Android programs[J]. Information and Software Technology, 2012, 54(11):1192-1201.