2021-10-14 11:28:57 [显示全部楼层]
7186浏览
查看: 7186|回复: 4

[教程] Mind+Python编程进阶系列课程—01 趣味数字电导仪

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

第一课、趣味数字电导仪

课程目录:



一、实践情境

雷雨天气,我们常常被要求在路上行走时尽量远离电线杆和积水地段,这是因为水和电线能都够导电,而雷电和大风易使电线落入水中进而使积水带电引起触电危险。那么他们的导电能力如何呢?在这节课上,我们将设计一个数字导电仪,来对生活一些常见物质的导电能力探一探究竟!

Mind+Python编程进阶系列课程—01 趣味数字电导仪图1

二、实践目标

本实践项目运用micro:bit作为智能终端,通过土壤湿度传感器采集数据,来探究比较,水与铜片的导电性能强弱。

三、知识目标

1、掌握运用micro:bit作为智能终端,通过Python编程采集传感器数据的方法;

2、掌握通过 Python 编程对数据进行可视化处理的方法;

3、认识micro:bit开发板与I/O扩展板,掌握两者的连接方法;

4、认识土壤湿度传感器,了解土壤湿度传感器的工作原理和使用。

四、实践准备

硬件清单:

Mind+Python编程进阶系列课程—01 趣味数字电导仪图2


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

其他:

1、一杯土壤(湿润)

2、一杯水(常温)

3、一块铜片(铜质材料即可)

知识链接

土壤湿度传感器

简介:这是一个简易的水分传感器,可用于检测土壤的水分。当土壤缺水时,传感器输出值将减小,反之将增大。传感器表面做了镀金处理,可以延长它的使用寿命。

引脚说明:

Mind+Python编程进阶系列课程—01 趣味数字电导仪图3Mind+Python编程进阶系列课程—01 趣味数字电导仪图4


原理介绍:

土壤湿度传感器的两根金属条相当于电路中的开关,在提供电源的情况下,将金属条插入水中,金属条与水就能形成一条导通的电路,金属条之间亦会有电流流过,相当于开关被按下,电路导通,小灯亮起。

Mind+Python编程进阶系列课程—01 趣味数字电导仪图5




也正因此,我们选择土壤湿度传感器来作导电能力测试。

而所谓的检测土壤湿度,实际上就是利用水能够导电的特性来检测此时两块极板间的电流。水分越多,极板间的电流也就越大,导电能力也就越强,检测到的数值也就越大。

使用说明:

土壤湿度传感器在使用时需要将两金属条充分插入土壤中,并等待数秒直至数据稳定后,通过显示屏模块或软件可以读取土壤湿度对应的数值。

土壤湿度数值参考

Mind+Python编程进阶系列课程—01 趣味数字电导仪图6


Mind+Python编程进阶系列课程—01 趣味数字电导仪图7


注1:不同土壤介质的测量值会存在差异。土壤中的水分存在分布不均匀的情况,数据仅能代表局部湿度。注2:传感器顶部的塑料部分不防水,请勿将传感器整个埋入土中。


I/O扩展板

简介:这里的“I、O”分别是“input”输入和“output”输出的缩写,I/O扩展板的作用是将micro:bit上的IO口以引脚口的形式引出,方便我们接入传感器、执行器等模块。IO口与micro:bit上的接口一一对应。关于扩展版的详细介绍可见附录1。

Mind+Python编程进阶系列课程—01 趣味数字电导仪图8


蜂鸣器

简介:蜂鸣器是一种能够发出类似蜂鸣声音的器件。这里的蜂鸣器已被内置在I/O扩展版上。

数字信号与模拟信号

数字信号:数字信号指自变量是离散的、因变量也是离散的信号,这种信号的自变量用整数表示,因变量用有限数字中的一个数字来表示。在计算机中,数字信号的大小常用有限位的二进制数表示。

Mind+Python编程进阶系列课程—01 趣味数字电导仪图9


模拟信号:模拟信号是指用连续变化的物理量表示的信息,其信号的幅度,或频率,或相位随时间作连续变化,或在一段连续的时间间隔内,其代表信息的特征量可以在任意瞬间呈现为任意数值的信号。

Mind+Python编程进阶系列课程—01 趣味数字电导仪图10


光看概念感觉特别抽象,那么我们用生活中的实例来理解,比如我们平时用到的用于开关灯的开关,开和关是两个状态,非开即关。那么对灯来说开和关就是数字信号。再想想家中如果有一个温度计的话,温度变化是一个连续变化的的数值,并不能用某个特殊的状态来表示,温度的变化就是模拟信号。


五、实践过程

在本项目中,我们将利用土壤湿度传感器的工作原理,分两步设计一个趣味数字电导仪,来探究一下水与铜片的导电性能强弱。

1、实时检测土壤湿度进而检测水、铜导电性能。

2、对数据进行可视化处理。

任务1:土壤湿度实时检测

在这个任务中,我们将在20℃的环境室温下,对杯子中的土壤进行湿度检测。为此,我们将分四步进行。首先是分析设计,接着进行硬件的搭建,之后通过软件编写程序,最后对实验进行调试修改。

1.分析设计

本实践任务主要是通过扩展板将土壤湿度传感器与micro:bit开发板相连接,实时获取土壤的湿度,并将检测到的数据信息显示在点阵屏上,同时,当数值大于一定值时,蜂鸣器发声以作提示。

Mind+Python编程进阶系列课程—01 趣味数字电导仪图11


2.硬件搭建

由于micro:bit上有很多无法直接使用的扩展引脚,因而我们需要借助I/O扩展板可以将这些划分的很细的引脚引出来使用,从而支持更多输入输出设备拓展。

这里,我们将分步骤使土壤湿度传感器先通过扩展板连接上micro:bit,再将micro:bit接入计算机。

STEP1:将micro:bit开发板插入I/O扩展板,注意正反,LED点阵屏朝扩展板的“micro:bit”图标方向

Mind+Python编程进阶系列课程—01 趣味数字电导仪图12


STEP2:通过传感器连接线将土壤湿度传感器连在扩展板的P1端口。其中,红线和黑线分别对应电源正极和负极,蓝线对应信号线,用来传输信号。

Mind+Python编程进阶系列课程—01 趣味数字电导仪图13


STEP3:通过USB连接线将micro:bit接到计算机。

Mind+Python编程进阶系列课程—01 趣味数字电导仪图14


3.软件编写

在连接好各个硬件之后,我们还无法使他们实现功能。这个时候我们需要给硬件编写程序来控制他们运行。而在首次编程时,我们将先对软件进行设置,之后再编写Python程序来检测土壤湿度。

软件设置:

在Mind+软件中,我们需要手动创建项目文件、python文件并安装一些库文件以便编写程序。项目文件对应我们的项目,程序文件中存储的是编写的python代码,在一个项目文件中,可以有一个或多个python程序文件。具体操作流程如下,

Mind+Python编程进阶系列课程—01 趣味数字电导仪图15


STEP1:创建与保存项目文件

(1)启动Mind+软件,点击右上角的“Python模式”,

Mind+Python编程进阶系列课程—01 趣味数字电导仪图16

(2)点击左上角“代码”选择编程方式,

Mind+Python编程进阶系列课程—01 趣味数字电导仪图17

之后我们会看到下面这样的屏幕,右侧是文件目录区,左侧分别是代码编写区和终端区。

Mind+Python编程进阶系列课程—01 趣味数字电导仪图18

(3)创建完成后,点击左上方项目菜单中的“另存项目”,

Mind+Python编程进阶系列课程—01 趣味数字电导仪图19

(4)在弹出的界面中选择保存位置,输入文件名“m趣味数字电导仪”,保存类型“mind+”

Tips:文件名称可自取,上述文件名中的“m”指代“micro:bit”。

Mind+Python编程进阶系列课程—01 趣味数字电导仪图20

STEP2:创建与保存python文件

(1)点击“文件系统”,

Mind+Python编程进阶系列课程—01 趣味数字电导仪图21

之后会显示出文件目录,也就是python程序文件所保存的区域,

Mind+Python编程进阶系列课程—01 趣味数字电导仪图22

(2)点击“项目中的文件”栏中的加号,

Mind+Python编程进阶系列课程—01 趣味数字电导仪图23

之后,会弹出一个空白输入框,

Mind+Python编程进阶系列课程—01 趣味数字电导仪图24

(3)在弹出的输入框中写入“任务1土壤湿度检测.py”并回车确认,如下左图,

Mind+Python编程进阶系列课程—01 趣味数字电导仪图25

这样我们就成功创建一个名为“任务1土壤湿度检测.py”的python程序文件了,

Tips:python程序文件一定要以“.py”格式结尾才能进行编程,否则无法打开。

(4)打开文件

创建完成后,我们双击“土壤湿度检测.py”文件即可对该文件在程序编写区内进行编程,图示如下。

Mind+Python编程进阶系列课程—01 趣味数字电导仪图26

STEP3:安装pinpong库

pinpong库是一套用来控制开源硬件的Python库。

(1)点击库管理

Mind+Python编程进阶系列课程—01 趣味数字电导仪图27

(2)安装pinpong库

Mind+Python编程进阶系列课程—01 趣味数字电导仪图28

程序编写、运行及回顾:

STEP1:编写Python程序
  1. import time#导入时间库
  2. from pinpong.board import Board,Pin,ADC#从pinpong.board包中导入Board,Pin,ADC模块
  3. from pinpong.extension.microbit import *#导入pinpong.extension.microbit包中所有模块
  4. Board('microbit').begin()#初始化,选择板型和端口号,不输入端口号则进行自动识别
  5. adc0 = Pin(Pin.P1, Pin.ANALOG) #初始化P1引脚为模拟输入
  6. while True:#永久循环
  7.     A1 = adc0.read_analog()  #读取模拟信号数值
  8.     if A1 >5:
  9.         music.play_buzzer(Pin.P0, "F/F3", 1)#P0口,播放声音,音符"F/F3",节拍1
  10.     display.scroll(A1)#点阵屏显示A1的值
  11.     print(A1)#打印显示在终端
  12.     time.sleep(5)#延时5秒,即每五秒检测一次
复制代码

STEP2:运行程序并观察效果

(1)在运行程序之前,我们需要先手握土壤湿度传感器未镀金部分,将其插入土壤中,并打开I/O扩展板的蜂鸣器开关。

Mind+Python编程进阶系列课程—01 趣味数字电导仪图29


Mind+Python编程进阶系列课程—01 趣味数字电导仪图30


(2)点击右上方的运行按钮

首次运行后,mind+会自动给micro:bit板子烧录一段特定的程序,我们称之为固件。通过给micro:bit板子烧录固件能够将硬件设备与软件连接起来,继而依靠软件程序控制硬件运行。

Mind+Python编程进阶系列课程—01 趣味数字电导仪图31

(3)观察效果

我们可以听到扩展板先发出滴的一声,随后在micro:bit点阵屏上显示出数值0,并且在软件终端界面中同样显示一个数值0。之后,每隔5秒重复一次。这里的“0”,就是输出的电信号对应的模拟值。初始值为0是因为传感器执行检测的程序需要一定的时间,并不表示土壤中无水分。

Mind+Python编程进阶系列课程—01 趣味数字电导仪图32

STEP3:回顾程序

我们用 python 代码实现了项目功能,现在让我们一起来回顾一下,看看程序是如何工作的吧。

1、导入库

from pinpong.board import Board,Pin,ADC#导入pinpong.board包中Board,Pin,ADC模块

from pinpong.extension.microbit import *#导入pinpong.extension.microbit包中所有模块

在控制micro:bit主控板和土壤湿度传感器时,我们用到了micro:bit主控板、P1引脚和AD转换器,而在pinpong库中已经提供了相应的Board类、Pin类以及ADC类等来实现相关功能,因此在编程时,我们需要从“pinpong.board”导入这些模块并在后续创建他们的实例化对象,以使用各自的相关功能。同样的,为了能够实现micro:bit板载上各个元器件的功能,我们也需要导入“pinpong.extension.microbit”这个包中的所以模块。

2、初始化主控板

Board('microbit').begin()#初始化,选择板型和端口号,不输入端口号则进行自动识别

“begin”的意思是开始,这是初始化主控板语句,通过它可以确定主控板类型以及端口号。在 Board(" ") 中输入主控板型号,在 begin() 中输入主控板端口号,不输入端口号则进行自动识别。这里我们一般只使用一块 micro:bit 主控板,所以不用识别端口号。

3、引脚初始化

adc0 = Pin(Pin.P1, Pin.ANALOG) #初始化P1引脚为模拟输入

为了能够使连在P1引脚上的传感器将检测到的电信号转化为模拟量进行读取,我们需要初始化P1引脚,定义模拟引脚 P1 为变量“adc0”。

4、读取模拟量

A1 = adc0.read_analog()  #读取模拟信号数值

“read”的意思是读取,“adc0”引脚为 P1 引脚,接了土壤湿度传感器,所以变量“A1”为土壤湿度传感器的反馈值。

整体表示通过“read_analog()”方法来获得引脚“adc0”的模拟值,然后用变量“A1”来存储该值。

5、播放声音

music.play_buzzer(Pin.P0, "F/F3", 1)#P0口,播放声音,音符"F/F3",节拍1

“play_buzzer()”是蜂鸣器发声的意思,“Pin.P0”指的是默认的p0口的蜂鸣器;“F/F3”指的是音符;“1”指的是节拍,可以改变数值进而变化声音的持续时间。

整体表示通过“play_buzzer()”方法使P0引脚上的蜂鸣器以1节拍来播放音符F/F3。

6、屏幕显示

display.scroll(A1)#点阵屏显示A1的值

“scroll”是显示字符的意思,整体表示通过“scroll()”方法来将读取到的A1值显示在点阵屏上。

4.调试修改

通过上述实验,我们已经成功实现了每隔五秒对土壤的湿度进行一次检测。并且我们已经知道,传感器之所以能检测到电流,归根结底是因为土壤中的水分能够导电,使得土壤与传感器之间形成了电路。因此,倘若将土壤替换成同样能够导电的物质,例如铜片,我们依旧能够检测此时的电流强度,也就能以此来比较一下不同物质的导电能力到底孰强孰弱了。

STEP1:将土壤湿度传感器的镀金端插入水中,观察数据的变化。



STEP2:自建一个Excel文件,将上述数据记录下来,并以csv格式保存。如下图,

Mind+Python编程进阶系列课程—01 趣味数字电导仪图33

Mind+Python编程进阶系列课程—01 趣味数字电导仪图34


STEP3:将土壤湿度传感器金属端压在铜片上,使其充分接触,观察数据的变化并记录在上述表格中。

Mind+Python编程进阶系列课程—01 趣味数字电导仪图35

Mind+Python编程进阶系列课程—01 趣味数字电导仪图36

Mind+Python编程进阶系列课程—01 趣味数字电导仪图37

任务2:数据可视化

由于记录的表格数据并不能非常直观得呈现水和铜的导电能力强弱,因此,在这个任务中,我们将对上述检测到的数值可视化处理,进而分析两者的导电能力强弱。这里,我们将数据以折线图形式呈现即可。

1.数据可视化与分析

软件设置:

STEP1:创建与保存python文件

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

STEP2:安装库

(1)点击库管理

Mind+Python编程进阶系列课程—01 趣味数字电导仪图38

(2)安装matplotlib库

Mind+Python编程进阶系列课程—01 趣味数字电导仪图39

(3)安装pandas库

Mind+Python编程进阶系列课程—01 趣味数字电导仪图40

STEP3:导入数据文件(见附录2)

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

Mind+Python编程进阶系列课程—01 趣味数字电导仪图41

Mind+Python编程进阶系列课程—01 趣味数字电导仪图42

程序分析、编写及运行:

STEP1:分析程序

我们知道常见的数据采集方式有传感器采集和网络采集两种,这里我们已借助土壤湿度传感器,采集到了水与铜片的数值并记录在表格文件中,而为了便于对数据进行读取和分析,我们依旧通过编写程序使其以图表形式呈现出来。(程序中使用的参考数据表格见附录2)

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

Mind+Python编程进阶系列课程—01 趣味数字电导仪图43

STEP2:编写Python程序

  1. # -*- coding: utf-8 -*-
  2. import pandas as pd#导入pandas库并用pd来表示
  3. import matplotlib.pyplot as plt#导入matplotlib库中的pyplot绘图模块
  4. data = pd.read_csv("数据表.csv",encoding='gb18030')#导入csv格式表格数据
  5. plt.rcParams['font.sans-serif'] = ['SimHei']#设置中文字体
  6. plt.title("水与铜的导电能力探究")#绘制标题
  7. plt.ylabel("电压值")#绘制x轴标签
  8. plt.xlabel("时间")#绘制y轴标签
  9. x_data1=data.iloc[:,0]#选取表格第一列并以此作为折线1的x轴数据
  10. y_data1=data.iloc[:,1]#选取表格第二列并以此作为折线1的y轴数据
  11. x_data2=data.iloc[:,0]#选取表格第一列并以此作为折线2的x轴数据
  12. y_data2=data.iloc[:,2]#选取表格第三列并以此作为折线2的y轴数据
  13. plt.plot(x_data2,y_data2,color='blue',label="铜片",linewidth=2.0)#绘制折线,并设置折线的颜色、标签、线宽
  14. plt.plot(x_data1,y_data1,color='yellow',label="水",linewidth=2.0)#绘制折线,并设置折线的颜色、标签、线宽
  15. plt.legend()#显示图例(标签)
  16. plt.show()#显示图像
复制代码

STEP3:运行程序并分析数据

(1)运行程序,我们看到csv表格中的数据以图表的形式呈现了出来。

Mind+Python编程进阶系列课程—01 趣味数字电导仪图44

(2)观察上图,我们可以清楚地发现,在20℃的温度下,随着检测时间的增加,水与铜片的模拟值逐渐趋于稳定,并且金属铜的模拟值大于水的模拟值。因此我们可以得出结论,在相同的条件下,铜的导电能力强于水。

六、巩固提高

1.项目小结

本节课我们以micro:bit、扩展板及土壤湿度传感器为器件自制了一个电导仪,探究分析了水与铜的导电性能强弱。首先通过土壤湿度传感器检测土壤的湿度模拟值,之后以此方式采集水和铜片的数据,最后将测得的数据以折线图的形式可视化出来并加以分析。

2.项目拓展

经过上述的实验探究,我们已知在相同的条件下,水的导电能力是弱于金属铜的。这也变相解释了为何生活中常见的一些电缆线里面的材料往往是铜丝。不仅因为铜这种金属易得,更因为它的导电能力强。

那么对于水来说,是否可以通过变化外在的一些条件,使其导电能力增加呢?比如,改变水温。让我们按下列步骤完成第一个拓展探究吧!

STEP1:在烧杯中倒入30ml接近100℃的开水,将传感器金属端轻轻插入其中,观察结果并记录在下表,

STEP2:将开水替换为50℃左右的温水,重复上述操作,观察结果并作记录,

STEP3:将温水替换为接近0℃的冰水,重复上述操作,观察结果并作记录。

Mind+Python编程进阶系列课程—01 趣味数字电导仪图45

想一想,上述结果形成的原因是怎样的呢?!而除了水和铜之外,宇宙中还有什么自然物质或人造物质能够导电呢?拿上我们的数字电导仪,对生活中常见的一些物质进行一次检测吧!看看他们的导电性能如何呢?!(如:木头、石头、硬币)

Mind+Python编程进阶系列课程—01 趣味数字电导仪图46Mind+Python编程进阶系列课程—01 趣味数字电导仪图47Mind+Python编程进阶系列课程—01 趣味数字电导仪图48

附录

附录1

拓展阅读

I/O扩展板

详细简介:

I/O扩展板能完全兼容micro:bit和掌控板两种主板。正面插入掌控,反面插入micro:bit。引出10路数字/模拟3Pin口,两路IIC口以及一路UART口;板载两路电机驱动,且不占用额外引脚;板载PH2.0及microUSB两种供电口,既可以通过usb线也可以通过电池盒或者锂电池供电,供电电压3.5-5V,板载开关,可以开关外接供电电源;板载一个高品质蜂鸣器,且带有开关控制,可以随时关闭蜂鸣器;引出了9个鳄鱼夹接口;分别兼容掌控的触控金手指和micro:bit金手指。扩展板兼容乐高尺寸孔位,可以与乐高进行拼插结合。

供电方式:

主板直接供电:采用主板的USB或者电源口供电,此时,可以使用扩展板的各种扩展口及蜂鸣器。因主板驱动电流有限,此模式下无法使用电机驱动。

USB供电口供电:使用电脑USB口供电或者充电宝,或者手机充电头供电。接口为microUSB。此模式下,扩展板的所有功能均可使用。

外接电池盒供电: 外接PH2.0接口输入电压为3.5~5V,使用PH2.0接口的3节干电池盒或者3.7V锂电池,均可。此模式下,扩展板的所有功能均可使用。

接micro:bit板使用方法

microbit主板的LED点阵的那一面,对着microbit字样的那个方向插入,如图所示:

Mind+Python编程进阶系列课程—01 趣味数字电导仪图49


此时,扩展板支持的功能如下:

l 所有的IO口

l 2路电机驱动

l 0 1 2 3V GND 金手指

l USB供电和PH2.0外接供电口供电及电源开关

l 蜂鸣器及蜂鸣器开关

注:microbit下不支持 P Y T H O N这6个触摸金手指。蜂鸣器占用的P0口,如果要正常使用金手指P0,请将蜂鸣器关闭。

附录2

数据文件

链接:https://pan.baidu.com/s/1uhJ-dbUmO1UNCQ8qjFqKYg

提取码:wmvc



DFxuy  见习技师

发表于 2021-10-15 10:38:33

把microbit换成掌控板可以么?有教程么?
回复

使用道具 举报

EVE  高级技匠

发表于 2021-10-19 09:41:06

DFxuy 发表于 2021-10-15 10:38
把microbit换成掌控板可以么?有教程么?

可以换的,目前没有掌控版本教程哦
回复

使用道具 举报

satyam  学徒

发表于 2021-11-10 10:36:39

这么复杂的过程,学习时发现问题有老师解答吗?
回复

使用道具 举报

木子呢  管理员
 楼主|

发表于 2021-11-11 10:17:18

satyam 发表于 2021-11-10 10:36
这么复杂的过程,学习时发现问题有老师解答吗?

有的,有问题咨询,可以加v:DFRobot2019,给您对接技术支持。
回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail