摘 要
随着社会的快速发展,气象对人们的日常生活也越来越重要。气象主要有温度、湿度、光照强度、大气压强、
风速、降雨量等一些元素。本文主要以温度、湿度、光照强度、大气压强及风速为监测对象来进行研究。由于气象
学是不可预测的,人类根本无法自行分析,需要借助仪器进行研究,因此有必要使用新技术实时监测天气状况,以
便采取适当措施防止或解决事故。
首先,以主控STM32单片机为基础,通过DHT11传感器采集温度和湿度的数据,通过BMP280传感器采集压强数据,
通过三杯式风力传感器采集风速的数据和光敏电阻传感器模块来采集光照强度的数据,并且增加了按键,目的是了实现对温度范围和湿度范围的设置,如果系统传感器采集到的温度信号和湿度信号超出了设定范围,系统会触发
报警信号,蜂鸣器开始发出报警,这是一个多功能一体的气象监测系统。实物的最后运行的结果表明,所设计的单
片机气象监控系统能够满足所要求的功能。
关键字:气象,单片机,传感器,监测
1 绪论
1.1 研究的背景及意义
气象监测系统(又称自动气象站)是专门监测气象环境而开发的,通过DHT11传感器实现对环境温度和湿度信号的
采集,通过BMP280传感器完成对环境压强信号的采集,通过三杯式风力传感器实现对环境风速信号的采集,通过光
敏电阻模块对光照信号进行采集。基于本文设计的气象监测系统实现对环境温度湿度、风速、大气压强及光照强度
等气象元素。能够帮助人们实时的了解天气变化,以便他们能够在日常生活中采取有效措施应对这些变化。
随着经济水平的不断提升,人们的生活水平得到很大提高。同时,人们对于天气信息的精度要求也在不断提
高,因此气象监测需要不断利用新技术而达到需求[3]。而我国的目前的气象监测系统需要不断地完善。
1.2 国内外研究现状
1.2.1 国外研究现状
现在的大气现象和气候变化,很大程度上关系到人类的生产和生活。在该领域范围内,美国德国和芬兰具有了
较高的技术水平,欧美国家通过不断的技术更新提出了更加精密的气象监测系统,而且很多的产品已经进入了我国
市场[4]。但是由于其价格较高、后期的技术支持和售后比较复杂,导致整体运营成本较高,在我国没有得到大范围
的应用。
最近几年以来,随着经济水平的发展,各国都在加大对气象监测技术研究的投入。比如日本和以色列,基于本
国的基本情况,增大了该方面的推进力度,并取得了巨大的成就[5]。对气象的温度、光照强度、大气压强、风速、
降雨量等实现了有效监测。但也有一些领域的应用不够完善,比如在海洋环境中,气象系统的监测不够多元化,是比较单一的。想要在广阔的海域中实现全方位立体化的监测还是存在一些困难,因为各个系统的设备各成一体,所
以获取的信息数据是不能够集中的。而且监测系统的集成性差,想要实现统一的管理还是比较麻烦的[9]。
1.2.2 国内研究现状
在全球经济一体化、世界各国大力发展国民经济的今天,气象观测系统的逐步完善和研发在气象仪器方面有别
于国外一些发达国家气象观测的快速发展。在环境监测领域内,对于气象数据的监测、预测以及监测设备的研究工
作成为了重要组成部分[17]。随着监测技术和方式的不断优化,气象监测方式已经从传统的手动监测逐渐转向了自
动监测。相比于传统的手动监测方式,自动监测系统的工作稳定性更高,精度更加精确,适用范围也更大,能够实
现无人看守的优势,在农业、水文学、军事、交通道路、机场、气象科研中也广泛使用[8]。
当前,我国在地面气象监测过程中,主要的监测对象有湿度、温度、压力、风速、空气能见度、辐射强度、蒸
发温度以及水面状况[8]等参数。基于自动监测设备可以对上述的各个参数实现精准的采集,但是对于其他的一些目
标对象只能通过人工的方式去实时测量。
而国内对于气象监测系统在高速公路方面的应用虽然有一些研究基础,但是也不够完善。周建东[10]等人的发
现表明,气象对于高速公路的交通越来越为重要。高速公路会受到降雨降雪量、路面结冰情况等因素的影响,而且
气象污染物的产生,对于工作在高速公路的人员,也会影响其身体健康状况。因此加快国内的气象监测服务愈发重
要。准确及时的气象信息,可以提高道路的安全性。
1.3 研究的主要内容
本文主要以气象监控系统为研究对象,系统通过读取相关气象数据,并通过OLED显示出来。并掌握单片机的基
本工作原理及常见气象传感器的工作原理和数据传送方式。在功能方面,本文设计的气象监控系统具有如下所示的
几个功能:
1、采集温度及湿度数据的功能。外界环境的温度及湿度通过DHT11传感器获取。
2、能够实现对光照的采集。在本文设计的系统中添加了光敏电阻传感器来感知外界光照强度的变化。
3、采集大气压强数据的功能。通过BMP280传感器感受外界大气压强的变化。
4、采集风速数据的功能。通过三杯式风速传感器感应风的速度。
5、设定温湿度。通过按键器手动设置各项指标的范围,根据所采集的数据与设定的范围值进行比较,若超出所设的
范围值,蜂鸣器则发出警报提示音。
通过设计上述的几个功能,本文完成了该气象监控的整体设计,在最后的测试环节中,本文也对系统的基本功
能进行了测试,测试结果表明,系统能够实现上述的基本功能,提供一个准确度高的气象监控系统。
1.4 论文的章节安排
本文主要涉及到到五个章节的内容,每一个部分的研究内容如下:
第一章对气象监控系统当前的发展现状以及背景进行简要介绍,并对监测设备的发展情况进行了总结,同时也
叙述了本设计的主要研究内容。
第二章对气象监控系统的方案设计,同时对硬件电路的选型和方案做简要对比,选择一套性价比高、可靠性强
的硬件。
第三章对气象监控系统的系统硬件部分进行了简要介绍。对于监测系统来讲,最为关键的是硬件设备,比如MCU
选择、显示电路、报警系统、复位电路以及时钟电路等。
第四章对气象监控系统的软件程序进行流程分析。
第五章是对实物的演示,完成电路板的焊接以及对系统软件程序的调试,通过系统功能演示的方式排查问题
点,并对其进行总结。
2 整体设计方案
2.1设计方案
气象监控系统的设计主要分为硬件电路设计和软件程序编写,硬件电路设计是根据所需要的的文献资料并结合
本专业知识确定所涉及到的元器件型号,根据元器件型号的尺寸和封装在AD上绘制出元器件的电路原理图,这一过
程中需要考虑到兼容性问题;软件方面设计需要遵循软件编程的基本原则,进行软件部分的编辑、编译和调试工
作。
基于单片机的气象监控系统结构如图2.1所示。本系统由STM32F103C8T6单片机作为主控制器,设置3颗独立按键
输入,一块0.96寸OLED液晶显示器,温湿度采集模块、大气压强传感器模块、报警模块、光照采集模块以及电源电
路、复位电路等组成。
图2.1 基于单片机的气象监控系统结构框图
2.2元器件选型
元器件的选型在硬件电路设计中也是尤为重要的,根据所需要的功能选择合适的元器件至关重要。元器件的选
型主要包括主控芯片选型、温湿度传感器、光照强度传感器、压强传感器及风速传感器。
2.2.1单片机选型
单片机是主要负责监测系统的核心功能,作为监测系统的核心部件,基于外部设置的各种信号传感器获取到输
入信号。当前市场上的单片机种类繁多,所以在选择的过程中要基于目标功能需求进行分析,确定最适合的单片机
型号。通常来讲,单片机的性能越强,其信号处理能力以及存储能力也就越强,但是对应的成本也就越高。
STM32单片机属于ARM内核系列,相比于传统的51系统单片机,具有很多额外的功能资源,比如对于USB控制器
[18]。该类型的单片机其程序是模块化的,功能接口相对简单。处理速度快同时保持高集成度和开发简易的特点。
其工作电压是3.3V,部分引脚为5V耐压。
2.2.2温度湿度传感器选型
对于气象监测来讲,温度和湿度是最基本的物理量,我们生活的环境都与温湿度有关系。在各种信号采集器
中,温度传感器是使用最多的。温度传感器主要分为三种:传统分立传感器,如热电偶、热敏电阻、热敏二极管等。
8
DHT11是一类应用最多的温湿度传感器,主要原因是器校准数字输出的特殊功能。该类型的传感器能耗低、体积小,
能进行长达二十米以外的信号传输。单线制的串行接口,使系统集成更加简便。它的湿度测量范围在20%~95%,误
差在-5%~5%左右;温度测量范围在0°C~50°C,测量误差在-2%~2%之间。工作电压在3.3V~5V。
该类传感器的工作原理如下:通过特定装置实现温度和湿度信号的采集,然后对信号进行电信号转化,以电信
号的形式输出。当前在市面上常见的温湿度传感器都是电阻类的,完全能够满足大部分场景下的需求,所以在各个
行业内得到了广泛的应用。
2.2.3光照强度传感器选型
该类型的传感器用于对光照强度的采集,工作原理是将光照信号转换为电压信号或电流信号。其主要加工材料
是具有高灵敏度的感光元件组成,可以对自然光和人工照明强度进行监测,广泛应用于气象站、农业、林业、温室
大棚、养殖、建筑、实验室、城市照明等需要监测光照强度的领域。光照度的测量单位为Lux,一般的工作温度是-
30℃到70℃,输出信号有三种,分别是电压信号(0-2V,0-2.5V,0-5V,0-10V);电流4-20mA;RS485。
,暗 光敏电阻是用硫化镉或硒化镉等半导体材料制成的特殊电阻器,在没有光照的环境时,几乎呈高阻态[19]
电阻数值较大。
2.2.4压强传感器选型
BMP280是一种移动监测设备的专用传感器。这种类型的传感器会经过紧密的密封工序,由于器能耗低和尺寸
小,所以应用范围很大。BMP280类型的传感器采用了博世成熟的压阻式传感器技术制造而成,线性度高、灵敏度
强,而且工作过程的稳定性较高,具有很好的EMC稳健性。通过多种工作模式的组合选择,实现了灵活性特点,可以
对滤波性和分辨率方面进行优化。气压的测量范围在300-1100hPa。
2.2.5风速传感器选型
风杯式风速计是最常见的一种风速计。三个抛物形或半球形的空杯按照一致性方向的规律排列而成,两两之间
的尖角为120°,通过安装架构成一个可以整体转动的轴卜。在外部风力条件下可以绕着轴转动,风速越大,转速越
高。通过触点和光电计数器实现对转速的记录。在转动的过程中,会带动多齿轮的转盘转动,通过下部设置的光敏
三极管对来自发光二极管照射下的光线进行接受。从而形成了与转速成正比的频率信号,通过对其进行计数,换算
后得到实际风速值。
三杯式风速传感器的材质为优质ABS材质、硬度高、柔韧性好,具有抗压抗腐蚀能力,而且使用的寿命长。使用
时要注意不能被雨水浸泡,而且不能安装在灰尘多或有易燃气体环境中。
2.3本章总结
本章节阐明了气象监控系统的设计原则,概括系统的总体设计,及硬件电路设计中各元器件的选型。
3 硬件电路设计
3.1 系统硬件原理图
该气象监控系统选用STM32F103C8T6为控制器,通过DHT11传感器采集温度和湿度的数据,通过BMP280传感器采
集压强数据,通过三杯式风力传感器采集风速的数据和光敏电阻传感器模块来采集光照强度的数据,并且增加了按
键,目的是为了实现对温度范围和湿度范围的设置,如果系统传感器采集到的温度信号和湿度信号超出了设定范
围,系统会触发报警信号,蜂鸣器开始发出报警。各功能的数值参数通过OLED显示,系统的工作电压为直流5V,原
理图如图3.1所示。
图3.1 基于单片机的气象监控系统原理图
3.2 MCU选择
本系统采用主流STM32F103系列微控制器,设备端所需实现功能较大,程序代码量大,选用STM32F103C8T6控制
器,该微控制器为32位处理器,最高72MHz工作频率,ROM 64KB,20KB RAM足够本系统使用,性价比较高。
由于该控制器为LQFP48封装,手工焊接非常困难,因此本系统设计时选用最小系统板。该模块资源如图3.2所示。
图3.2 STM32F103C8T6最小系统板
3.3 电源电路
本系统使用的STM32F103微控制器芯片供电电压为DC3.3V,由于市面上大多数可选择的电压皆为USB标准,其供
电电压为直流5V,所以在本文设计的系统中采用的是输入电压为DC5V电源,通过电路板对电压进行转化为输出。该
部分电路如图3.3所示,外部USB电源经插头引入系统,后降压为DC3.3V供系统芯片使用。
3.4 时钟源电路
MCU运行,需要外部提供一个稳定的时钟源,作为输入为MCU提供一个时间基准。进而获得机器周期,使单片机
能够正常执行指令。
本文监测系统中的时钟源电路如下图3.4所示。在该电路中设置有石英晶体振荡器,其震荡频率为8MHz,通过与
电容并联构成自激振荡器,并联的两个电容的电容值为20pF。以此作为外部高速时钟源,该振荡器产生的时钟信
号,再经过单片机内部分频,便可以产生系统运行所必须的机器周期信号。
同时,系统中还设置了外部低速时钟源,采用的是32.768kHz的时钟,过程中通过系统的程序进行选择即可。
3.5复位电路
本系统的MCU的复位引脚为为第7号引脚,复位条件为向该引脚输入不少于1.5ms低电平,MCU即复位。一般情况
下,系统启动第一时间要求MCU能够自动复位,所以需要在系统电路中设置一个自动复位的电路。该电路具体如下图
3.5所示,具有自动复位和手动复位两种功能。在系统上电之后,对电容进行充电,此时系统的复位引脚触发低电
平,系统开始复位。经过一段时间,电容充电完成,复位引脚直接接VCC,系统正常运行。如需手动复位,只需将
SW1按钮按下,复位引脚接经电阻R23接地,系统产生复位,当松开SW1按键后,复位引脚恢复接VCC,系统正常运
行。
3.6键盘电路
本系统一共需要3个按键,考虑到内部的GPIO资源充足,所以本文系统采用了独立按键的设计形式。简单的讲,
就是每一个按键都会占用一个GPIO,一共占用3个GPIO资源。STM32F103的GPIO引脚内部自带上拉电阻,因此大大简
化了设计。该部分电路如图3.6所示,一端接GND,另一端经单片机内部上拉电阻接3个GPIO。系统监测到有按键按下
后,按键对应的GPIO触发低电平,系统会对整个键盘对应的资源进行扫描,确定触发低电平的位置,实现对应的功
能。
3.7 显示电路
本系统显示单元采用0.96寸 OLED液晶显示屏,该显示屏为128x64行列点阵是液晶,显示亮度高非常清晰,液晶
驱动芯片采用了SSD1306芯片,其数据接口形式为I2C接口,便于与MCU进行连接。该部分电路如图3.7所示。供电电
压采用DC3.3V,I2C时钟和信号线分别接GPIO PB6和PB7,利用MCU内部的硬件I2C1与液晶进行通信。
3.8 报警电路
在本文系统中设置的报警电路中采用了蜂鸣报警器,该报机器的需求电压为3.3V,但是由于GPIO的负载能力不
足,所以很难直接驱动蜂鸣器。因此在本文中设计了一个三极管进行驱动。其具体驱动电路如下图3.8所示。其基极
与MCU的PB15进行连接实现控制端的功能。如果MCU触发高电平信号,此时三极管会被导通,触发报警器工作;如果
MCU发出的是低电平信号,蜂鸣器会停止工作。
3.9温湿度传感器
采集温湿度的传感器类型很多,常见的传感器形式有热电偶、铂电阻、DS18B20等,但是从工作原理上可以分为
数字式和模拟式,数字式的接口电路简单,读取方便无需转化,模拟式的需要设计调理电路和转化运算。本系统设
计时为了使系统简单高效,选用数字式传感器DHT11,该传感器为单总线传输,可同时获得温度和湿度两个数据。该
部分电路如图3.9所示,供电电压采用DC3.3V,总线空闲为高电平,因此接上拉电阻R3。MCU对应GPIO PB9对传感器
进行读写操作。
3.10 风力传感器
本系统设计采用三杯式风力传感器,当系统监测到存在水平运动的风流时,系统开始转动,带动内部电机开始
输出电压,通过MCU对输出的电压进行判断,确定风速。其工作电路图如下图3.10所示。由于传感器输出的信号为电
压信号,所以需要通过内部的ADC进行转化和测量。风速与电压成线性关系,风速F=0.027V。
3.11 光照传感器
本系统设计的光照传感器采用光敏电阻,工作电压为DC3.3V。经过R-V转换输出电压信号。利用MCU内部ADC转换
进行测量。光照值与电压变化成反向相关,光照越强,输出电压越低。该部分电路如图3.11所示。
3.12 大气压强传感器
本系统对大气压强进行测量时,采用的传感器是BMP280。作为一种移动应用专用的绝对压力传感器。BMP280类
型的传感器采用了博世成熟的压阻式传感器技术制造而成,线性度高、灵敏度强,而且工作过程的稳定性较高,具
有很好的EMC稳健性。为了实现模块的简化,博世传感器的插接模块是一种设置有BMP280传感器的电路板。通过简单
的插座轻松接入传感器的引脚。该部分电路如图3.12所示。I2C时钟和信号线接MCU PB10和PB11引脚,由于
STM32F103 GPIO开关速度可以达到最高50MHz,因此用GPIO模拟I2C时序。
3.13 本章总结
本章节主要介绍了气象监控系统硬件的主控制器的工作原理,并描述了电源电路、时钟源电路、复位电路、键
盘电路、显示电路及报警电路。概述了温湿度传感器、风力传感器、光照传感器及大气压强传感器的工作原理。
电路原理图
基于单片机的气象监控系统原理图
4 系统软件设计
4.1 软件设计的总体结构
嵌入式系统的软件和硬件息息相关,在软件部分的设计过程中,要基于高内聚、低耦合的思路。所以在软件设
计过程中,主要分为两个工作部分,分别为硬件驱动程序和用户业务逻辑。硬件驱动程序是让各模块能正常工作,
随时可以为用户业务逻辑服务,用户业务逻辑即每个系统需要实现的功能性需求。用户业务逻辑需要调用驱动程序
为其服务。软件结构如图4.1所示。
本系统模块驱动程序包括,液晶驱动程序、报警驱动程序、键盘驱动程序、温湿度传感器驱动程序、风速传感
器驱动程序、光照传感器驱动程序、大气压强传感器驱动程序,用户业务逻辑程序根据实时性要求,合理执行模块
之间的调度关系。
图4.1 软件结构图
Fig.4.1 Software structure diagram
4.2系统程序流程
在系统的工作流程中,通过以外部的输入参数为设定值,如果外部传感器监测到的数值没有超过设定范围,MCU
控制系统会触发相应的调节动作。该工作流程统一下述六个部分构成,见图4.1。
4.2.1 主程序流程
主程序为用户使用逻辑程序。本系统根据用户的需求,系统通上电后,系统首先会对硬件设备进行初始化,然
后对其加载驱动,完成上述的初始化操作后对键盘进行扫描,如果系统扫描到存在按键被按下,则处理按键功能,
如果没按键按下则读取各个传感器的数据,显示个传感器的数据,如果数据超过设定值,则触发报警。该部分流程
如图4.2所示。
图4.2 主程序流程图
Fig.4.2 Main program flow chart
4.2.2 报警子程序
报警电路硬件设计采用GPIO PB15驱动,此时PB15触发高电平,报警电路被打开,对应电平信号输出后关闭报
警。
图4.3报警器驱动程序
Fig.4.3 Alarm driver
主要程序如下:
void BEEP_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_15);
}
4.2.3 DHT11子程序流程
DHT11通过单总线与MCU进行通信,先初始化MCU对应GPIO,然后按照DHT11数据手册读取。读取流程如图4.3所
示。DHT11温湿度传感器有四种时序,启动传输时序、复位时序、写字节时序、读字节时序[20]。前两者传输时序的
实现较为容易,通过依次拉低或拉高时钟线和数据线。后两者相对复杂,写时序用于发送控制字,即发送命令,当
测量结束后,发出读时序以读回测量数据。在第9个时钟周期之后,写入DHT11的8个数据位,读取应答位,当应答位
为0时,表明DHT11温湿度传感器已正确接收。DHT11读写数据的规则是:数据线在时钟线下降沿后改变状态,并且在
时钟线上升沿有效。
图4.4 DHT11子程序流程图
Fig. 4.4 DHT11 subroutine flow chart
主要程序如下:
uint8_t Read_DHT11(DHT11_Data_TypeDef *DHT11_Data)
{
DHT11_Mode_Out_PP();
DHT11_DATA_OUT(LOW);
delay_ms(18);
DHT11_DATA_OUT(HIGH);
delay_us(30);
16
DHT11_Mode_IPU();
if(DHT11_DATA_IN()==Bit_RESET) {
while(DHT11_DATA_IN()==Bit_RESET);
while(DHT11_DATA_IN()==Bit_SET);
DHT11_Data->humi_int= Read_Byte();
DHT11_Data->humi_deci= Read_Byte();
DHT11_Data->temp_deci= Read_Byte();
DHT11_Data->check_sum= Read_Byte();
DHT11_Mode_Out_PP();
DHT11_DATA_OUT(HIGH);
if(DHT11_Data->check_sum == DHT11_Data->humi_int + DHT11_Data->humi_deci + DHT11_Data-
temp_int+ DHT11_Data->temp_deci)
return SUCCESS;
else
return ERROR;
} else{
return ERROR;
}
}
4.2.4 OLED子程序流程
OLED采用STM32硬件I2C通信,设置通信速率为400kHz。程序定义一个数组作为显示缓存。驱动程序实质就是维
护该缓存,修改该缓存,最后将缓存数据发送到屏幕进行显示。程序流程图如图4.5所示。
图4.5 OLED子程序流程图
4.3本章总结
本章节主要讲述了气象监控系统的软件设计的整体结构及各部分的程序流程。
**附 录**
主程序
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "bmp280.h"
#include "adc.h"
#include "bsp_dht11.h"
#include "key.h"
#include "OLED_I2C.h"
#include "string.h"
DHT11_Data_TypeDef dht;
float bmp280_temp;
float bmp280_press;
float high;
unsigned char tmp_buf[16];
u16 adc1;
u16 adc2;
int light; //光照强度
float windspeed; //风速
int set_temp_up=30;
int set_temp_down=15;
int set_humi_up=60;
int set_humi_down=20;
int key_get;
int cc=0; //0正常显示 1温度阈值 2 湿度阈值 3土壤湿度 4 光照强度
int main(void)
{
delay_init(); //延时函数初始化
LED_Init(); //初始化与LED连接的硬件接口
uart_init(9600);
Adc_Init(); //ADC初始化
DHT11_GPIO_Config(); //dht11初始化
KEY_Init(); //按键初始化
24
bmp280Init(); //BMP280初始化
I2C_Configuration();//iic初始化
OLED_Init();//oled初始化
OLED_Fill(0xFF);//全屏点亮
delay_ms(2);
OLED_Fill(0x00);//全屏灭
delay_ms(2);
while(1)
{
key_get=KEY_Scan(0);
if(key_get==1) //选择
{
cc++;
if(cc==5)
cc=0;
if(cc==1)
{
OLED_ShowStr(56,4,"<",1);
}
if(cc==2)
{
OLED_ShowStr(120,4,"<",1);
OLED_ShowStr(56,4," ",1);
}
if(cc==3)
{
OLED_ShowStr(120,5,"<",1);
OLED_ShowStr(120,4," ",1);
}
if(cc==4)
{
OLED_ShowStr(56,5,"<",1);
OLED_ShowStr(120,5," ",1);
}
if(cc==0)
{
OLED_ShowStr(56,5," ",1);
}
}
if(key_get==2) //+
{
if(cc==1)
{
set_temp_up++;
if(set_temp_up>99)
set_temp_up=99;
}
25
if(cc==2)
{
set_temp_down++;
if(set_temp_down>99)
set_temp_down=99;
}
if(cc==4)
{
set_humi_up++;
if(set_humi_up>99)
set_humi_up=99;
}
if(cc==3)
{
set_humi_down++;
if(set_humi_down>99)
set_humi_down=99;
}
}
if(key_get==3) //-
{
if(cc==1)
{
set_temp_up--;
if(set_temp_up<0)
set_temp_up=0;
}
if(cc==2)
{
set_temp_down--;
if(set_temp_down<0)
set_temp_down=0;
}
if(cc==4)
{
set_humi_up--;
if(set_humi_up<0)
set_humi_up=0;
}
if(cc==3)
{
set_humi_down--;
if(set_humi_down<0)
set_humi_down=0;
}
}
adc1=Get_Adc_Average(ADC_Channel_0,10); //得到光照强度adc
26
adc2=Get_Adc_Average(ADC_Channel_1,10); //得到风速adc
if(adc2<10)
adc2=0;
light=100-adc1/4095.0*100; //得到光照强度
windspeed=adc2/4095.0*3.3*1000*0.027; //F=0.027*U 电压 mv
Read_DHT11(&dht);
bmp280GetData(&bmp280_press,&bmp280_temp,&high);
delay_ms(10);
sprintf(tmp_buf,"temp:%dC ",dht.temp_int);
OLED_ShowStr(0,0,tmp_buf,1);
memset(tmp_buf,0,sizeof(tmp_buf));
sprintf(tmp_buf,"humi:%d%% ",dht.humi_int);
OLED_ShowStr(64,0,tmp_buf,1);
memset(tmp_buf,0,sizeof(tmp_buf));
sprintf(tmp_buf,"press:%4.0fPa",bmp280_press);
OLED_ShowStr(0,1,tmp_buf,1);
memset(tmp_buf,0,sizeof(tmp_buf));
sprintf(tmp_buf,"light:%d%% ",light);
OLED_ShowStr(0,2,tmp_buf,1);
memset(tmp_buf,0,sizeof(tmp_buf));
sprintf(tmp_buf,"windspeed:%.2fm/s ",windspeed);
OLED_ShowStr(0,3,tmp_buf,1);
memset(tmp_buf,0,sizeof(tmp_buf));
sprintf(tmp_buf,"TU:%dC ",set_temp_up);
OLED_ShowStr(0,4,tmp_buf,1);
memset(tmp_buf,0,sizeof(tmp_buf));
sprintf(tmp_buf,"TD:%dC ",set_temp_down);
OLED_ShowStr(64,4,tmp_buf,1);
memset(tmp_buf,0,sizeof(tmp_buf));
sprintf(tmp_buf,"HU:%d%% ",set_humi_up);
OLED_ShowStr(0,5,tmp_buf,1);
memset(tmp_buf,0,sizeof(tmp_buf));
sprintf(tmp_buf,"HD:%d%% ",set_humi_down);
OLED_ShowStr(64,5,tmp_buf,1);
memset(tmp_buf,0,sizeof(tmp_buf));
if(dht.temp_int>set_temp_down&&dht.temp_int<set_temp_up&&dht.humi_int>set_humi_down&&dht.
humi_int<set_humi_up)
{
BEEP=1;
}
else
BEEP=0;
}
}
5 实物演示与分析
如图5.1是焊接完成未通电时的系统实物图,将可执行的hex文件传输到系统中,调试实物各部分传感器是否能
正常工作满足所需要的功能。若出现问题则进行检修,排查原因,直至能够正常工作。
图5.1 焊接好的实物图
5.1 实物演示
(1)设定温度范围18-25℃,湿度范围30-61%RH,实时温度22℃,湿度36%RH,压强1029Pa,风速2.28m/s,光
照强度为68Lux,温度正常,湿度正常,蜂鸣器不发出警报声。
图5.2温湿度正常的实物图
Fig.5.2 Physical diagram of normal temperature and humidity
(2)设定温度范围18-20℃,湿度范围30-61%RH,实时温度23℃,湿度36%RH,压强1029Pa,风速0m/s,光照强
度为68 Lux,温度过高湿度正常,蜂鸣器发出警报声。
图5.3 温度高湿度正常的实物图
Fig.5.3 Physical diagram of normal temperature, high humidity
(3)设定温度范围25-32℃,湿度范围30-61%RH,实时温度23℃,湿度36%RH,压强1028Pa,风速0m/s,光照强
度为69 Lux,温度过低湿度正常,蜂鸣器发出警报声。
图5.4温度低湿度正常的实物图
Fig5.4 Physical image of normal humidity and low temperature
(4)设定温度范围18-20℃,湿度范围43-61%RH,实时温度23℃,湿度37%RH,压强1029Pa,风速0m/s,光照强
度为69 Lux,温度过低湿度过低,蜂鸣器发出警报声。
图5.5 温度低湿度低的实物图
5.2 结果分析
在系统演示中,系统可以准确的完成各种功能,满足本课题的设计要求。当温度或湿度高于设定值时,系统中
的蜂鸣器则发出报警提示音。当温度或湿度低于设定值时,系统中的蜂鸣器也会发出报警提示音。
5.3 本章总结
本章主要是实物进行调试后,将几个重要的工作过程进行演示,从而能更直观的了解整个气象监控系统。
结 论
在本次毕业设计过程中,通过对模块单元进行设计、系统图绘制、设备选型以及文献资料的查阅,对系统的开
发设计流程有了一个清晰的认识。
本次对监测系统的设计基本完成了预期要求,能够完成对温湿度、光照强度、风速及大气压强的智能测量。但
是由于自身专业知识水平的限制,设计过程也存在一定的缺陷。主要表现为:一、虽然能够通过传感器进行信号的
采集,但是由于系统工作过程比较复杂,所以想要做完整个控制系统是比较难的。二、由于选用的元件的限制,在
本系统采集到的温湿度及其他测量数据的范围有限,单片机气象监控系统的功能也就此受到限制。如果想要将该系
统应用到实际的气象测试环境中,还需要在系统中添加大量的元器件。
本次设计的气象监测系统可以满足当前生活中的大部分场景,能够实现快捷、准确的测量温度、湿度以及光照
的参数。基于单片机控制的监控系统在很多领域内都有广泛的应用,通过本次设计,只是对单片机控制的一个简单
应用和方案。
本人认为在未来的单片机监控系统的发展过程中,会出现以下几个趋势:一是能够对气象数据更加准确的采
集;二是随着传感器精度的不断提升,其适用控制范围会更加广泛,运用到更多的环境当中去。并且能对气象数据
的监测更加简单,便捷,精确。