前言:尋找寫作靈感?中文期刊網用心挑選的物聯網下天氣識別系統設計探究,希望能為您的閱讀和創作帶來靈感,歡迎大家閱讀并分享。
摘要:文中將傳感技術、無線傳輸技術和Scikit-learn相結合,設計一種基于物聯網的智能天氣識別系統,可實時播報天氣情況。該系統采用DS18B20測溫模塊、DHT11濕度采集模塊收集溫濕度信息,通過ArduinoUNOR3開發板采集天氣信息,由CC2530模塊將采集到的溫度、濕度信息通過無線網絡傳輸給上位機,通過上位機的Scikit-learn訓練模型實現對天氣狀況的實時識別。實驗表明,所提系統可獲取當前小范圍地區較精確的天氣信息,實驗結果良好。
關鍵詞:物聯網;信息采集;Scikit-learn;機器學習;ArduinoUNOR3;天氣識別
0引言
隨著經濟快速發展,國內智能家電使用量不斷增加[1]。但目前智能家電的數據(天氣數據等)獲取形式較為單一[2],均通過網絡獲取。鑒于地域天氣多變且范圍廣[3],網絡數據存在精度不高的缺陷?;诖?,本文設計了基于物聯網的智能天氣識別系統,可獲取當前小范圍地區較精確的天氣信息,并提高智能家電決策效果,降低數據請求成本,更好服務于用戶。
1系統結構
智能天氣識別系統包括溫濕度數據采集系統、無線傳輸系統、上位機數據處理系統。
1.1溫濕度數據采集系統。溫濕度數據采集系統由DS18B20測溫模塊、DHT11濕度采集模塊組成。溫濕度傳感器連接ArduinoUNO開發板的數字量和模擬量輸入端口。ArduinoUNO是一款基于ATmega328P的微控制器開發板[4-5],擁有14個數字輸入/輸出引腳(其中6個可用作PWM輸出),6個模擬輸入引腳,及16MHz晶振時鐘、USB接口、電源插孔、ICSP接頭和復位按鈕。DS18B20測溫模塊[6]的測溫原理如圖1所示。圖中低溫度系數晶振的振蕩頻率受溫度影響較小,所產生的固定頻率脈沖信號輸送到減法計數器;高溫度系數晶振的振蕩頻率受溫度影響變化較大,所產生的信號作為減法計數器的脈沖輸入。此外,圖中還隱含有計數門,當計數門打開時,DS18B20會對低溫度系數振蕩器產生的固定頻率脈沖進行計數,完成溫度測量。DHT11的核心部件是濕敏電阻。當空氣中的水蒸氣吸附在感濕膜上時,DHT11的電子元件電阻率和電阻值發生變化,利用這一特性即可測量濕度。
1.2信息傳輸系統。信息傳輸系統采用ZigBee協議搭建無線傳感網[7]。CC2530是用于2.4GHzIEEE802.15.4、ZigBee和RF4CE的片上系統(SoC)解決方案[8-9],包含RF收發器、標準增強型8051CPU、系統內可編程閃存、8KBRAM等功能部件,能夠以較低的材料成本建立起超強網絡節點。本系統將ArduinoUNO開發板與ZigBee模塊通過串口連接,作為物聯網感知層的傳感器節點。ArduinoUNO開發板采集天氣信息并處理后,通過串口傳送給CC2530模塊,CC2530模塊將溫濕度數據信息通過無線網絡實時發送給協調器。USB接口與PC機連接,將接收的傳感器節點溫度、濕度信息通過串口發送給上位機系統。
1.3上位機數據處理系統。上位機數據處理系統的硬件設備可采用PC機或工控機。PC機、工控機均可通過USB口轉串口接收協調器的溫濕度信息,并應用Scikit-learn模型進行當前天氣狀況的識別。此外,PC機和工控機還可生成當日、當月天氣數據統計表并打印,便于使用者對天氣情況進行統計和管理。
2系統軟件設計
智能天氣識別系統軟件分為傳感器信息采集軟件、無線通信軟件、信息處理軟件(天氣識別軟件)。
2.1傳感器信息采集軟件。傳感器信息采集軟件使用ArduinoIDE編程語言開發[8]。由于溫濕度均為慢變參數,因此設定程序采樣周期為5s;Arduino串口通信速率設置為9600b/s,Arduino通過串口將采樣數據發送給CC2530芯片。程序通過導入Arduino資源包,引用DHT11庫函數,以便在程序中調用相關參數。#include<DallasTemperature.h>#include<dht11.h>定義引腳,將1wire數據總線與IO4連接;定義溫度、濕度引腳為2號引腳,并實例化一個對象。#defineONE_WIRE_BUS4#defineDHT11PIN2dht11DHT11Arduino數據采集及傳輸流程如圖2所示。
2.2無線通信。無線通信軟件包括協調器軟件和傳感器節點軟件。2.2.1協調器程序協調器負責組建無線傳感網,并接收傳感器節點信息,通過USB接口將信息傳輸給PC機。協調器程序流程如圖3所示。2.2.2傳感器節點程序CC2530模塊通過串口接收Arduino采集的數據信息,并通過無線網傳輸。傳感器節點程序流程如圖4所示。
2.3信息處理軟件。協調器通過RS232串行協議通信方式將天氣信息數據傳輸給PC機,PC機將通過串口小程序接收的溫度、濕度數據存入MySQL數據庫。保存到MySQL數據庫的部分溫度、濕度數據如圖5所示。2.3.1信息數據清洗與數據標注(1)信息數據清洗鑒于采集的天氣信息數據龐大(每天可收集17280條數據),且一天之中天氣不會發生跳變,故本文采用Python對采集到的數據進行處理[10],去掉重復數據。SQL去重語句為:SELECTid,temputer,humidity,updata_timeFROMtable1GROUPBYtemputer,humidity。經去重處理,所采集的天氣信息數據減少到2290條。去重后的部分數據如圖6所示。為使模型效果更好,本文采用數據增強策略,即對現有數據(溫度±1℃、濕度±5%RH)處理后,再進行一次數據清洗,最終得到含有800個數據的訓練集。(2)數據標注溫濕度信息數據清洗之后,根據數據產生時間,及時間所對應天氣情況對其標注,即在收集溫度、濕度數據的同時記錄每個時間段的天氣情況。如:某時間段下雨,則標注Rainy;如果為雨后天晴,則標注Sunny。天氣標注數據主要通過中國天氣網獲取。從中國天氣網獲取的部分天氣數據如圖7所示,獲取的數據中包含溫濕度數據及天氣情況,可作為標注好的數據直接使用。2.3.2構建SVM分類器并訓練模型構建SVM分類器,即支持向量機。它是Scikit-learn中一組支持分類、回歸、異常值檢測的監督學習方法。本系統采用SVM的fit(x,y)方法,只需要輸入數據集x和x對應的標簽y即可。構建SVM分類器的程序框架如圖8所示。訓練所使用數據包含4個標簽,即Sunny、Cloudy、Rainy、Snowy。為便于數據加載,通過以下程序將標簽轉換成數值:defweather_type(s):weather={b'Sunny':0,b'Cloudy':1,b'Rainy':2,b'Snowy':3}returnweather[s]運行的部分訓練數據見表1所列。
3結語
智能天氣識別系統對作者所在地區的天氣信息進行實時采集,用訓練好的模型進行天氣識別,將得到的模型輸出結果與當時的天氣相比對,發現多組實驗結果良好。實驗效果如圖9所示。智能天氣識別系統可獲取所在地區較精確的天氣信息,便于智能家居提高決策效率,降低數據請求成本,應用前景廣闊。
作者:鄭博培 李媛 單位:北京聯合大學機器人學院