国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

溫濕度采集存儲系統(tǒng)設(shè)計的系統(tǒng)軟件研究

2016-11-10 10:39:27吳云沛胡永金張西平
電子測試 2016年19期
關(guān)鍵詞:溫濕度串口單片機

吳云沛,胡永金,張西平

(湖北汽車工業(yè)學(xué)院,湖北十堰,442002)

Wu Yunpei,Hu Yongjin,Zhang Xiping

(Hubei University Of Automotive Technology,Shiyan Hubei,442002)

溫濕度采集存儲系統(tǒng)設(shè)計的系統(tǒng)軟件研究

吳云沛,胡永金,張西平

(湖北汽車工業(yè)學(xué)院,湖北十堰,442002)

本文介紹了溫濕度傳感器的檢測流程、存儲軟件的SD卡寫入流程和主控軟件的設(shè)計、程序開發(fā)和測試結(jié)果。

溫濕度傳感器; 單片機

Wu Yunpei,Hu Yongjin,Zhang Xiping

(Hubei University Of Automotive Technology,Shiyan Hubei,442002)

1 溫濕度檢測軟件設(shè)計

1.1關(guān)于溫濕度傳感器檢測流程的設(shè)計

DHT11數(shù)字溫濕度傳感器采集一次數(shù)據(jù)的流程如圖1所示。其具體操作為:首先,對單片機進行初始化,實現(xiàn)I/O管腳的配置,然后單片機給DHT11發(fā)送開始信號,接下來看DHT11是否有信號響應(yīng),如果沒有的話,單片機就會再次發(fā)送開始信號;如果獲得響應(yīng)信號,則單片機實現(xiàn)數(shù)據(jù)采集,將采集的40位數(shù)據(jù)發(fā)送給單片機,校驗和,如果不正確,則丟棄;如果正確的話,會把數(shù)據(jù)進行轉(zhuǎn)化,也就是把二進制轉(zhuǎn)成十進制,完成。

圖1 傳感器單次數(shù)據(jù)采集流程示意圖

1.2關(guān)于溫濕度傳感器的測試程序開發(fā)

此程序的開發(fā)來源于傳感器采集數(shù)據(jù)流程圖。首先定義DHT11的管腳,根據(jù)接口電路設(shè)計的連接方式,定義A0號引腳為信號的輸入腳,對應(yīng)傳感器的輸出信號引腳,以字節(jié)的方式讀取數(shù)據(jù)。接下來就是對單片機進行初始化。要實現(xiàn)這個過程部分編譯為:

DDRC |= _BV(DHT11_PIN);//初始化單片機

PORTC |= _BV(DHT11_PIN);

單片機初始化后,首先單片機將A0口變?yōu)榈碗娖?,確保DHT11能檢測到起始信號,至少等待18ms,等到其開始信號完成后,還需要等待40us,然后就是對DHT11有沒有響應(yīng)做判斷,如果沒有響應(yīng),就會返回;如果有響應(yīng),此時低電平狀態(tài)延時等待80us,然后會把DHT11的低電平改為高電平,延時等待80us。部分編譯如下:

byte read_dht11_dat()//以字節(jié)讀取數(shù)據(jù)

PORTC &= ~_BV(DHT11_PIN);

delay(18);//將單片機的A0口拉為低電平至少18ms

PORTC |= _BV(DHT11_PIN);

delayMicroseconds(40);

DDRC &= ~_BV(DHT11_PIN);

delayMicroseconds(40);

dht11_in = PINC & _BV(DHT11_PIN);//單片機將開始信號發(fā)送給DHT11

if(dht11_in){//判斷DHT11是否響應(yīng)

return;

delayMicroseconds(80);//延時等待80us

dht11_in = PINC & _BV(DHT11_PIN);

if(!dht11_in)

return;

delayMicroseconds(80);//延時等待80us

DHT11開始傳送數(shù)據(jù),單片機接收到DHT11發(fā)送的40位數(shù)據(jù),然后校驗和,判斷校驗和是否正確。部分編譯如下:

for (i=0; i<5; i++)

dht11_dat[i] = read_dht11_dat();

DDRC |= _BV(DHT11_PIN);

PORTC |= _BV(DHT11_PIN);

byte dht11_check_sum = dht11_dat[0]+dht11_ dat[1]+dht11_dat[2]+dht11_dat[3]; //校驗和

if(dht11_dat[4]!= dht11_check_sum)

{;

根據(jù)以上部分編譯,然后具體編譯,在setup()函數(shù)中完成單片機的初始化,在loop()函數(shù)中完成溫濕度數(shù)據(jù)的采集,再加入delay()函數(shù),每間隔一定時間重復(fù)一次loop()中的程序。為了便于測試,則運用Arduino IDE中的軟件串口,這樣就可以實時的通過軟件串口來顯示溫濕度傳感器的數(shù)據(jù)。在setup()中,配置軟件串口的速率為19200bps,具體為:Serial.begin(19200)。

1.3關(guān)于溫濕度傳感器測試結(jié)果的表述

將編譯好的程序代碼通過USB下載至Arduino UNO開發(fā)板上,然后打開串口監(jiān)視器,結(jié)果如果是如圖2所示的。Read是串口輸出準備,Current humdity=56.0%是當時的濕度數(shù)據(jù),temperature=27℃是當時的溫度數(shù)據(jù),這種結(jié)果表明傳感器已經(jīng)響應(yīng),數(shù)據(jù)的采集正在進行中。進一步說明,DHT11數(shù)字溫濕度傳感器可以正常采集數(shù)據(jù),如果還沒有連接到傳感器或讀取數(shù)據(jù)錯誤,則可能會看到其他錯誤的提示。

圖2 DHT11傳感器測試結(jié)果

2 存儲軟件設(shè)計

2.1SD卡寫入流程設(shè)計

圖3為SD卡寫入流程設(shè)計的過程。對于SD卡存儲數(shù)據(jù),首先對單片機進行初始化,主要是初始化單片機的SPI串口,然后初始化SD卡,下來就會將文件打開,再接下來就是對文件的打開是否正確進行判斷,如果文件的打開是正確的,那么接下來就開始寫文件,完成后就會把文件關(guān)閉;如果打開不正確,就會重新打開。

圖3 SD卡一次寫入的流程示意圖

2.2SD卡測試程序開發(fā)

由圖3可知,我們先要建一個文件夾,然后給其命名。然后定義SD卡的CS引腳,根據(jù)SD卡接口電路的設(shè)計,將SD卡的CS連接到單片機的10號引腳,初始化單片機的SPI串口,初始化SD卡,然后打開文件,實例如下編譯:

pinMode(10, OUTPUT);//設(shè)置10引腳為輸出模式

myFile = SD.open("test.txt", FILE_WRITE);//打開文件

把文件打開以后,同時判斷有沒有正常打開,如果是正常打開的,就會開始寫文件,完畢后關(guān)閉文件,終止。部分程序編譯如下:

myFile.close();//關(guān)閉文件

文件關(guān)閉之后再打開已經(jīng)寫入內(nèi)容的文件,然后再編寫程序:

m y F i l e = S D.o p e n("t e s t.t x t");//重新打開文件

這個程序的setup()函數(shù)主要是完成對SD卡的初始化與打開文件,然后對文件是不是正常的作出判斷,并讀取第二次打開文件中的內(nèi)容,完成后將文件關(guān)閉。在loop()中沒有這個操作,那是由于這個程序只運行一次 。為了便于測試,則運用Arduino IDE中的軟件串口,這樣就可以實時的通過軟件串口來顯示SD卡中寫的內(nèi)容。在setup()中,配置軟件串口的速率為9600bps,具體為:Serial.begin(9600)。

2.3SD卡讀寫測試結(jié)果

將編譯好的程序代碼通過USB下載至Arduino UNO開發(fā)板上,然后打開串口監(jiān)視器,結(jié)果若是如圖4所示,testing 1,2,3.,是寫入SD卡的內(nèi)容。然后通過計算機打開SD卡,可以看到文件名為TEST.TXT,如圖5所示,寫入的信息為testing 1,2,3,說明SD卡寫入的數(shù)據(jù)正確,進一步說明SD卡可寫。

圖4 串口測試結(jié)果

圖5 SD卡的內(nèi)容

3 主控軟件設(shè)計

3.1主控流程設(shè)計

圖6是數(shù)據(jù)采集存儲的流程設(shè)計。具體體操作為:首先對系統(tǒng)進行初始化,實現(xiàn)I/O和SPI串口的初始化,然后單片機給DHT11發(fā)送開始信號,并判斷DHT11是否響應(yīng),若響應(yīng),則開始數(shù)據(jù)的采集,再打開文件將采集的數(shù)據(jù)寫入文件,寫完之后關(guān)閉該文件結(jié)束;若未響應(yīng),則返回。

圖6 一次數(shù)據(jù)采集存儲流程示意圖

3.2主控程序設(shè)計

對于主控程序的設(shè)計,主要是溫濕度傳感器進行數(shù)據(jù)的正確采集,然后打開文件,將采集的數(shù)據(jù)正確寫入SD卡,以實現(xiàn)數(shù)據(jù)存儲的功能。具體步驟如下表述,第一步,先將系統(tǒng)初始化,這里的初始化主要指A0口和單片機的SPI的初始化,我們分別定義A0號引腳為信號的輸入,單片機10、11、12、13號引腳,把10號引腳設(shè)置成輸出模式,11號引腳設(shè)置成數(shù)據(jù)輸出模式,12號引腳設(shè)置成數(shù)據(jù)輸入模式,13號引腳設(shè)置成時鐘輸出模式。具體編譯如下:

int chipSelect = 10;//定義管腳

int dataOut =11;

int dataIn = 12;

int clockPin = 13;

pinMode(chipSelect,OUTPUT);//初始化單片機的SPI引腳和I/O引腳

pinMode(dataIn,INPUT);

pinMode(dataOut,OUTPUT);

pinMode(clockPin,OUTPUT);

pinMode(A0,OUTPUT);

以字節(jié)的方式讀取數(shù)據(jù),部分編譯如下:

byte read_dht11_dat()

byte i = 0;//定義變量

byte result=0;

for(i=0; i< 8; i++)

while(?。≒INC & _BV(DHT11_PIN)));//當開始發(fā)送數(shù)據(jù)時,等待50秒

delayMicroseconds(30);//延時等待30微妙

if(PINC & _BV(DHT11_PIN))//判斷第一個位數(shù)據(jù)是否發(fā)送完

result |=(1<<(7-i));

while((PINC & _BV(DHT11_PIN)));//當?shù)谝粋€位數(shù)據(jù)發(fā)送完后,返回進行下一個

return result;

然后在void setup()函數(shù)中,對單片機進行初始化。在void loop()函數(shù)中進行數(shù)據(jù)的采集,其程序與5.1.2節(jié)中的部分程序一樣,數(shù)據(jù)采集之后,然后打開文件,將采集的數(shù)據(jù)寫入SD卡,由于單片機內(nèi)部有A/D轉(zhuǎn)換功能,因此寫入的程序是十進制數(shù)據(jù),寫完之后關(guān)閉文件,每間隔一定時間重復(fù)一次loop()中的內(nèi)容。

部分編譯如下:

byte dht11_dat[5];//用于緩存DHT11溫濕度數(shù)據(jù)

byte dht11_in;

byte i;

3.3采集存儲測試結(jié)果

圖7 采集存儲測試結(jié)果

由于采集的數(shù)據(jù)存儲在SD卡,所以通過計算機打開SD卡,可以看到數(shù)據(jù)的文件是M.TXT文件,其大小是10.7 KB (11,052字節(jié))。打開M.TXT文件,見下圖7,圖中H是濕度,某一時刻的濕度值是49.0%;T代表溫度,27.0是某一時刻的溫度值。

以上所述就是溫濕度采集存儲系統(tǒng)設(shè)計的系統(tǒng)軟件研究的整個過程。那么利用這個設(shè)計,我們給定設(shè)計環(huán)境后,可以在圖7的溫濕度數(shù)據(jù)提取,利用作圖軟件可以作出溫濕度的變化曲線。

[1] 王剛.溫室溫濕度控制系統(tǒng)設(shè)計[J].中國新技術(shù)新產(chǎn)品.2011(09).

[2] 陳呂洲.Arduino程序設(shè)計基礎(chǔ)[M].北京:北京航空航天大學(xué)出版社,2014.1.

Research on the system software of temperature and humidity acquisition and storage system

This paper introduces the testing process of temperature and humidity sensor,the SD card writing process of storage software and the design,program development and test results of the main control software.

temperature and humidity sensor;MCU

猜你喜歡
溫濕度串口單片機
溫濕度控制器在回收砂冷卻系統(tǒng)中的應(yīng)用
淺談AB PLC串口跟RFID傳感器的通訊應(yīng)用
基于單片機的SPWM控制逆變器的設(shè)計與實現(xiàn)
電子制作(2019年13期)2020-01-14 03:15:28
基于DSP的多路溫濕度監(jiān)測系統(tǒng)
基于單片機的層次漸變暖燈的研究
電子制作(2019年15期)2019-08-27 01:12:10
基于單片機的便捷式LCF測量儀
電子制作(2019年9期)2019-05-30 09:42:02
基于溫濕度控制的天氣預(yù)測裝置
電子制作(2018年11期)2018-08-04 03:26:02
蒸發(fā)冷卻溫濕度獨立控制空調(diào)系統(tǒng)的應(yīng)用
USB接口的多串口數(shù)據(jù)并行接收方法探索
基于藍牙串口適配器的GPS接收機與AutoCAD的實時無線通信
地礦測繪(2015年3期)2015-12-22 06:27:26
通化县| 池州市| 湟源县| 迁西县| 大理市| 五华县| 五常市| 延川县| 肇东市| 楚雄市| 北辰区| 余江县| 安龙县| 定州市| 吴桥县| 天长市| 滁州市| 扶余县| 吉林市| 九江市| 博兴县| 抚州市| 德清县| 涞水县| 乐业县| 长丰县| 绥中县| 和田县| 甘孜县| 封开县| 阜新| 西林县| 库伦旗| 民县| 宁乡县| 西藏| 镶黄旗| 鹰潭市| 无棣县| 博兴县| 民权县|