文獻標識碼: 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文件的<livedata>節點中,以方便運行在客戶端的JavaScript讀取實時的溫濕度數據。另外,溫濕度采集程序還要檢測溫濕度是否異常。若溫濕度超過預設范圍,則調用sendemail函數向用戶發送郵件。溫濕度采集程序的流程圖如圖4所示。
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.