文献标识码:A
文章编号: 0258-7998(2014)05-0143-04
现代工业的飞速发展和人类的不合理活动对环境造成了严重的破坏,使得全球生态环境恶化愈演愈烈。恶劣的环境容易引起人体的发病、动植物的死亡等不良后果,环境异常还会引起火灾或其他灾害。而环境监测则可以提供环境的状况信息,保证生活和生产的正常进行。环境监测技术已广泛地用于军事、工农业、通信等多个领域。
目前,环境监测尚存在一些不足。传统的环境监测以人工采样和实验室分析为主,操作比较繁琐;监测系统监测领域较窄,不能对环境进行全面的评估;设备功能单一,不能满足人们较高的环境监测需求。
本文从实际出发,设计了一种基于嵌入式技术的远程无线环境监测系统。该系统基于ARM11和嵌入式Linux,并与USB摄像头、温湿度传感器模块相结合,具有较为丰富的功能。使用该系统能够实现对监测区域的实时视频监控和温湿度数据监测,具有成本低、支持多台客户机同时访问、系统维护方便等特点。系统采用B/S模式结构[1-2]设计,用户只需要通过浏览器即可访问监测区域的环境情况,比传统的实地观察更加方便,具有较好的应用前景。
1 系统总体设计
系统以开源的Linux为操作系统平台,采用B/S模式结构,以S3C6410[3]控制器为嵌入式服务器。系统将从USB摄像头采集到的视频图像进行压缩,然后基于TCP/IP协议[4]将压缩后的视频图像发送到客户端。同时,系统间隔性地采集温湿度数据, 并将数据保存在SQLite数据库[5]表中,以供用户查询。客户机通过浏览器中的网页即可接收从Web服务器发送过来的监测区域的环境数据。当监测区域的环境情况发生异常时,客户端就会发出报警声,同时系统会向用户的邮箱发送邮件[6]。系统的总体实现方案如图1所示。
本系统主要有监测前端和监测终端两部分。监测前端主要由S3C6410处理器、USB摄像头和温湿度传感器组成;监测终端主要是PC、手机等。当有用户请求时,客户端网页浏览器主动与服务器建立网络连接。客户机与Web服务器之间利用Ajax技术[7]进行异步通信,保证了安全可靠的Web应用交互。用户信息、每个用户的登陆信息和温湿度信息都保存在SQLite数据库表中。当有用户登陆时,后台的CGI验证程序就会查询存有用户信息的数据库表,如果验证成功就会返回登陆的主控页面,否则返回带错误提示的登陆页面。
2 系统硬件设计
本系统的硬件总体结构图如图2所示。
主控平台选用友善之臂的Tiny6410开发平台,主要包括S3C6410控制器、2 GB Nand Flash、256 MB SDRAM和外围接口。在Nand Flash中保存有U-Boot、Linux内核、UBIFS文件系统、驱动程序、与Web服务相关的程序以及其他应用程序。主控平台的功能主要是控制采集视频图像、对采集的视频图像进行压缩、网络传输视频图像、控制采集和保存温湿度数据、为客户机提供Web服务。
USB摄像头选用罗技的C270摄像头,其主要功能是完成视频监控图像的采集,为S3C6410提供原始视频图像。温湿度传感器选用含有己校准数字信号输出的DHT21[8],其功能为采集温湿度数据。
3 系统软件设计
从功能上来说,整个系统需要完成温湿度传感器和摄像头的驱动,温湿度数据的采集、存储和传输,视频图像的采集与传输。
如图3所示,整个系统的软件分为底层和应用层。底层主要包括U-Boot、Linux内核、UBIFS文件系统和驱动程序;应用层则包括视频图像采集和发送程序、温湿度采集程序、Web服务器、后台CGI程序以及Web服务器上的网页相关脚本程序。应用程序通过驱动程序提供的接口来调用内核空间的数据。
在底层,需要完成温湿度传感器驱动;在应用层,需要调用温湿度传感器驱动来完成温湿度采集,利用摄像头驱动完成视频图像的采集,并通过TCP/IP协议将采集到的视频图像和温湿度数据发送到客户端。此外,还要完成对用户输入的用户名和密码的验证和温湿度报警功能。
3.1 温湿度采集程序设计
温湿度传感器驱动模块加载成功后,编写温湿度采集程序时就可以利用驱动程序中提供的接口把“/dev/dht21”作为一个文件来访问。除了要从DHT21获取温湿度数据之外,温湿度采集程序还要将温湿度数据保存到SQLite数据库表/home/boa/www/temandhum.db中,同时还要将当前采集到的温湿度数据写入到/home/boa/www/xml/temandhum.xml文件的
3.2 视频图像采集程序设计
使用V4L2标准进行视频采集的流程如图5所示。
(1)打开视频设备。将USB摄像头插到Tiny6410开发板的USB接口上后,就会在/dev目录下看到多出一个“video0”的设备文件,只需要使用fd = open("/dev/video0", O_RDWR, 0);语句来打开该设备文件,即可像访问文件一样来访问该设备。open函数中的“O_RDWR”表示阻塞模式,它也可以换成“O_RDWR | O_NONBLOCK”,表示非阻塞模式。以非阻塞模式打开视频设备时,不管设备打开成功与否,驱动都会把缓存中的数据返回给应用程序。
(2)获取视频设备的参数信息。成功打开视频设备后,可以使用语句ioctl(fd, VIDIOC_QUERYCAP, &capability)来获取视频设备的参数信息,设备参数信息就保存在结构体capability中的各成员变量中。
(3)初始化视频设备配置。例如设置视频捕获格式主要是通过设置v4l2_format数据结构中的成员变量来实现。一般设置的图像大小为640×480或320×240两种。
(4)采集视频图像。获取采集到的视频图像的方式有两种:(1)使用read( )函数直接读取设备; (2)使用mmap( )函数共享内存。
在Linux操作系统中,内存空间被分为用户空间和内核空间。进程不能直接读写内核空间,通过read( )函数来读取设备比较慢,但安全度较高;通过使用mmap方式后能将同一文件映射到进程的虚拟地址空间,从而达到直接读取该内存空间的目的,读取速度很快,但相应地安全度较低。此处采用mmap的方式来采集视频。使用“framebuf[1].length = buf.length;”设置framebuf的大小,然后使用“framebuf[1].start=(char *) mmap(0, buf.length,PROT_READ|PROT_WRITE,MAP_SHARED, fd,buf.m.offset);”进行内存映射,这样就可以用“ret = ioctl(fd , VIDIOC_QBUF, &buf);”获取视频图像。判断视频图像是否采集完毕需要使用“ioctl(fd,VIDIOCSYNC, &buf);”。
(5)关闭视频设备。使用“close(fd);”实现。
3.3 视频图像传输程序设计
本视频图像传输程序主要通过线程组来实现,涉及的线程主要有:cap_video、send_video和client_connect。cap_video 负责采集视频图像;client_connect线程用来等待客户端的连接请求,当有新的用户连接请求时,它就会采用GET方法获取用户的请求信息,然后再判断是否建立连接,若请求信息有效则给该用户开通一个新的连接用来发送连续的视频流,client_connect线程还要负责将无效的socket连接断开,以保证系统的高效运行;send_video则是服务于已连接好的用户,主要用来将公共缓冲区中的视频图像通过socket发送出去,send_video线程每发送一帧图像后就会将公共缓冲区清空并进行上锁,直到公共缓冲区被写入的数据大于或等于所设阈值时才执行下一次发送任务。线程之间通过pthread_cond_
wait、pthread_mutex_lock、pthread_mutex_unlock等函数来防止竞争。视频图像传输程序流程如图6所示。
3.4 温湿度实时曲线描绘程序设计
本程序能够将温湿度数据通过JavaScript代码描绘成曲线图,用户能够直观地感受到温湿度数据实时的变化。本程序使用开源的jqPlot库进行图像描绘。
jqPlot绘图功能主要通过调用$.jqplot函数对所绘制的图像进行初始化设置来实现。jqPlot的配置格式为:
$.jqplot('target', data, options);
其中target表示在HTML中的位置;data为显示的数据;options为与图像显示相关的配置。
本文中用到的主要options的对象有title和axes。axesDefaults中的配置参数与axes中的一样,axesDefaults中的参数是默认配置,而axes中的参数是非默认配置。
4 系统调试
通过串口线和网线,将开发板与PC连接好,然后启动开发板。打开浏览器后,在PC浏览器的地址栏中输入开发板上所设Web服务器的IP地址即可看到登陆页面,输入用户名和密码,验证成功后即可进入远程监测的主控页面,默认加载页面为视频监控页面。用户还可以通过点击主控页面中左边树形菜单中的“温湿度监测”加载温湿度的实时曲线。
本文设计了一种基于S3C6410嵌入式技术、B/S网络模式的远程无线环境监测系统,经过测试,该系统运行稳定,能够进行实时的温湿度数据监测和视频监控。该系统具有支持多路同时访问、系统负荷能力强、界面友好等特点,在环保行业、制造行业、交通行业的环境监测方面具有一定的推广应用价值。
参考文献
[1] He Hujun, Yan Yumei,Li Wanling, et al. Design and implementation of mine-map management information system based on B/S model[J].Applied Mechanics and Materials,2012,241-244(12):2616-2619.
[2] 张国军, 郑丽媛, 张俊.基于物联网的瓦斯监控系统[J]. 传感器与微系统,2013,32(1):125-127,130.
[3] 陈建明,沈东方.基于S3C6410的智能泵组控制器设计[J].电子技术应用,2012,38(12):14-16.
[4] 杨娇娟.浅谈TCP/IP协议[J].数字技术与应用,2012(3):220.
[5] 韩善锋,曹凤海,易昌华. SQLite数据库在嵌入式程序开发中的应用[J].物探装备, 2011,21(3):170-173,178.
[6] 毛云贵.支持SMTP认证的E-MAIL发送程序的设计[J].南京工程学院学报(自然科学版),2006,4(1):66-72.
[7] 吕弘, 黄伟纳. 基于AJAX技术的图书馆统计平台的设计[J].中国科技信息,2012(1):75-76.
[8] 胡敏,施云波,修德斌,等.氯气检测报警器的设计[J].仪表技术与传感器,2010(12):66-67,70.