Mind+Python编程进阶系列课程—02 简易气象站
本帖最后由 木子呢 于 2021-11-9 16:52 编辑第二课、简易气象站课程目录:
[*]Python编程进阶系列教程—序章
[*]Python编程进阶系列课程—01 趣味数字电导仪
一、实践情境
当我们去旅游景区的时候,常常在显示屏上看到或者在广播听到空气温度、空气湿度、负氧离子含量等气象信息数据。这些数据几乎都来自景区气象站的实时监测。然而,景区的气象信息都是针对室外的,那当我们待在室内时,如何才能实时获取室内的环境信息呢?如果你也有这些困惑,就请跟着我们来完成一个室内的简易气象站吧!
二、实践目标
本实践项目运用micro:bit作为智能终端,通过DHT11温湿度传感器采集数据,来制作一个简易的气象站。
三、知识目标
1、 认识DHT11温湿度传感器,简单了解温湿度传感器的工作原理。
2、 认识micro:bit上的点阵屏,掌握其基本使用。
3、 使用micro:bit作为智能终端,掌握通过编写python程序检测环境温湿度的方法。
四、实践准备
硬件清单:
软件使用:mind+编程软件x1
知识链接
DHT11数字温湿度传感器
简介:
DHT11数字温湿度传感器包括一个电阻式感湿元件和一个NTC测温元件,可用来采集环境温度和湿度。
引脚说明:
点阵屏
简介:
micro:bit的内置的显示屏由5行5列总共25颗LED构成,因此被称为点阵屏,在上面我们可以实现一些简单的图像、字符等效果。
内置LED阵列说明
功能举例说明
控制LED阵列显示内容
方法说明
.show("Image.HEART")
显示HEART图案
.scroll("string")
显示字符string
.set_pixel(x,y)
点亮坐标x,y的灯
.off_pixel(x,y)
熄灭坐标x,y的灯
.set_brightness(value)
设置灯的亮度
.clear()
关闭所有阵列
五、实践过程
在本项目中,我们将利用DHT11温湿度传感器,设计一个简易的气象站,来实时检测环境的温湿度。
1、实时监测环境温湿度
2、对温湿度数据进行可视化处理
Tips:下面课程中的数据是在夏季室温30℃左右的环境下测量而得,不同季节测得的数据并不相同。
任务1:环境温湿度实时检测
1.分析设计
在本任务中,我们将对室内的环境温湿度进行实时监测。这里,我们可通过扩展板将DHT11温湿度传感器与micro:bit开发板相连接,实时检测环境的数据并将其显示在点阵屏和软件终端上。
2.硬件搭建
STEP1:通过传感器连接线将DHT11温湿度传感器连在扩展板的P1端口。
STEP2:将micro:bit开发板插入I/O扩展板,并通过USB连接线将micro:bit接到计算机。
Tips:使用扩展板时必然需要将开发板插入,而micro:bit与计算机的连接也始终需要usb线,因此,后续教程中我们将不再赘述该步骤。
3.软件编写
软件设置:
STEP1:创建与保存项目文件
启动Mind+软件,选择“Python模式”,另存项目并命名为“m简易气象站”。
STEP2:创建与保存python文件
创建一个python程序文件“任务一.py”,双击打开。
Tips:由于之前已安装过pinpong库,这里我们无需再次安装。
程序编写、运行及回顾:
STEP1:编写python程序
import time#导入时间库from pinpong.board import Board,Pin,DHT11#导入pinpong.board包中的Board,Pin,DHT11模块from pinpong.extension.microbit import *#导入pinpong.extension.microbit包中的所有模块Board("microbit").begin()#初始化,连接板子,选择板型和端口号,不输入端口号则进行自动识别dht11 = DHT11(Pin(Pin.P1))#创建DHT11对象
while True:#永久循环 temp = dht11.temp_c() #读取摄氏温度 humi = dht11.humidity() #读取湿度 display.scroll(temp)#点阵屏滚动显示温湿度的值 display.scroll(humi) print("dht11 temperature=",temp," humidity=",humi)#终端打印显示 time.sleep(1)#延时1秒
STEP2:运行程序并观察效果
(1)运行程序,观察软件终端
点击mind+软件右上方的运行按钮,我们可以看到在终端中显示测得的温度和湿度数据。
(2)观察点阵屏
同时,观察点阵屏,我们可以发现测得的数据同样在屏幕上滚动播放。
STEP3:回顾程序
1、导入库
from pinpong.board import Board,Pin,DHT11#导入pinpong.board包中的Board,Pin,DHT11模块
在控制micro:bit主控板和DHT11温湿度传感器时,我们用到了micro:bit主控板、P1引脚和DHT11温湿度传感器,在pinpong库中已经提供了相应的Board类、Pin类以及DHT11类来实现和他们相关的功能,因此在编程时,我们需要从“pinpong.board”导入这些模块并在后续创建他们的实例化对象,来使用各自的相关功能。
2、创建实例化对象
dht11 = DHT11(Pin(Pin.P1))#创建DHT11对象
为了能够使用DHT11类中的相应的函数功能,我们需要先创建一个实例化对象。
3、读取数值
temp = dht11.temp_c() #读取摄氏温度
humi = dht11.humidity() #读取湿度
使用DHT11需先导入DHT11模块,实例化对象后即可使用“temp_c()”和“humidity()”两个方法分别来读取温度和读取湿度。
4.调试修改
至此,我们成功制作了一个简易的气象站,实现了对室内环境温湿度的实时监测。并且我们发现,当气温达到30℃,或相对湿度达到50%时,我们就会感到闷热,这时候就可以打开空调解暑降温啦。而为了能及时打开空调,我们可进一步优化气象站,为其添加高温预警功能,实现当温度或湿度达到30℃和50%时,蜂鸣器发出警报声。
STEP1:编写程序
import time#导入时间库from pinpong.board import Board,Pin,DHT11#导入pinpong.board包中的Board,Pin,DHT11模块from pinpong.extension.microbit import *#导入pinpong.extension.microbit包中的所有模块Board("microbit").begin()#初始化,连接板子,选择板型和端口号,不输入端口号则进行自动识别dht11 = DHT11(Pin(Pin.P1))#创建DHT11对象while True:#永久循环 temp = dht11.temp_c() #读取摄氏温度 humi = dht11.humidity() #读取湿度 display.scroll(temp)#点阵屏滚动显示温湿度的值 display.scroll(humi) time.sleep(5)#延时5秒 print("dht11 temperature=",temp," humidity=",humi)#终端打印显示if temp >30 or humi >50:#条件 music.play_buzzer(Pin.P0, "F/F3", 1)#P0口,播放声音,音符"F/F3",节拍1 time.sleep(1)#延时1秒
任务2:数据可视化
至此,我们的气象站不仅能实时监测温湿度,亦能在高温时发出预警。但我们知道,真正的气象站不仅仅能实时检测,而且能对检测到的数据进行可视化处理,进而发现数据的特点以作深入研究,比如统计在不开空调或取暖器的情况下一天中室内温度低于0℃的时长等等。因此,接下来,我们将加长实验时间,检测并记录夏季的某个上午的温湿度,并对数据进行可视化处理,进而探究一下当天上午,室内温湿度的变化情况。这里,我们将数据以折线图形式呈现即可。
1.数据可视化与分析
数据记录:
STEP1:自建一个Excel文件,将早上6-11点中,每隔十分钟的温度和湿度数据记录下来,并以csv格式保存。
软件设置:
STEP1:创建与保存python文件
创建一个python程序文件“任务2数据可视化.py”,双击打开。
STEP2:导入数据文件
将自己测得并记录数据的表格文件存放入python程序文件所在文件夹,使其在同一目录下。
Tips:这里我们提供了一组数据(见附录1)以作案例分析。
程序分析、编写并运行:
STEP1:分析程序
这里我们已借助DHT11温湿度传感器,采集到室内温度和湿度的数值并记录在了表格文件中,而为了便于对数据进行读取和分析,我们依旧通过编写程序使其以图表形式呈现出来。
整体上,我们将采用顺序结构的方式编写程序。具体流程如下,
STEP2:编写Python程序
# -*- coding: utf-8 -*-import pandas as pd#导入pandas库并用pd来表示import matplotlib.pyplot as plt#导入matplotlib库中的pyplot绘图模块,并用plt表示data = pd.read_csv("温湿度数据.csv",encoding='gb18030')#导入csv格式表格数据plt.rcParams['font.sans-serif'] = ['SimHei']#设置中文字体plt.title("温湿度检测")#绘制标题plt.ylabel("数值")#绘制x轴标签plt.xlabel("时间")#绘制y轴标签x_data1=data.iloc[:,0]#选取表格第一列并以此作为折线1的x轴数据y_data1=data.iloc[:,1]#选取表格第二列并以此作为折线1的y轴数据x_data2=data.iloc[:,0]#选取表格第一列并以此作为折线2的x轴数据y_data2=data.iloc[:,2]#选取表格第三列并以此作为折线2的y轴数据plt.plot(x_data2,y_data2,color='blue',label="温度",linewidth=2.0)#绘制折线,并设置折线的颜色、标签、线宽plt.plot(x_data1,y_data1,color='yellow',label="湿度",linewidth=2.0)#绘制折线,并设置折线的颜色、标签、线宽plt.legend()#显示图例(标签)plt.show()#显示图像
STEP3:运行程序并分析数据
(1)运行程序,我们看到csv表格中的数据以图表的形式呈现了出来。
(2)观察上图,我们可以清楚地发现,在上午时,随着时间的增加,室内温度值也在不断上升,而湿度值则相对趋于稳定。
2.调试修改
继续增加实验时间,看一看在一整天内环境温湿度是怎样变化的呢?
六、巩固提高
1.项目小结
本节课我们以micro:bit、扩展板及DHT11温湿度传感器为器件自制了一个简易的气象站。首先通过传感器实现了对室内环境温湿度的实时检测,之后添加了高温预警功能,最后将测得的数据以折线图的形式呈现后加以分析。
2. 项目拓展
在闷热的夏季,我们可以借助气象站来高温预警,那如果是在寒冷的冬季,我们是否也能对低温进行警报呢?修改程序试一试吧!
附录
附录1
数据文件
链接:https://pan.baidu.com/s/1D7wQp0H9vQW52UC_17ALjw
提取码:mxb3
页:
[1]