文獻標識碼: A
文章編號: 0258-7998(2014)05-0143-04
現(xiàn)代工業(yè)的飛速發(fā)展和人類的不合理活動對環(huán)境造成了嚴重的破壞,使得全球生態(tài)環(huán)境惡化愈演愈烈。惡劣的環(huán)境容易引起人體的發(fā)病、動植物的死亡等不良后果,環(huán)境異常還會引起火災或其他災害。而環(huán)境監(jiān)測則可以提供環(huán)境的狀況信息,保證生活和生產(chǎn)的正常進行。環(huán)境監(jiān)測技術(shù)已廣泛地用于軍事、工農(nóng)業(yè)、通信等多個領(lǐng)域。
目前,環(huán)境監(jiān)測尚存在一些不足。傳統(tǒng)的環(huán)境監(jiān)測以人工采樣和實驗室分析為主,操作比較繁瑣;監(jiān)測系統(tǒng)監(jiān)測領(lǐng)域較窄,不能對環(huán)境進行全面的評估;設備功能單一,不能滿足人們較高的環(huán)境監(jiān)測需求。
本文從實際出發(fā),設計了一種基于嵌入式技術(shù)的遠程無線環(huán)境監(jiān)測系統(tǒng)。該系統(tǒng)基于ARM11和嵌入式Linux,并與USB攝像頭、溫濕度傳感器模塊相結(jié)合,具有較為豐富的功能。使用該系統(tǒng)能夠?qū)崿F(xiàn)對監(jiān)測區(qū)域的實時視頻監(jiān)控和溫濕度數(shù)據(jù)監(jiān)測,具有成本低、支持多臺客戶機同時訪問、系統(tǒng)維護方便等特點。系統(tǒng)采用B/S模式結(jié)構(gòu)[1-2]設計,用戶只需要通過瀏覽器即可訪問監(jiān)測區(qū)域的環(huán)境情況,比傳統(tǒng)的實地觀察更加方便,具有較好的應用前景。
1 系統(tǒng)總體設計
系統(tǒng)以開源的Linux為操作系統(tǒng)平臺,采用B/S模式結(jié)構(gòu),以S3C6410[3]控制器為嵌入式服務器。系統(tǒng)將從USB攝像頭采集到的視頻圖像進行壓縮,然后基于TCP/IP協(xié)議[4]將壓縮后的視頻圖像發(fā)送到客戶端。同時,系統(tǒng)間隔性地采集溫濕度數(shù)據(jù), 并將數(shù)據(jù)保存在SQLite數(shù)據(jù)庫[5]表中,以供用戶查詢。客戶機通過瀏覽器中的網(wǎng)頁即可接收從Web服務器發(fā)送過來的監(jiān)測區(qū)域的環(huán)境數(shù)據(jù)。當監(jiān)測區(qū)域的環(huán)境情況發(fā)生異常時,客戶端就會發(fā)出報警聲,同時系統(tǒng)會向用戶的郵箱發(fā)送郵件[6]。系統(tǒng)的總體實現(xiàn)方案如圖1所示。
本系統(tǒng)主要有監(jiān)測前端和監(jiān)測終端兩部分。監(jiān)測前端主要由S3C6410處理器、USB攝像頭和溫濕度傳感器組成;監(jiān)測終端主要是PC、手機等。當有用戶請求時,客戶端網(wǎng)頁瀏覽器主動與服務器建立網(wǎng)絡連接。客戶機與Web服務器之間利用Ajax技術(shù)[7]進行異步通信,保證了安全可靠的Web應用交互。用戶信息、每個用戶的登陸信息和溫濕度信息都保存在SQLite數(shù)據(jù)庫表中。當有用戶登陸時,后臺的CGI驗證程序就會查詢存有用戶信息的數(shù)據(jù)庫表,如果驗證成功就會返回登陸的主控頁面,否則返回帶錯誤提示的登陸頁面。
2 系統(tǒng)硬件設計
本系統(tǒng)的硬件總體結(jié)構(gòu)圖如圖2所示。
主控平臺選用友善之臂的Tiny6410開發(fā)平臺,主要包括S3C6410控制器、2 GB Nand Flash、256 MB SDRAM和外圍接口。在Nand Flash中保存有U-Boot、Linux內(nèi)核、UBIFS文件系統(tǒng)、驅(qū)動程序、與Web服務相關(guān)的程序以及其他應用程序。主控平臺的功能主要是控制采集視頻圖像、對采集的視頻圖像進行壓縮、網(wǎng)絡傳輸視頻圖像、控制采集和保存溫濕度數(shù)據(jù)、為客戶機提供Web服務。
USB攝像頭選用羅技的C270攝像頭,其主要功能是完成視頻監(jiān)控圖像的采集,為S3C6410提供原始視頻圖像。溫濕度傳感器選用含有己校準數(shù)字信號輸出的DHT21[8],其功能為采集溫濕度數(shù)據(jù)。
3 系統(tǒng)軟件設計
從功能上來說,整個系統(tǒng)需要完成溫濕度傳感器和攝像頭的驅(qū)動,溫濕度數(shù)據(jù)的采集、存儲和傳輸,視頻圖像的采集與傳輸。
如圖3所示,整個系統(tǒng)的軟件分為底層和應用層。底層主要包括U-Boot、Linux內(nèi)核、UBIFS文件系統(tǒng)和驅(qū)動程序;應用層則包括視頻圖像采集和發(fā)送程序、溫濕度采集程序、Web服務器、后臺CGI程序以及Web服務器上的網(wǎng)頁相關(guān)腳本程序。應用程序通過驅(qū)動程序提供的接口來調(diào)用內(nèi)核空間的數(shù)據(jù)。
在底層,需要完成溫濕度傳感器驅(qū)動;在應用層,需要調(diào)用溫濕度傳感器驅(qū)動來完成溫濕度采集,利用攝像頭驅(qū)動完成視頻圖像的采集,并通過TCP/IP協(xié)議將采集到的視頻圖像和溫濕度數(shù)據(jù)發(fā)送到客戶端。此外,還要完成對用戶輸入的用戶名和密碼的驗證和溫濕度報警功能。
3.1 溫濕度采集程序設計
溫濕度傳感器驅(qū)動模塊加載成功后,編寫溫濕度采集程序時就可以利用驅(qū)動程序中提供的接口把“/dev/dht21”作為一個文件來訪問。除了要從DHT21獲取溫濕度數(shù)據(jù)之外,溫濕度采集程序還要將溫濕度數(shù)據(jù)保存到SQLite數(shù)據(jù)庫表/home/boa/www/temandhum.db中,同時還要將當前采集到的溫濕度數(shù)據(jù)寫入到/home/boa/www/xml/temandhum.xml文件的<livedata>節(jié)點中,以方便運行在客戶端的JavaScript讀取實時的溫濕度數(shù)據(jù)。另外,溫濕度采集程序還要檢測溫濕度是否異常。若溫濕度超過預設范圍,則調(diào)用sendemail函數(shù)向用戶發(fā)送郵件。溫濕度采集程序的流程圖如圖4所示。
3.2 視頻圖像采集程序設計
使用V4L2標準進行視頻采集的流程如圖5所示。
(1)打開視頻設備。將USB攝像頭插到Tiny6410開發(fā)板的USB接口上后,就會在/dev目錄下看到多出一個“video0”的設備文件,只需要使用fd = open("/dev/video0", O_RDWR, 0);語句來打開該設備文件,即可像訪問文件一樣來訪問該設備。open函數(shù)中的“O_RDWR”表示阻塞模式,它也可以換成“O_RDWR | O_NONBLOCK”,表示非阻塞模式。以非阻塞模式打開視頻設備時,不管設備打開成功與否,驅(qū)動都會把緩存中的數(shù)據(jù)返回給應用程序。
(2)獲取視頻設備的參數(shù)信息。成功打開視頻設備后,可以使用語句ioctl(fd, VIDIOC_QUERYCAP, &capability)來獲取視頻設備的參數(shù)信息,設備參數(shù)信息就保存在結(jié)構(gòu)體capability中的各成員變量中。
(3)初始化視頻設備配置。例如設置視頻捕獲格式主要是通過設置v4l2_format數(shù)據(jù)結(jié)構(gòu)中的成員變量來實現(xiàn)。一般設置的圖像大小為640×480或320×240兩種。
(4)采集視頻圖像。獲取采集到的視頻圖像的方式有兩種:(1)使用read( )函數(shù)直接讀取設備; (2)使用mmap( )函數(shù)共享內(nèi)存。
在Linux操作系統(tǒng)中,內(nèi)存空間被分為用戶空間和內(nèi)核空間。進程不能直接讀寫內(nèi)核空間,通過read( )函數(shù)來讀取設備比較慢,但安全度較高;通過使用mmap方式后能將同一文件映射到進程的虛擬地址空間,從而達到直接讀取該內(nèi)存空間的目的,讀取速度很快,但相應地安全度較低。此處采用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);”進行內(nèi)存映射,這樣就可以用“ret = ioctl(fd , VIDIOC_QBUF, &buf);”獲取視頻圖像。判斷視頻圖像是否采集完畢需要使用“ioctl(fd,VIDIOCSYNC, &buf);”。
(5)關(guān)閉視頻設備。使用“close(fd);”實現(xiàn)。
3.3 視頻圖像傳輸程序設計
本視頻圖像傳輸程序主要通過線程組來實現(xiàn),涉及的線程主要有:cap_video、send_video和client_connect。cap_video 負責采集視頻圖像;client_connect線程用來等待客戶端的連接請求,當有新的用戶連接請求時,它就會采用GET方法獲取用戶的請求信息,然后再判斷是否建立連接,若請求信息有效則給該用戶開通一個新的連接用來發(fā)送連續(xù)的視頻流,client_connect線程還要負責將無效的socket連接斷開,以保證系統(tǒng)的高效運行;send_video則是服務于已連接好的用戶,主要用來將公共緩沖區(qū)中的視頻圖像通過socket發(fā)送出去,send_video線程每發(fā)送一幀圖像后就會將公共緩沖區(qū)清空并進行上鎖,直到公共緩沖區(qū)被寫入的數(shù)據(jù)大于或等于所設閾值時才執(zhí)行下一次發(fā)送任務。線程之間通過pthread_cond_
wait、pthread_mutex_lock、pthread_mutex_unlock等函數(shù)來防止競爭。視頻圖像傳輸程序流程如圖6所示。
3.4 溫濕度實時曲線描繪程序設計
本程序能夠?qū)貪穸葦?shù)據(jù)通過JavaScript代碼描繪成曲線圖,用戶能夠直觀地感受到溫濕度數(shù)據(jù)實時的變化。本程序使用開源的jqPlot庫進行圖像描繪。
jqPlot繪圖功能主要通過調(diào)用$.jqplot函數(shù)對所繪制的圖像進行初始化設置來實現(xiàn)。jqPlot的配置格式為:
$.jqplot('target', data, options);
其中target表示在HTML中的位置;data為顯示的數(shù)據(jù);options為與圖像顯示相關(guān)的配置。
本文中用到的主要options的對象有title和axes。axesDefaults中的配置參數(shù)與axes中的一樣,axesDefaults中的參數(shù)是默認配置,而axes中的參數(shù)是非默認配置。
4 系統(tǒng)調(diào)試
通過串口線和網(wǎng)線,將開發(fā)板與PC連接好,然后啟動開發(fā)板。打開瀏覽器后,在PC瀏覽器的地址欄中輸入開發(fā)板上所設Web服務器的IP地址即可看到登陸頁面,輸入用戶名和密碼,驗證成功后即可進入遠程監(jiān)測的主控頁面,默認加載頁面為視頻監(jiān)控頁面。用戶還可以通過點擊主控頁面中左邊樹形菜單中的“溫濕度監(jiān)測”加載溫濕度的實時曲線。
本文設計了一種基于S3C6410嵌入式技術(shù)、B/S網(wǎng)絡模式的遠程無線環(huán)境監(jiān)測系統(tǒng),經(jīng)過測試,該系統(tǒng)運行穩(wěn)定,能夠進行實時的溫濕度數(shù)據(jù)監(jiān)測和視頻監(jiān)控。該系統(tǒng)具有支持多路同時訪問、系統(tǒng)負荷能力強、界面友好等特點,在環(huán)保行業(yè)、制造行業(yè)、交通行業(yè)的環(huán)境監(jiān)測方面具有一定的推廣應用價值。
參考文獻
[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] 張國軍, 鄭麗媛, 張俊.基于物聯(lián)網(wǎng)的瓦斯監(jiān)控系統(tǒng)[J]. 傳感器與微系統(tǒng),2013,32(1):125-127,130.
[3] 陳建明,沈東方.基于S3C6410的智能泵組控制器設計[J].電子技術(shù)應用,2012,38(12):14-16.
[4] 楊嬌娟.淺談TCP/IP協(xié)議[J].數(shù)字技術(shù)與應用,2012(3):220.
[5] 韓善鋒,曹鳳海,易昌華. SQLite數(shù)據(jù)庫在嵌入式程序開發(fā)中的應用[J].物探裝備, 2011,21(3):170-173,178.
[6] 毛云貴.支持SMTP認證的E-MAIL發(fā)送程序的設計[J].南京工程學院學報(自然科學版),2006,4(1):66-72.
[7] 呂弘, 黃偉納. 基于AJAX技術(shù)的圖書館統(tǒng)計平臺的設計[J].中國科技信息,2012(1):75-76.
[8] 胡敏,施云波,修德斌,等.氯氣檢測報警器的設計[J].儀表技術(shù)與傳感器,2010(12):66-67,70.