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