包括電路圖,源碼設(shè)計(jì)和上位機(jī)設(shè)計(jì)
0.png (43.99 KB, 下載次數(shù): 60)
下載附件
2018-12-10 20:53 上傳
ARM-STM32校園創(chuàng)新大賽
題 目: 基于STM32的微型分布式氣象站
視頻觀看地址:http://v.youku.com/v_show/id_XNjEzMzU4NTYw.html
本設(shè)計(jì)在充分考慮到現(xiàn)有天氣氣象預(yù)報(bào)的弊端后,提出了一種氣象預(yù)報(bào)形式。采用一些傳感器將氣象以及環(huán)境信息進(jìn)行采集,并通過(guò)相關(guān)的算法對(duì)氣象驚醒預(yù)報(bào)。得到的預(yù)報(bào)信息會(huì)通過(guò)微博發(fā)送出去,是的人們獲取氣象信息更加的方便。且本設(shè)計(jì)是對(duì)短時(shí)間的氣象進(jìn)行預(yù)報(bào)盡管簡(jiǎn)單但是能夠很好的對(duì)現(xiàn)有大眾化的氣象預(yù)報(bào)進(jìn)行了補(bǔ)充。
1. 引言氣象信息,在當(dāng)代社會(huì)人們的生活與工作中起著相當(dāng)重要的作用。實(shí)時(shí)、準(zhǔn)確、便捷的氣象服務(wù)便于人們更好的進(jìn)行時(shí)間安排。然而,現(xiàn)在普遍的氣象服務(wù)(比如電視天氣預(yù)報(bào)節(jié)目)實(shí)時(shí)性差、預(yù)報(bào)的地區(qū)范圍過(guò)大。不能很好的服務(wù)廣大用戶(hù)。當(dāng)然,現(xiàn)有一個(gè)便攜式的個(gè)人氣象服務(wù)器,但是其價(jià)格昂貴且不便于攜帶。 所以,我們萌發(fā)設(shè)計(jì)一個(gè)成本低、實(shí)時(shí)性好的微型氣象服務(wù)站。此服務(wù)站,由多個(gè)氣象采集終端組成氣象采集的小型網(wǎng)絡(luò)再通過(guò)無(wú)線匯總到上位機(jī)上上位機(jī)通過(guò)發(fā)微博的方式進(jìn)行數(shù)據(jù)共享。本設(shè)計(jì)的創(chuàng)新點(diǎn)在于,是對(duì)短時(shí)間的氣象預(yù)報(bào)既能夠較為準(zhǔn)確的預(yù)報(bào) 半個(gè)小時(shí)后到一兩個(gè)小時(shí)間的降雨信息。填補(bǔ)了普通氣象預(yù)報(bào)時(shí)間跨度大的問(wèn)題。(舉個(gè)例子,普通氣象預(yù)報(bào)預(yù)報(bào)明天陰轉(zhuǎn)小雨 但是不能夠準(zhǔn)確的預(yù)報(bào)是那個(gè)時(shí)段下雨,本設(shè)計(jì)可以提前一到半個(gè)小時(shí)預(yù)報(bào)降雨情況實(shí)時(shí)性極好) 本設(shè)計(jì)還添加了對(duì)空氣質(zhì)量的監(jiān)測(cè),即對(duì)空氣中微小灰塵的監(jiān)測(cè)(所選的灰塵傳感器可對(duì)0.8微米以上的微小粒子進(jìn)行檢測(cè),故其中包含了人們關(guān)心的PM2.5 與PM10)。 2. 系統(tǒng)方案詳細(xì)說(shuō)明系統(tǒng)設(shè)計(jì)的整體思路,用模塊的形式指出系統(tǒng)設(shè)計(jì)的各個(gè)關(guān)鍵點(diǎn),并指出其中使用的關(guān)鍵算法 (1)系統(tǒng)的總體設(shè)計(jì) 本設(shè)計(jì)主要分為三個(gè)部分,采集節(jié)點(diǎn)、集中器與上位機(jī)。三部分協(xié)調(diào)工作共同完成整個(gè)任務(wù)。采集節(jié)點(diǎn),是本系統(tǒng)的關(guān)鍵部分,它以STM32F4Discovery為控制核心,通過(guò)溫濕度傳感器DHT11、氣壓傳感器BMP085以及灰塵傳感器GP2Y1010對(duì)相關(guān)信息進(jìn)行采集。然后,通過(guò)氣象預(yù)報(bào)算法對(duì)降雨情況進(jìn)行大概的預(yù)報(bào)。最后,對(duì)相關(guān)信息打包發(fā)送出去。集中器,主要進(jìn)行數(shù)據(jù)的穿法。上位機(jī),承擔(dān)著人機(jī)交互工作并將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)定時(shí)發(fā)微博。 采集節(jié)點(diǎn),通對(duì)各個(gè)傳感器的數(shù)據(jù)讀取得到相關(guān)的氣象與環(huán)境信息。當(dāng)采集到一手的氣象信息后,會(huì)對(duì)數(shù)據(jù)進(jìn)行處理并根據(jù)氣壓值采用合適的算法進(jìn)行降雨可能性的預(yù)報(bào)。采集點(diǎn)會(huì)定時(shí)的向集中器發(fā)送數(shù)據(jù),發(fā)送的數(shù)據(jù)打包成一個(gè)自己定義的數(shù)據(jù)幀格式。 集中器,負(fù)責(zé)將各個(gè)采集節(jié)點(diǎn)采集上來(lái)的數(shù)據(jù)集中起來(lái),并定時(shí)的通過(guò)串口發(fā)送到上位機(jī)。集中器內(nèi)部開(kāi)辟了兩個(gè)字節(jié)的存儲(chǔ)空間用來(lái)存儲(chǔ)上位機(jī)發(fā)送過(guò)來(lái)的命令,如何在更具命令來(lái)做出相應(yīng)的反應(yīng)。 上位機(jī),會(huì)對(duì)上傳上來(lái)的數(shù)據(jù)進(jìn)行存儲(chǔ)并且會(huì)定時(shí)的發(fā)送微博實(shí)現(xiàn)資源的共享。使用上位機(jī)時(shí)必須合理的完成配置,特別是串口以及微博授權(quán)的配置。對(duì)于微博的發(fā)送可以在上位機(jī)上選擇定時(shí)發(fā)送(一般如此選擇),為了避免造成刷屏的尷尬我沒(méi)設(shè)置了手動(dòng)發(fā)送微博的選項(xiàng)。上位機(jī),除去以上功能外還有變化趨勢(shì)分析以及歷史數(shù)據(jù)查詢(xún)的功能。 3. 系統(tǒng)硬件設(shè)計(jì)(1)硬件系統(tǒng)框架圖 1)整體硬件框圖 采集節(jié)點(diǎn)的硬件系統(tǒng),主要由控制中心、溫度采集模塊、氣壓采集模塊、空氣質(zhì)量模塊與無(wú)線通信模塊組成。在PC端有一個(gè)無(wú)線數(shù)據(jù)接收設(shè)備即集中器,集中器是由STM32F107+nRF24L01架構(gòu)實(shí)現(xiàn)。整體結(jié)構(gòu)圖如圖1所示。 
圖1
2)采集終端硬件
本模塊是以stm32f4discovery為控制核心,傳感器方面使用溫濕度傳感器DNT22對(duì)溫度以及濕度進(jìn)行測(cè)量,使用BMP085氣壓傳感器對(duì)氣壓進(jìn)行測(cè)量,使用夏普灰塵傳感器GP2Y1010AU0F對(duì)空氣質(zhì)量 進(jìn)行檢測(cè)。并通過(guò)LCD12864進(jìn)行顯示。 
圖2
3)通信部分硬件框圖 通信部分,使用nRF24L01進(jìn)行多點(diǎn)的無(wú)線通信。 
圖3
GP2Y1010的LED控制端要求十分的嚴(yán)格必須按照原理圖給出的來(lái)做。

圖4
BMP085管腳較多,但本次設(shè)計(jì)僅使用I2C通信即可。當(dāng)然,去耦電容也是必須的!

圖5
4. 系統(tǒng)軟件設(shè)計(jì)- 采集節(jié)點(diǎn)的軟件設(shè)計(jì)介紹
采集節(jié)點(diǎn),是本次設(shè)計(jì)最為關(guān)鍵的部分。其主要完成了對(duì)各個(gè)傳感器的信息的采集、數(shù)據(jù)處理和信息的定時(shí)發(fā)送。采集節(jié)點(diǎn)上電后,首先對(duì)各個(gè)傳感器及板上資源初始化。然后,會(huì)循環(huán)讀取各個(gè)傳感器的測(cè)量值。最后,判斷定時(shí)時(shí)間是否滿足條件。如定時(shí)時(shí)間到,通過(guò)無(wú)線發(fā)送數(shù)據(jù)。
1)采集節(jié)點(diǎn)主流程介紹 主函數(shù)流程圖如下: 
圖6 初始化函數(shù)流程圖: 
圖7 氣象預(yù)報(bào)算法介紹 本設(shè)計(jì)是根據(jù)氣壓值對(duì)降雨情況預(yù)報(bào)的。首先,在晴天情況下測(cè)量安裝點(diǎn)的氣壓信息。根據(jù)氣象學(xué)知識(shí)我們知道,晴天的情況下氣壓最高。陰天以及降雨的情況下氣壓會(huì)明顯的降低,且如果在半小時(shí)內(nèi)氣壓發(fā)生明顯時(shí)降雨可能性會(huì)明顯變大。于是,我們就可以根據(jù)氣壓值得大小即可預(yù)報(bào)降雨的可能性。
- 采集節(jié)點(diǎn)關(guān)鍵外設(shè)驅(qū)動(dòng)函數(shù)介紹
nRF24L01驅(qū)動(dòng)函數(shù)介紹: nRF24L01驅(qū)動(dòng)主要是將數(shù)據(jù)通過(guò)SPI寫(xiě)入發(fā)送寄存器,并根據(jù)狀態(tài)寄存器來(lái)判斷是否發(fā)送成功!流程圖如下。

圖8
BMP085驅(qū)動(dòng)函數(shù)介紹: BMP085可以同時(shí)采集溫度和氣壓值,對(duì)于溫度的采集僅存在一種精度。但是,氣壓的精度卻存在低、中、高三中精度。軟件中的延時(shí)要求也是非常嚴(yán)格的。流程圖如下。

圖9
GP2Y1010驅(qū)動(dòng)函數(shù)介紹: GP2Y1010關(guān)鍵點(diǎn)就在于嚴(yán)格的時(shí)間延時(shí)!必須在280ns讀取才能得到正確的數(shù)據(jù)。 
圖10
集中器主要將通過(guò)無(wú)限接收來(lái)的數(shù)據(jù)通過(guò)串口發(fā)送到PC端!在軟件中設(shè)計(jì)了1個(gè)數(shù)組2個(gè)字節(jié)用來(lái)接收上位機(jī)發(fā)送的命令進(jìn)而控制集中器的運(yùn)行。流程圖如下。 
圖11
上位機(jī)主要對(duì)發(fā)送上來(lái)的數(shù)據(jù)實(shí)時(shí)的顯示、定時(shí)的發(fā)送微博與儲(chǔ)存到數(shù)據(jù)庫(kù)。當(dāng)然,還包括一些附屬功能比如數(shù)據(jù)的查詢(xún)以及變化趨勢(shì)的分析。 上位機(jī)軟件,編寫(xiě)的難點(diǎn)在于微博的發(fā)送與串口數(shù)據(jù)的讀取處理。微博的發(fā)送要經(jīng)過(guò)網(wǎng)絡(luò),網(wǎng)速的好壞對(duì)于軟件的影響較大。為力避免網(wǎng)速差而造成的界面卡頓現(xiàn)象我們采用了多線程技術(shù)。 C#的串口操作軟件數(shù)據(jù)讀取不及時(shí)會(huì)造成嚴(yán)重的丟包現(xiàn)象。為了解決這個(gè)問(wèn)題,在串口觸發(fā)函數(shù)內(nèi)僅對(duì)數(shù)據(jù)進(jìn)行讀取不對(duì)數(shù)據(jù)進(jìn)行任何處理。另外,開(kāi)辟一個(gè)線程專(zhuān)門(mén)對(duì)數(shù)據(jù)進(jìn)行處理。
5. 系統(tǒng)創(chuàng)新我們的主要?jiǎng)?chuàng)新點(diǎn)主要有3處: - 對(duì)短時(shí)間的氣象預(yù)報(bào)能夠較為準(zhǔn)確的預(yù)報(bào)一個(gè)小時(shí)左右的降雨信息,彌補(bǔ)了現(xiàn)有天氣預(yù)報(bào)時(shí)間跨度長(zhǎng)的問(wèn)題!
- 添加了對(duì)空氣質(zhì)量的監(jiān)測(cè),包含了人們關(guān)心的PM2.5和PM10灰塵檢測(cè)!
- 位機(jī)接收數(shù)據(jù)后將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)并在PC上顯示,再將數(shù)據(jù)選擇性的發(fā)微博!
6. 評(píng)測(cè)與結(jié)論系統(tǒng)主要通關(guān)較長(zhǎng)時(shí)間的運(yùn)行測(cè)試,系統(tǒng)對(duì)于溫濕度、氣壓以及灰塵濃度的測(cè)量比較精準(zhǔn)。但是由于對(duì)空氣質(zhì)量的測(cè)量只采用的灰塵污染物濃度,而沒(méi)有采集其他污染物的量造成 空氣質(zhì)量AQI的計(jì)算不是很精準(zhǔn)。對(duì)于降雨可能性的預(yù)報(bào),由于數(shù)學(xué)模型建立的較為簡(jiǎn)單過(guò)預(yù)報(bào)的不是十分的精準(zhǔn)。存在誤報(bào)顯現(xiàn),但是降雨的情況全能預(yù)報(bào)出來(lái)。故預(yù)報(bào)結(jié)果還能接受。 本次設(shè)計(jì),基本滿足各方面的要求。預(yù)報(bào)功能得以實(shí)現(xiàn),但是未來(lái)還有很大的完善空間。未來(lái),我們考慮添加位置信息,通對(duì)往年相同位置的氣象情況進(jìn)行對(duì)比完善我們的預(yù)報(bào)精度。
附錄上位機(jī) 
采集點(diǎn)

集中器

1.外部晶振(HSE)為8M。
2.在system_stm32f4xx.c中的SystemInit()函數(shù)開(kāi)始添加了FPU控制項(xiàng)。
3.預(yù)定義USE_STDPERIPH_DRIVER,STM32F4XX (不適用FPU)
USE_STDPERIPH_DRIVER,STM32F4XX,__FPU_PRESENT=1,__FPU_USED =1 (使用FPU)
4.只添加了標(biāo)準(zhǔn)外設(shè)庫(kù),DSP(CMSIS內(nèi))、USB以及ETH庫(kù)均為添加。
單片機(jī)源程序如下:
- #include "stm32f10x.h"
- #include "bsp.h"
- uint8_t cmIndex=0;//控制索引(0——1)
- uint8_t adIndex=0;
- uint8_t displaytime=0;
- uint8_t rbuf[11]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
- uint8_t TxBuf[6][11]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- };
- uint8_t CM_Box[2]={0x00,0x00};//開(kāi)始信號(hào) 與節(jié)點(diǎn)數(shù)目
- int main()
- {
- uint8_t indexbuf=0;
- uint8_t i=0;
-
- BSP_Init();
- // USART_SendData(USART2,CD_Box[1]);
- // while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET) ;
-
- while(1)
- {
- while(CM_Box[0]==0xfa)
- {
- if (NRF24L01_RxPacket( rbuf )==0)
- {
- indexbuf=rbuf[0];
-
- for(i=0;i<11;i++)
- {
- TxBuf[indexbuf][i]=rbuf[i];
- }
-
- }
-
- if(displaytime)
- {
- displaytime=0;
- for(adIndex=0;adIndex<CM_Box[1];adIndex++)
- {
- for(i=0;i<11;i++)
- {
- USART_SendData(USART2,TxBuf[adIndex][i]);
- while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET) ;
- }
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
1.基于STM32的氣象站預(yù)報(bào)系統(tǒng)設(shè)計(jì)(硬件、源碼、上位機(jī)).rar
(1.91 MB, 下載次數(shù): 113)
2018-12-10 20:37 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|