物联网下天气识别系统设计探究

物联网下天气识别系统设计探究

摘要:文中将传感技术、无线传输技术和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所示。智能天气识别系统可获取所在地区较精确的天气信息,便于智能家居提高决策效率,降低数据请求成本,应用前景广阔。

作者:郑博培 李媛 单位:北京联合大学机器人学院