摘 要: 針對實時環境狀況監測,設計了一種基于Arduino的環境狀況監測系統。該系統以Arduino UNO和各類傳感器為核心,設計并編寫了Arduino UNO程序,實現實時、便捷地監測周圍環境的溫度、濕度、光照及噪音變化情況,并采集傳感器數據上傳到監測平臺。實踐表明,該設計能夠經濟、高效地實現數據采集,可用于實時環境狀況的快速監測。
0 引言
近兩年,工業化進程的日益發展導致環境污染問題日益突出,隨著環境狀況的不斷惡化,各地霧霾天氣日益嚴重,已經影響到了人們的正常出行、生活以及健康,因此人們掌握了解自身所處周邊環境狀況信息的需求越來越迫切。伴隨著當前移動互聯網技術的飛速發展, 3 G、WiFi、GPRS等無線通信方式的實現和廣泛應用,都為實時環境狀況監測提供了條件,人們可以隨時隨地了解自己所處的環境狀況信息,為出行和生活提供便捷服務,為尋求更加健康的環境提供依據。本文主要研究利用現有的成熟傳感技術和互聯網技術實現實時獲取環境狀況信息,這種實現方法簡單快速,成本低廉,具有很高的實用性。
Arduino是近年來快速流行起來的一種控制器,它是一個硬件平臺,使用的核心是一個AVR芯片,整塊控制板類似于單片機開發板,但是在功能上強大了很多。本文基于Arduino平臺設計一個環境監測系統,用來檢測一天中溫度、濕度、光照以及噪音變化情況,并將數據寫入SD卡中進行分析,具有很高的實用性。
1 Arduino UNO主控板及傳感器
Arduino是一款便捷靈活、方便開發者使用和上手的開源電子原型平臺,包含各種型號的Arduino板及擴展板硬件資源和Arduino IDE軟件資源。Arduino不僅僅是全球最流行的開源硬件,也是一個優秀的硬件開發平臺,更是當前硬件開發的趨勢。
本設計主要采用Arduino UNO主控板、DHT11溫濕度傳感器模塊、光照強度傳感器以及聲音傳感器,外接SD卡進行數據存儲。
1.1 Arduino UNO主控板及擴展板
Arduino由一個基于Atmel AVR單片機的開放源碼的硬件平臺和一套專門的開發環境組成。Arduino UNO[1]是目前使用最廣泛的Arduino控制器,具有Arduino的所有基本功能。UNO的處理器核心是ATmega328,它包括14路數字輸入/輸出接口(其中6路可作為PWM輸出,6路模擬輸入),一個16 MHz晶體振蕩器,一個USB接口,一個電源插座,一個ICSP接口和一個復位按鈕,其結構和引腳電路如圖1所示[2]。在掌握了Arduino UNO開發技術以后,就可以將自己編寫的代碼輕松地移植到其他型號的控制器上,可以用來開發交互產品,比如可以讀取大量的開關和傳感器信號,并且可以控制各式各樣的電燈、電機和其他物理電子設備等。
1.2 DHT11溫濕度監測模塊
DHT11數字溫濕度傳感器是一款含有已校準數字信號輸出的溫濕度復合傳感器,它采用專用的數字模塊采集技術和溫濕度傳感技術,確保該傳感器模塊具有極高的可靠性與卓越的長期穩定性能[3]。DHT11采用單總線方式與Arduino進行數據傳輸,單線制串行接口使系統集成變得簡易快捷。該傳感器體積超小、功耗極低,信號傳輸距離可達20 m以上,同時具有精度準確、讀取靈敏等優點,使其成為各類應用甚至最為苛刻應用場合的最佳選擇。DHT11數字溫濕度傳感器可以測出實時的環境溫度和相對濕度,溫度范圍為0~50℃,溫度的檢測精度為1℃;它的相對濕度范圍為20 %RH~90 %RH,檢測精度為1 %RH,兩次讀取傳感器數據的時間采樣周期間隔不低于1 s[4]。
傳感器包括一個電阻式感濕元件和一個NTC測溫元件,并與一個高性能8位單片機相連接,因此該產品具有品質卓越、響應超快、抗干擾能力強、性價比極高等優點。每個DHT11傳感器都在極為精確的濕度校驗室中進行校準,校準系數以程序的形式存在OTP內存中,傳感器內部在檢測型號的處理過程中要調用這些校準系數。
1.3 光敏強度傳感器
熱敏模塊用于溫度檢測,對所處環境的溫度進行檢測,采用NTC 10 k?贅熱敏電阻,靈敏度好,當溫度升高時,電阻值會隨之降低,模擬值輸出為0~1 023,結合Arduino的傳感器擴展板用模擬口便可以讀取模擬值。
光敏電阻器是利用半導體的光電導效應制成的一種電阻值隨入射光的強弱而改變的電阻器,又稱為光電導探測器。當入射光強時電阻減小,入射光弱時電阻增大。光敏電阻器可用來對周圍環境光的強度進行檢測,結合Arduino控制器可實現光的測量,可通過3P傳感器連接線與Arduino專用傳感器擴展板結合使用。
1.4 聲音傳感器
模擬聲音傳感器聲音模塊對環境聲音強度最敏感,一般用來檢測周圍環境的聲音強度。該傳感器在環境聲音強度達不到設定閾值時輸出高電平,當外界環境聲音強度超過設定閾值時輸出低電平;小板數字量輸出可以與單片機直接相連,通過單片機來檢測高低電平,由此來檢測環境的聲音;小板數字量輸出可以直接驅動繼電器模塊,由此可以組成一個聲控開關,可以使用它制作聲控開關等。此傳感器只能根據震動原理識別聲音的有無,不能識別聲音的大小或者特定頻率的聲音,其靈敏度可通過數字電位器調節。Arduino可以通過模擬輸入接口對其輸出信號進行采集。
2 硬件設計
溫度、濕度、光照和聲音傳感器采集到的都是模擬信號,需要從模擬量轉換到數字量,最終實現數字式輸出。各個傳感器與Arduino連接也非常方便,只需將其輸出端接到Arduino相應的數字引腳;也可以采用Arduino傳感器擴展板,將傳感器的輸出端直接連在擴展板上。硬件連接示意圖如圖2所示。
將DHT11溫濕度模塊的VCC、GND、DOUT引腳分別接至Arduino UNO控制板上的+5 V、GND、數字端口2,還需要在VCC與DOUT之間串聯一個5 kΩ的上拉電阻。將光敏傳感器的VCC、GND、DOUT引腳分別接至Arduino UNO控制板上的+5 V、GND、模擬引腳端口A0。將聲音傳感器VCC、GND、DOUT引腳分別接至Arduino UNO控制板上的+5 V、GND、模擬引腳端口A1。將SD卡模塊VCC、GND引腳分別接至Arduino UNO控制板上的+5 V和GND,MISO、MOSI、SCLK、CS 4個引腳分別連接控制板上的10、11、12、13端口。
3 軟件設計
3.1 Arduino IDE
Arduino IDE是一個專門用來編寫Arduino程序的軟件,將程序編寫好后,就可以通過此軟件上傳程序到Arduino開發板中執行。AVR單片機中的程序是使用Arduino庫寫成的,Arduino的集成開發環境使用起來簡單方便,簡化了單片機工作的流程,對AVR庫進行了二次編譯封裝,把端口都打包好了,寄存器、地址指針之類的基本不用管,大大降低了軟件開發難度。
在計算機端安裝好Arduino IDE軟件開發環境后,使用USB線將Arduino UNO連接至計算機的USB端口為控制板供電,即可進行程序的編寫、下載和調試[5]。
3.2 實現程序
Arduino實現主要程序代碼如下:
#include<SD.h>
#include<dht11.h>
dht11 DHT11;
#define DHT11_PIN 2//DHT11引腳
#define LIGHT_PIN A0//光敏引腳
const int chipSelect=4;//SD卡CS選擇引腳
void setup()
{
Serial.begin(9600);//初始化串口
pinMode(10,OUTPUT);
//將SS引腳設置為輸出狀態,UNO為10號引腳
Serial.println("Initializing SD card");//初始化SD卡
if(!SD.begin(chipSelect))
{
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
}
void loop()
{
Serial.println("Read data from DHT11");
DHT11.read(DHT11_PIN);//讀取DHT11的數據
Serial.println("Read data from Light Sensor");
//讀取光敏模塊數據
int light=analogRead(LIGHT_PIN);
Serial.println("Open file and write data");
File dataFile=SD.open("datalog.txt",FILE_WRITE);
//打開文件并將DHT11檢測到的數據寫入文件
if(dataFile)
{
dataFile.print(DHT11.humidity);
dataFile.print(",");
dataFile.print(DHT11.temperature);
dataFile.print(",");
dataFile.println(light);
dataFile.close();
}
else
{
Serial.println("error opening datalog.txt");
}
Serial.println("Wait for next loop");//延時1 min
delay(60000);
}
3.3 數據導出并繪制圖表分析
連接的SD卡記錄到不同傳感器的數據后,通過計算機打開SD卡,可以看到名為datalog.txt的文件,這就是數據記錄器所采集到的數據環境。分析數據并繪制圖表的方法很多,可以采用很多專業的軟件完成。本設計只需要做一些簡單的數據分析,因此在Excel中即可完成。
將SD卡中數據記錄器記錄的文本數據導入到Excel中,導入方法如下[6]:
(1)首先在EXCEL中選擇“文件”→“打開”菜單項,會彈出打開文件窗口,在打開的窗口中將打開文件類型選擇為“所有文件(*.*)”,然后打開需要導入的文件并打開;
(2)單擊“打開”按鈕后,會彈出文本導入向導,Excel會對文本進行分行處理和分列處理;
(3)被導入的文本按行和列分好后,選擇其中的一列數據(即某一傳感器的數據),根據數據選擇生成相應形式的數據折線圖,顯示數據的變化情況。
4 結論
本設計利用DHT11溫濕度傳感器、光敏傳感器、聲音傳感器組成了環境監測的基本因素,實現了對溫濕度、環境光以及噪音的快捷實時檢測,可以方便地掌握自己身處的環境情況。本設計具有價格低廉、輕便簡潔、便于攜帶等特點,可適用于計算機機房、圖書館、儲存糧倉、溫室大棚測溫、空調室溫控制等對環境較為敏感和對溫度控制要求較高的場所[7]。除此以外,本設計應用領域也比較廣泛,包括暖通空調測試及檢測設備、汽車、數據記錄器、消費品、自動控制、氣象站、家電濕度調節器、醫療除濕器等。在不久的將來,隨著無線傳感器技術ZigBee模塊的日趨成熟,無線網絡傳感器被良好地應用于此設計中,實現網絡中各個節點之間信息更加便捷地傳輸與通信,對環境狀態的實時監測將更加方便、及時和有效[8]。
參考文獻
[1] 蔡睿妍.Arduino的原理及應用[J].電子設計工程,2012,20(16):155-157.
[2] Arduino UNO管腳標注[EB/OL].[2011-10-28].http://my.oschina.net/jingshishengxu/blog/34134.
[3] 沈金鑫.Arduino與LabVIEW開發實戰[M].北京:機械工業出版社,2014.
[4] 成都智能盒子科技有限公司.DHT 11數字溫濕度傳感器[EB/OL](2014-06-30).http://x.openjumper.com/dht11.2012.
[5] 陳呂洲.Arduino程序設計基礎[M].北京:航空航天大學出版社,2014.
[6] 陳呂洲.Arduino程序設計基礎[M].北京:航空航天大學出版社,2013.
[7] 袁本華,董錚.基于Arduino控制板的溫室大棚測溫系統設計[J].安徽農業科學,2012,40(8):5049-5050.
[8] 王立巖,楊世鳳.基于ZigBee技術的溫室環境檢測系統設計[J].天津科技大學學報,2011,26(1),60-63.