随着信息技术和Internet技术的发展,实现家居网络化和智能化已经成为当前研究的热点。具有用户界面、能远程控制、智能管理的电器是未来的发展趋势。在此形势下,基于ARM、PowerPC等32位微处理器的出现,使嵌入式Internet成为现实,传统PC的Web服务完全可以通过嵌入式控制器实现。正如早已为人们熟知的“把互联网带入生活中”,使用嵌入式Web技术的家居计算机网络成为目前网络发展的一个重要方向。
基于PC架构的智能家居由于实用性较差已经逐步退出了市场,目前只有一些国外厂商和极少数国内厂商选择了基于嵌入式的技术方案。而基于嵌入式系统的家庭智能系统在国内才刚刚出现,随着嵌入式技术更加广泛的应用,成本的逐步降低,智能家居最终将走向嵌入式[1]。
经过比较,嵌入式智能家居具有明显的优势,因此本文选择嵌入式系统作为智能家居的核心。由于ARM处理器具有体积小、功耗低、成本低、性能高以及Linux开源等优点,本系统选择三星公司的ARM9处理器S3C2410作为嵌入式处理器,操作系统为Linux。
1 系统整体模块设计
本系统主要在嵌入式系统上进行视频监控模块和远程电器控制模块的设计。嵌入式系统由嵌入式处理器S3C2410和Linux系统组成。视频监控模块由Web服务器、视频服务器和客户端以及实现通信的通道组成。远程电器控制模块在Web服务器上,通过CGI交互,实现对家电的控制。本系统采用模块化设计,由嵌入式系统模块、视频采集模块、视频服务器模块、视频客户端模块和远程电器控制模块组成。系统的整体框架图如图1所示。嵌入式处理器S3C2410是一款基于ARM920T内核的16/32位RISC微处理器。内部带有全性能的MMU(内存管理单元),它适用于设计移动手持设备类产品,具有性能高、功耗低、接口丰富和体积小等优良特性[2]。
2 系统的软件设计实现
2.1 图像采集模块的实现
本系统采用USB接口的PC350摄像头,该摄像头的后端采用OV511+视频芯片, 图像传感器采用新一代CMOS感光芯片,摄像头硬件压缩率超过5:1,非常适合视频监控的图像采集[3]。目前Linux内核中已经有支持OV511芯片的驱动,因此无须下载驱动程序。该驱动可以用模块化的方式加载,也可以编译进内核,本系统采用编译进内核的方法。
在内核加载了OV511摄像头驱动之后,系统就能识别并支持该摄像头,再只需编写视频采集程序就可工作。视频采集应用程序的设计通过Linux内核中的Video4Linux实现。
Video4Linux是Linux中关于视频设备的内核驱动,它为针对视频设备的应用程序编程提供了一系列接口函数。在视频采集中,应用程序首先通过open( )函数打开视频采集设备并返回一个文件描述符号,这个文件描述符就代表了捕获的设备硬件。成功开启设备档后,调用ioctl( )取的设备文件的相关信息,并且将取得的信息放到video capability结构中,同样调用ioctl( )将视频窗口信息放到video picture结构中。视频设备的关闭通过close( )函数实现。在本系统中,视频图像的获取采用mmap( )的方式共享内存来实现。此方法不必再调用read( )、write( )等操作,不仅进程可以直接读写内存,进程通信效率高,而且不需要拷贝任何数据。
2.2 远程视频监控模块的实现
视频监控模块采用“浏览器—服务器”模式,即在采集端构建嵌入式Web服务器,并在Web服务器的基础上移植视频服务器webcam,在客户端利用Java Applet 来接受视频服务器发送过来的视频信息。本模块包括嵌入式Web服务器设计和视频服务器webcam的移植实现。
2.2.1 嵌入式Web服务器设计
嵌入式Web服务器器是指将Web服务器引入到嵌入式系统中,在相应的硬件平台和软件系统的支持下,根据应用的需要实现通用的Web服务器的全部或者部分功能。嵌入式Web服务器仍然以TCP/IP协议为底层,在该Web中使用的应用层的通信协议是HTTP协议,通过HTTP协议实现客户端(一般为浏览器)和嵌入式Web服务器的信息交换[4]。
在嵌入式领域,常用的Web服务器有thttpd和boa,boa目前用的最多。boa是一个非常小巧的Web服务器,可执行代码只有约60 KB,占用系统资源少,而且速度快、安全性好[5]。目前使用的Linux2.6内核还没有包含boa代码,因此需要移植到本系统中。首先从下载boa源代码(目前最新版本boa-0.94.13),解压到Linux系统目录下,用交叉编译器编译。这样在boa-0.94.13/src目录下生成boa应用程序,把生成的boa应用程序下载到开发板上Linux系统中的/bin目录下,让boa在系统启动时自动运行,这样在开发板上就移植了boa服务器。
2.2.2 视频服务器webcam的移植实现
视频信息通过摄像头采集到的图像需要通过网络传送到另一端,并通过浏览器显示出来,这一过程通过视频服务器实现。视频服务器的工作主要是与客户端建立链接,并根据客户端用户的指令,调用相应的函数处理客户端的控制要求。视频服务器工作流程如图2所示。
webcam是一个比较常用的视频服务器程序,对本系统采用的OV511摄像头非常适用。通过网络下载webcam_server的Linux版本,它是基于GNU架构之下的,完全免费,源码开放。本设计采用webcam server―0.50.tar.gz。从http://www.neilbriscoe.co.uk/scratch/网站下载,解压到Linux目录下,修改Makefile为交叉编译环境,然后用Make命令进行编译,把生成的webcam应用程序下载到开发板上Linux系统中的/bin目录下,这样就移植了视频服务器。
2.3 智能家居远程监控的实现
远程监控是智能家居监控中的重要组成部分,只要有Internet的地方,主人就可以通过上网登录设计好的智能家居管理界面,以此来实现对家里的实时监控。例如,主人在公司上班,家里有小孩或者生病的老人,主人可以通过公司电脑远程监视关注家里的情况,如有意外,主人就可以对此及时做出反应。当主人快要下班时可以事先通过界面管理实现对家电的控制(如打开客厅电灯、让电饭锅开始煮饭等)。
2.3.1 智能家居界面的实现
本设计采用html语言来编写智能家居的管理界面,以下是智能家居管理主界面的源代码,文件名为my.html。
<html>
<head>
<title>远程监控</title>
</head>
<frameset rows=“20%,80%”>
<frame img src=“images/ltby006.jpg” marginwidth=“0”
scrolling=“no”
frameborder=“0” norsize=“norsize”>
<frameset cols=“20%,80%”>
<frame src=“left.html”scrolling=“no” name=“left_frame”
frameborder=“0”>
<frame src=“right.html” name=“right_frame”>
</frameset>
</frameset>
</html>
该代码包含left.html和right.html的相关链接,其中left.html又包含着用户信息、密码修改、远程控制、状态查询、安全布防、视频监控等相关链接。设计好相关的.html文件和CGI程序,通过U盘把.html文件和CGI程序拷贝到开发板根文件系统下的/www目录下。
2.3.2 远程电器控制模块的模拟实现
用无线通信方式进行家电的控制灵活性较强、覆盖范围较广,免去了综合布线的费用和精力,缺点是家庭内部要有家庭网关和无线路由器,接收终端还要有相应的接收装置,成本较高。因此,基于实用性和大众化方面的考虑,本文所研究的家电控制器的控制采用I/O控制。
家电的本地集中控制硬件设计是利用嵌入式系统的I/O口对家用电器的用电进行控制。系统通过S3C2410的I/O口输出高低电平来进行控制,同时用发光二极管指示家用电器工作状况。
发光二极管亮,表示家用电器通电,发光二极管灭,表示家用电器断电。GPB7控制电器1,GPB8控制电器2,GPB9控制电器3。由于被控模块家用电器大多使用220 V交流电,属于强电电路,所以使用继电器控制家电。在芯片与继电器中间加驱动电路。驱动电路可以利用光电耦合的通、断去控制继电器的开与关。也可以利用三极管的饱和与截止去控制继电器的开与关,这里采用三极管方式。当I/O口引脚输出低电平时,三极管饱和导通,+5 V电源加到继电器线圈两端,继电器吸合,同时状态指示的发光二极管也点亮,继电器的常开触点闭合,相当于开关闭合。当I/O口引脚输出高电平时,三极管截止,继电器线圈两端没有电位差,继电器衔铁释放,同时状态指示的发光二极管也熄灭,继电器的常开触点释放,相当于开关断开。注:在三极管截止的瞬间,由于线圈中的电流不能突变为零,继电器线圈两端会产生一个较高电压的感应电动势,线圈产生的感应电动势则可以通过二极管D1释放,从而保护了三极管免被击穿,也消除了感应电动势对其他电路的干扰,这就是二极管D1的保护作用。这里主要是采用模拟的方式来实现家电的远程控制,板子上的LED灯表示家电的开关状态。控制开关状态的CGI代码用shell语言实现,下面就是其中一个电器的代码:
#/bin/sh
case $QUERY_STRING in
*kai1*)
type1=1
;;
*guan1*)
type1=0
;;
esac
2.3.3 视频客户端Java Applet的实现
在本系统中,客户端接收从视频服务器发送过来的视频信息,并通过Web浏览器显示监控图像,浏览器自身不能完成这个功能,而是通过在HTML文档里嵌入Applet来实现的[6]。Applet是一种特殊的Java程序,它能够嵌入到HTML文档并被支持Java的网页浏览器下载执行。本系统客户端就是利用Java Applet完成用户与视频服务器的交互,实现视频播放。
视频监控网页用HTML语言设计。在本系统中,摄像头系统监视界面直接采用改进的webcam_server―0.50nsrcnclient。以下是经过修改后的webcam.html源代码,其中http://202.193.74.230指的是开发板的IP地址,可以根据实际需要改变源代码里面的高度和宽度,从而调整视频画面的大小。
<html>
<head>
<title>WebCam</title>
</head>
<br><br><br>
<p align=“center”><APPLET CODE =“WebCamApplet.clas”
archive=“applet.jar”WIDTH =“320”HEIGHT =“240”>
<param name=URL value=“http://202.193.74.230:8888”>
<param name=FPS value=“1”>
<param name=width value=“320”>
<param name=height value=“240”>
</APPLET>
<p align=“right”><img src=“images/sxt.jpg”/>
</body>
</html>
还要把/src/client下的Applet.jar文件拷贝到开发板根文件系统下的/www目录下。最后在电脑主机上安装一个jre1.6.0 03,目的是使浏览器支持Java,这样就完成了客户端的设计,从而实现视频在网页上显示的工作。
3 实验测试
首先,设置开发板的IP,即在超级终端下输入命令ifconfig eth0 202.193.74.230。在实验室的另一台电脑主机上运行IE浏览器,输入设置好的IP,访问板子的主监控界面。智能家居管理主界面如图3所示。
点击远程控制,出现如图4所示的家电控制界面,选择电器的状态(开或关),就可以通过网页实现电器的模拟开关。点击视频监控,将出现视频监控的界面,如图5所示(本机电脑网页上实时实现的是另一实验室的监视画面)。
通过实验测试,发现家居控制效果好,图像传输效果实时,画面质量清晰、流畅,很好地实现了家居的智能监控。
本系统的设计是在数字信息技术和网络技术发展的前提下,运用当前的嵌入式技术和ARM技术设计的智能家居监控系统,具有一定的创新性。该系统由于采用了高性能的ARM9处理器和嵌入式Linux操作系统,具有一定的可扩展性,可以通过适当的功能扩展来满足用户更高的要求。此外,本系统具有功能强、稳定性好的特点,而且成本低,对嵌入式智能家具监控系统的开发有一定的借鉴意义。
评论
查看更多