摘 要: 針對實(shí)時(shí)環(huán)境狀況監(jiān)測,,設(shè)計(jì)了一種基于Arduino的環(huán)境狀況監(jiān)測系統(tǒng),。該系統(tǒng)以Arduino UNO和各類傳感器為核心,,設(shè)計(jì)并編寫了Arduino UNO程序,實(shí)現(xiàn)實(shí)時(shí),、便捷地監(jiān)測周圍環(huán)境的溫度,、濕度、光照及噪音變化情況,,并采集傳感器數(shù)據(jù)上傳到監(jiān)測平臺,。實(shí)踐表明,該設(shè)計(jì)能夠經(jīng)濟(jì),、高效地實(shí)現(xiàn)數(shù)據(jù)采集,,可用于實(shí)時(shí)環(huán)境狀況的快速監(jiān)測。
關(guān)鍵詞: Arduino,;智能,;環(huán)境監(jiān)測;溫濕度監(jiān)測
0 引言
近兩年,,工業(yè)化進(jìn)程的日益發(fā)展導(dǎo)致環(huán)境污染問題日益突出,,隨著環(huán)境狀況的不斷惡化,各地霧霾天氣日益嚴(yán)重,,已經(jīng)影響到了人們的正常出行,、生活以及健康,因此人們掌握了解自身所處周邊環(huán)境狀況信息的需求越來越迫切,。伴隨著當(dāng)前移動互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,, 3 G、WiFi,、GPRS等無線通信方式的實(shí)現(xiàn)和廣泛應(yīng)用,,都為實(shí)時(shí)環(huán)境狀況監(jiān)測提供了條件,人們可以隨時(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)方法簡單快速,,成本低廉,,具有很高的實(shí)用性,。
Arduino是近年來快速流行起來的一種控制器,它是一個(gè)硬件平臺,,使用的核心是一個(gè)AVR芯片,,整塊控制板類似于單片機(jī)開發(fā)板,但是在功能上強(qiáng)大了很多,。本文基于Arduino平臺設(shè)計(jì)一個(gè)環(huán)境監(jiān)測系統(tǒng),,用來檢測一天中溫度,、濕度、光照以及噪音變化情況,,并將數(shù)據(jù)寫入SD卡中進(jìn)行分析,,具有很高的實(shí)用性。
1 Arduino UNO主控板及傳感器
Arduino是一款便捷靈活,、方便開發(fā)者使用和上手的開源電子原型平臺,,包含各種型號的Arduino板及擴(kuò)展板硬件資源和Arduino IDE軟件資源。Arduino不僅僅是全球最流行的開源硬件,,也是一個(gè)優(yōu)秀的硬件開發(fā)平臺,,更是當(dāng)前硬件開發(fā)的趨勢。
本設(shè)計(jì)主要采用Arduino UNO主控板,、DHT11溫濕度傳感器模塊,、光照強(qiáng)度傳感器以及聲音傳感器,外接SD卡進(jìn)行數(shù)據(jù)存儲,。
1.1 Arduino UNO主控板及擴(kuò)展板
Arduino由一個(gè)基于Atmel AVR單片機(jī)的開放源碼的硬件平臺和一套專門的開發(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開發(fā)技術(shù)以后,,就可以將自己編寫的代碼輕松地移植到其他型號的控制器上,,可以用來開發(fā)交互產(chǎn)品,比如可以讀取大量的開關(guān)和傳感器信號,,并且可以控制各式各樣的電燈,、電機(jī)和其他物理電子設(shè)備等。
1.2 DHT11溫濕度監(jiān)測模塊
DHT11數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號輸出的溫濕度復(fù)合傳感器,,它采用專用的數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),,確保該傳感器模塊具有極高的可靠性與卓越的長期穩(wěn)定性能[3]。DHT11采用單總線方式與Arduino進(jìn)行數(shù)據(jù)傳輸,,單線制串行接口使系統(tǒng)集成變得簡易快捷,。該傳感器體積超小、功耗極低,,信號傳輸距離可達(dá)20 m以上,,同時(shí)具有精度準(zhǔn)確,、讀取靈敏等優(yōu)點(diǎn),使其成為各類應(yīng)用甚至最為苛刻應(yīng)用場合的最佳選擇,。DHT11數(shù)字溫濕度傳感器可以測出實(shí)時(shí)的環(huán)境溫度和相對濕度,,溫度范圍為0~50℃,溫度的檢測精度為1℃,;它的相對濕度范圍為20 %RH~90 %RH,,檢測精度為1 %RH,兩次讀取傳感器數(shù)據(jù)的時(shí)間采樣周期間隔不低于1 s[4],。
傳感器包括一個(gè)電阻式感濕元件和一個(gè)NTC測溫元件,,并與一個(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)部在檢測型號的處理過程中要調(diào)用這些校準(zhǔn)系數(shù),。
1.3 光敏強(qiáng)度傳感器
熱敏模塊用于溫度檢測,,對所處環(huán)境的溫度進(jìn)行檢測,采用NTC 10 k?贅熱敏電阻,,靈敏度好,,當(dāng)溫度升高時(shí),電阻值會隨之降低,,模擬值輸出為0~1 023,,結(jié)合Arduino的傳感器擴(kuò)展板用模擬口便可以讀取模擬值。
光敏電阻器是利用半導(dǎo)體的光電導(dǎo)效應(yīng)制成的一種電阻值隨入射光的強(qiáng)弱而改變的電阻器,,又稱為光電導(dǎo)探測器,。當(dāng)入射光強(qiáng)時(shí)電阻減小,入射光弱時(shí)電阻增大,。光敏電阻器可用來對周圍環(huán)境光的強(qiáng)度進(jìn)行檢測,,結(jié)合Arduino控制器可實(shí)現(xiàn)光的測量,可通過3P傳感器連接線與Arduino專用傳感器擴(kuò)展板結(jié)合使用,。
1.4 聲音傳感器
模擬聲音傳感器聲音模塊對環(huán)境聲音強(qiáng)度最敏感,,一般用來檢測周圍環(huán)境的聲音強(qiáng)度。該傳感器在環(huán)境聲音強(qiáng)度達(dá)不到設(shè)定閾值時(shí)輸出高電平,,當(dāng)外界環(huán)境聲音強(qiáng)度超過設(shè)定閾值時(shí)輸出低電平,;小板數(shù)字量輸出可以與單片機(jī)直接相連,通過單片機(jī)來檢測高低電平,,由此來檢測環(huán)境的聲音,;小板數(shù)字量輸出可以直接驅(qū)動繼電器模塊,由此可以組成一個(gè)聲控開關(guān),,可以使用它制作聲控開關(guān)等,。此傳感器只能根據(jù)震動原理識別聲音的有無,不能識別聲音的大小或者特定頻率的聲音,,其靈敏度可通過數(shù)字電位器調(diào)節(jié),。Arduino可以通過模擬輸入接口對其輸出信號進(jìn)行采集。
2 硬件設(shè)計(jì)
溫度,、濕度,、光照和聲音傳感器采集到的都是模擬信號,需要從模擬量轉(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è)專門用來編寫Arduino程序的軟件,,將程序編寫好后,就可以通過此軟件上傳程序到Arduino開發(fā)板中執(zhí)行,。AVR單片機(jī)中的程序是使用Arduino庫寫成的,,Arduino的集成開發(fā)環(huán)境使用起來簡單方便,簡化了單片機(jī)工作的流程,,對AVR庫進(jìn)行了二次編譯封裝,,把端口都打包好了,寄存器,、地址指針之類的基本不用管,,大大降低了軟件開發(fā)難度。
在計(jì)算機(jī)端安裝好Arduino IDE軟件開發(fā)環(huán)境后,,使用USB線將Arduino UNO連接至計(jì)算機(jī)的USB端口為控制板供電,,即可進(jìn)行程序的編寫、下載和調(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號引腳
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);
//打開文件并將DHT11檢測到的數(shù)據(jù)寫入文件
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ù)后,通過計(jì)算機(jī)打開SD卡,,可以看到名為datalog.txt的文件,,這就是數(shù)據(jù)記錄器所采集到的數(shù)據(jù)環(huán)境。分析數(shù)據(jù)并繪制圖表的方法很多,,可以采用很多專業(yè)的軟件完成,。本設(shè)計(jì)只需要做一些簡單的數(shù)據(jù)分析,因此在Excel中即可完成,。
將SD卡中數(shù)據(jù)記錄器記錄的文本數(shù)據(jù)導(dǎo)入到Excel中,,導(dǎo)入方法如下[6]:
(1)首先在EXCEL中選擇“文件”→“打開”菜單項(xiàng),,會彈出打開文件窗口,,在打開的窗口中將打開文件類型選擇為“所有文件(*.*)”,然后打開需要導(dǎo)入的文件并打開,;
?。?)單擊“打開”按鈕后,會彈出文本導(dǎo)入向?qū)?,Excel會對文本進(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)測的基本因素,,實(shí)現(xiàn)了對溫濕度,、環(huán)境光以及噪音的快捷實(shí)時(shí)檢測,可以方便地掌握自己身處的環(huán)境情況,。本設(shè)計(jì)具有價(jià)格低廉,、輕便簡潔、便于攜帶等特點(diǎn),可適用于計(jì)算機(jī)機(jī)房,、圖書館,、儲存糧倉、溫室大棚測溫,、空調(diào)室溫控制等對環(huán)境較為敏感和對溫度控制要求較高的場所[7],。除此以外,本設(shè)計(jì)應(yīng)用領(lǐng)域也比較廣泛,,包括暖通空調(diào)測試及檢測設(shè)備,、汽車、數(shù)據(jù)記錄器,、消費(fèi)品,、自動控制、氣象站,、家電濕度調(diào)節(jié)器,、醫(yī)療除濕器等。在不久的將來,,隨著無線傳感器技術(shù)ZigBee模塊的日趨成熟,,無線網(wǎng)絡(luò)傳感器被良好地應(yīng)用于此設(shè)計(jì)中,實(shí)現(xiàn)網(wǎng)絡(luò)中各個(gè)節(jié)點(diǎn)之間信息更加便捷地傳輸與通信,,對環(huán)境狀態(tài)的實(shí)時(shí)監(jiān)測將更加方便,、及時(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開發(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控制板的溫室大棚測溫系統(tǒng)設(shè)計(jì)[J].安徽農(nóng)業(yè)科學(xué),,2012,,40(8):5049-5050.
[8] 王立巖,楊世鳳.基于ZigBee技術(shù)的溫室環(huán)境檢測系統(tǒng)設(shè)計(jì)[J].天津科技大學(xué)學(xué)報(bào),,2011,,26(1),60-63.