2021-10-22 13:50:35 [显示全部楼层]
964浏览
查看: 964|回复: 0

[教程] Mind+Python编程进阶系列课程—02 简易气象站

[复制链接]
本帖最后由 木子呢 于 2021-11-9 16:52 编辑

第二课、简易气象站
课程目录:


一、实践情境

当我们去旅游景区的时候,常常在显示屏上看到或者在广播听到空气温度、空气湿度、负氧离子含量等气象信息数据。这些数据几乎都来自景区气象站的实时监测。然而,景区的气象信息都是针对室外的,那当我们待在室内时,如何才能实时获取室内的环境信息呢?如果你也有这些困惑,就请跟着我们来完成一个室内的简易气象站吧!

qw1.jpg

二、实践目标

本实践项目运用micro:bit作为智能终端,通过DHT11温湿度传感器采集数据,来制作一个简易的气象站。

三、知识目标

1、 认识DHT11温湿度传感器,简单了解温湿度传感器的工作原理。

2、 认识micro:bit上的点阵屏,掌握其基本使用。

3、 使用micro:bit作为智能终端,掌握通过编写python程序检测环境温湿度的方法。

四、实践准备

硬件清单:
截图.jpg

软件使用:mind+编程软件x1

知识链接

DHT11数字温湿度传感器

简介:
DHT11数字温湿度传感器包括一个电阻式感湿元件和一个NTC测温元件,可用来采集环境温度和湿度。

qw6.jpg

引脚说明:

qw7.jpg qw8.jpg


点阵屏

简介:
micro:bit的内置的显示屏由5行5列总共25颗LED构成,因此被称为点阵屏,在上面我们可以实现一些简单的图像、字符等效果。

qw9.jpg


内置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开发板相连接,实时检测环境的数据并将其显示在点阵屏和软件终端上。

qw10.jpg


2.硬件搭建

STEP1:通过传感器连接线将DHT11温湿度传感器连在扩展板的P1端口。

qw11.jpg


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+软件右上方的运行按钮,我们可以看到在终端中显示测得的温度和湿度数据。

qw12.jpg


(2)观察点阵屏

同时,观察点阵屏,我们可以发现测得的数据同样在屏幕上滚动播放。

qw13.jpg


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格式保存。

qw14.jpg


软件设置:

STEP1:创建与保存python文件

创建一个python程序文件“任务2数据可视化.py”,双击打开。

STEP2:导入数据文件

将自己测得并记录数据的表格文件存放入python程序文件所在文件夹,使其在同一目录下。

Tips:这里我们提供了一组数据(见附录1)以作案例分析。

程序分析、编写并运行:

STEP1:分析程序

这里我们已借助DHT11温湿度传感器,采集到室内温度和湿度的数值并记录在了表格文件中,而为了便于对数据进行读取和分析,我们依旧通过编写程序使其以图表形式呈现出来。

整体上,我们将采用顺序结构的方式编写程序。具体流程如下,

qw15.jpg


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表格中的数据以图表的形式呈现了出来。

qw16.jpg


(2)观察上图,我们可以清楚地发现,在上午时,随着时间的增加,室内温度值也在不断上升,而湿度值则相对趋于稳定。

2.调试修改

继续增加实验时间,看一看在一整天内环境温湿度是怎样变化的呢?

六、巩固提高

1.项目小结

本节课我们以micro:bit、扩展板及DHT11温湿度传感器为器件自制了一个简易的气象站。首先通过传感器实现了对室内环境温湿度的实时检测,之后添加了高温预警功能,最后将测得的数据以折线图的形式呈现后加以分析。

2. 项目拓展

在闷热的夏季,我们可以借助气象站来高温预警,那如果是在寒冷的冬季,我们是否也能对低温进行警报呢?修改程序试一试吧!

附录

附录1

数据文件

链接:https://pan.baidu.com/s/1D7wQp0H9vQW52UC_17ALjw

提取码:mxb3

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2022 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail