王 小 輝
(1.西安郵電大學 人文與外國語學院,西安 710121; 2.陜西師范大學 地理科學與旅游學院,西安 710119)
隨著當今社會的高速發展,環境保護已成為本世紀內人類必須面對的重大問題[1-2]。在過去的霧霾檢測中,大多數都是通過人為攜帶大型設備去采集環境的數據,雖然技術簡單,但設備精度不夠高,難以實時檢測[3]。隨著科技不斷發展,嵌入式系統與ARM處理器的結合可以完成大多數數據采集與傳輸。
本文基于ARM處理器與Linux操作系統的城市霧霾天氣監測系統具有很好的應用價值[4-6],可以廣泛應用于商場、醫院、電影院等人流密集區域。
實驗系統基于ARM11微處理器S3C6410芯片,連接所需傳感器與WiFi接口。使之搭載嵌入式Linux系統,通過交叉編譯添加需要的傳感器驅動程序,并且生成相對應的Linux內核[7],最后將內核導入Tiny6410中。利用傳感器采集周圍環境的數據,通過Socket網絡通信完成數據傳輸[8-10]。整體系統示意圖如圖1所示。

圖1 環境監測系統
系統采用HU-10S作為溫濕度傳感器,采用GP2Y10 10AU0F作為PM2.5傳感器,HU-10S通過I/O口進行數據傳輸,PM2.5傳感器經過GPIO口與I/O口完成數據傳輸[11],如圖2所示。

圖2 系統硬件結構圖
采用嵌入式Linux系統為基礎平臺,根據設計的需求對Linux系統的U-boot、Linux內核、文件系統進行適當的加減與定制,方便了對系統的開發。增加了對wireless USB WiFi驅動、溫濕度傳感器與PM2.5傳感器驅動,將寫好的編譯內核模塊通過交叉編譯的方式增加到Linux內核中去,同時減少設計所用不到的驅動,完成系統的最小化。通過Socket網絡通信技術與讀取傳感器接收到數據,編寫程序完成對系統內數據的調出,實現了對監測環境的信息采集與傳輸[12]。
實驗設計利用HU-10S作為溫濕度傳感器并采用型號為GP2Y1010AU0F的傳感器采集PM2.5的數據。HU-10S溫濕度模塊通過傳感器接收到的非線性電阻信號由芯片LM2902轉換為電壓形式的電信號。GP2Y1010AU0F是由SHARP公司所研發的一個通過感器內部所組成的相對分布的紅外發光二級管和光電結晶管的光學灰塵濃度檢測傳感器,其原理是利用光敏電阻的光敏特性檢測微小顆粒物的數量,從而根據輸出電壓的大小來判斷顆粒濃度[13-14]。
Linux系統主要由U-Boot、Linux內核、文件系統和用戶程序組成[15]。其中系統內置的U-Boot代碼與Bootloader程序用于引導系統啟動,Linux內核需要根據實際需求定制好相應的代碼,文件系統主要包含文件系統與其他的系統命令,此處使用rootfs_qtopia_qt4.img作為rootfs。應用程序包括必須的驅動程序與交互界面等,即為Qtopia2.2的系統桌面。
主機安裝的Linux版本是Ubuntu14.0(64bit),安裝并設置完后開啟虛擬機,即可開始使用Linux系統,并且之后進行編譯前的配置。
(1) 建立交叉編譯環境。在嵌入式開發過程中,為了將一些復雜無法編譯的程序在內存有限的目標機中運行,必須通過資源豐富的主機編譯生成可執行文件,編譯完成后通過宿主機與開發板的連接,將所寫程序的.c文件移植到開發板中運行,從而完成目標機中程序的正常運行。
本文使用的是arm-linux-gcc-4.5.1,通過更改交叉編譯版本以及配置文件可以成功建立交叉編譯。
(2) U_Boot。U-Boot(Universal Boot Loader)具有GPL款項的開放源碼項目[16]。系統引導是U-Boot的主要作用。大多數U-Boot源代碼是根據Linux內核源代碼經過精簡和演變而形成。U-Boot的工作流程主要由Stage 1和Stage 2組成,具體流程如圖3所示。

圖3 U-Boot工作流程
使用CPU系統結構的部分大多在Stage 1通過匯編語言來完成,Stage 2用C語言完成,具有較好的可讀性和移植性。U-Boot啟動中的第1步是定義入口,由于起始點必須是唯一,故定義起始點在0x0處;第2步是設置異常向量,并調整處理器的實時時鐘、控制中斷等寄存器,并且調整內存控制寄存器的參數;第3步是將ROM跳轉到RAM中并且繼續運行。然后轉入U-Boot的Stage 2。
(1) 配置和編譯busybox。實際開發中,各開發板資源不同,因此,busybox源代碼應根據所需重新配置,然后使用缺省的配置文件:peizhi.config。Tiny6410使用此配置文件編譯出的busybox可滿足多方面的要求。進入busybox源代碼目錄,輸入命令#cp peizhi.config .config拷貝此文件到相應文件夾,然后輸入make進行編譯。編譯完成后生成busybox文件。它和開發板有同樣的安裝放法,并且busybox一般是不用更新的。
(2) 制作yaffs2文件系統映像。進入Linux系統目錄后執行命令:#mkyaffs2image-128 MB rootfs_qtopia_qt4 rootfs_qtopia_qt4.img,將rootfs_qtopia _qt4目錄壓制為yaffs2格式的rootfs_qtopia_qt4.img系統映像文件,它適用于塊頁組織結構為“1 Page=2 Kbyte,1 Block=128 K”的SLC Nand Flash(如K9F2G08,K9K8G08等),下一步通過SD卡或者 USB下載可以把它燒寫到Nand Flash中。
(3) 移植嵌入式Linux系統。基于SD卡中的ini索引文件,修改安裝Linux系統所需的主要定義語句,配置部分如表1所示。表中,LCD共用同一個zImage,此系統所用的Superboot 會自動檢測 LCD 型號,Kernel源碼:arch/arm/mach-s3c64xx/mini6410-lcds.c會在 Command Line 中追加LED型號參數。撥動Tiny6410的“S2”開關為“SDBOOT”,并插入SD卡,伴隨著有序的“滴”聲音,Tiny6410開發板上的4盞綠燈開始閃爍,最后蜂鳴器響2聲,LED全部亮起,系統已經完成了燒寫。執行完畢后。重啟開發板就是Qtopia2.2.0系統了,如圖4所示。Qtopia是基于Qt開發的一個軟件平臺,主要用于嵌入式Linux系統或移動電話,Qtopia具有完善的窗口操作系統、游戲和多媒體等輔助應用,可以縮短軟件的開發周期。

圖4 Qtopia2.2.0系統
在Linux系統中,傳感器大多數被認為是一種特別的外置裝置,Linux系統通過系統的讀取來進行驅動和控制各種傳感器。而在嵌入式Linux系統中,傳感器的操控是通過將相應的硬件驅動加入相應位置得以實現的,之后硬件傳感器就使用打開,讀寫等程序函數代碼對硬件設備進行配置與命令,這樣就可以通過嵌入式Linux直接對設備進行訪問。其中,硬件設備具體功能有初始化設備、啟動或者停止設備、將硬件設備上的數據發送到用戶程序上,并且將用戶程序的指令發送到硬件設備里,實現數據互通。
溫濕度傳感器的程序設計主要分為兩個階段,① 在內核里面運行,叫做內核驅動程序;② 在用戶程序里運行。這兩部分通過用戶程序里的文件操作函數完成數據的傳輸,具體的工作流程如圖5所示。

圖5 濕度測量的過程
首先啟動傳感器讀取相關引腳信息,根據時序控制經過ADC采樣的方法完成采集信息的讀取。在用戶程序中,寫好了傳感器測量程序,其中就包括了ADC采樣與溫度,濕度對應的函數值,此時可以輸出相應的溫濕度數據。
PM2.5傳感器使用的是ADC信號的輸出方法。本文使用的Tiny6410開發板提供了一路GPIO口和一路I/O口,如果要收集檢測的數值,則必須通過GPIO向傳感器發送脈沖,通過發送1次脈沖,ADC即可采樣到1次數據,這樣就得到了此刻周圍環境PM2.5的濃度。具體流程見圖6。

圖6 PM2.5傳感器工作流程
在上述流程中,驅動部分首先將ADC通道的對應引腳設置為輸入,之后將GPIO的數值拉低,隨后開始ADC轉換,轉換完成后,將采樣的數據發送至用戶程序,最后拉高GPIO值,完成一次測量。而用戶程序收到了采樣數據之后,經過計算輸出相應的數值。
實驗用戶程序的設計主要用以實現Socket網絡數據傳輸的功能,在嵌入式Linux中,Socket網絡通信是用戶訪問系統的主要途徑。通過編寫網絡連接與數據交換的函數,實現了應用程序對傳感器的讀取,具體流程見圖7。

圖7 用戶程序的Socket通信
首先創建一個Server,并設置好待連接的端口。由PC機向目標發起連接,如果Server發現連接信號,則接受連接請求,完成Socket的網絡連接。 然后打開設備文件,在/dev/gpio讀取ADC的采樣數據,通過收發文件函數完成連接。之后通過html的格式發送到客戶端。通信完成后,等待停止指令結束循環。
本文設計了一套基于Tiny6410開發板的環境檢測系統,實物如圖8所示,通過使用溫度計、濕度計以及天氣預報進行數據對比,從而驗證本系統的設計精度。
為了驗證測試效果,實驗選定學校操場、地鐵口、醫院、工廠以及室外為5個待測地點進行實際測試,測試結果如圖9所示。圖中:左邊是手機收到的實時氣象信息,右邊是系統實際測試的結果。在戶外和大學操場上人流量較少實測數據偏低;在地鐵口、醫院人流密集的地方PM2.5的數據超過當天預報值,在廠房由于工廠的廢氣排放超標,也可以導致該區域顆粒物數量陡增。由此可見,本系統的對PM2.5的測試數據較為穩定,可以作為實際測試的數據來源。
通過以上多個地點的不同實驗,基于Tiny6410的城市霧霾檢測系統與實際的環境數據很接近,可以作為實際測試的相關需求。
將HU-10S和GP2Y1010AU0F傳感器根據其電氣特性及傳輸方法與Tiny6410開發板連接起來。通過嵌入式Linux系統的配置并且將配置好的內核進行移植。根據Tiny6410開發板和傳感器特性,以Socket網絡通信為基礎加入讀取傳感器采集的數據,可以完成本文的預定目標。通過實際測量可見,本文設計的城市霧霾檢測系統運行良好,實際測出的溫濕度以及PM2.5濃度與氣象預報相差不多,可以更好地滿足人們對環境參數實時測試的更高的需求。