50076浏览
查看: 50076|回复: 0

[教程] 【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪

[复制链接]
本帖最后由 木子呢 于 2023-2-9 11:35 编辑

第05课:湖水液位监测仪

水是人类生存发展必不可少的物质,对人类的生产生活有着重要作用。但水能载舟亦能覆舟,每年因水灾造成的人身伤害及财产损失也不在少数。因此监测湖水水位变化情况是很有必要的,在科技不是很发达的时候,在湖中石梁上雕刻水标,并以此来观测记录湖水水位情况。

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图1

随着科学技术的快速发展,现代水文站对水位测量的方式采用了传感器的监测方式,比如电子水尺、投入式液位传感器、超声波液位传感器等监测设备。接下来,就利用行空板与模拟量超声波传感器来制作一款具有现代技术的湖水液位监测仪,

任务目标

通过超声波传感器实时测量水位高度,并且绘制水位高度的折线图显示在行空板屏幕上。


知识点

1. 了解模拟输入信号的概念

2. 了解数字信号与模拟信号的区别

3. 了解超声波传感器的使用方法及工作原理

材料清单

硬件清单:

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图2

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

下载地址:https://mindplus.cc/

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图3

动手实践

湖水液位监测仪主要是利用超声波传感器测量到水平面的高度,然后通过换算得出湖水水位高度,并实时显示湖水液位动态数据图。当然还可以将监测的数据,绘制成折线图显示在行空板上。

任务一:读取模拟量超声波传感器的值
读取模拟量超声波传感器的值,并将值转换为距离显示在行空板上。

任务二:检测湖水液位变化
绘制湖水框图,并且实时显示湖水液位动态数据图。

任务三:绘制湖水液位折线图
每隔一个小时,检测一次湖水的水位高度,并将水位高度在行空板上用折线图绘制出来。

任务一:读取模拟量超声波传感器的值

1.硬件连接


模拟量超声波是一款开放式双探头测距模块,输出模拟电压值,可以将模拟电压值转化为距离值。下面将模拟量超声波传感器连接到行空板的P21模拟引脚,硬件连接成功后,使用USB线将行空板连接到计算机。

注意:“模拟量超声波传感器”的相关介绍,见知识园地。

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图4

2.软件准备

打开Mind+,按照下面图示完成软件准备工作。

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图5

3.编写程序

模拟量超声波传感器连接到P21模拟引脚后,怎样才能知道超声波传感器检测到的值呢?使用
读取模拟引脚指令,并选择引脚为P21引脚。

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图6

使用显示文字更新文本内容参数指令,将模拟量超声波传感器检测到的模拟值显示在行空板上。

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图7

可是超声波传感器检测到的模拟值,并不是我们想要的距离值,如何才能将模拟值转换为距离值呢?模拟量超声波测距时有个距离的转换公式:距离值 = 模拟量输入值 * 520 / 4096。

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图8

新建一个变量距离,用来存储转换后的距离值。然后将更新文本参数指令中的内容,更改为变量距离

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图9

根据公式转换后的距离值会有很多小数,为了便于我们查看距离值,这里使用数字类型中的保留小数指令,将转换后的变量距离保留两位小数显示在行空板上。

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图10

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图11

4.程序运行

点击运行,程序运行成功后,行空板上实时显示超声波传感器检测到的距离值,检测的距离单位为厘米。直尺测量与超声波测量的距离对比如下图:

注意:超声波测量距离与实际距离存在一定的误差,误差约为实际距离的±1%。

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图12

任务二:检测湖水液位变化

1.编写程序


开始编写程序之前,先来分析一下,如何实现在行空板上实时显示湖水液位变化情况。首先行空板界面上要实现超声波传感器检测到的当前湖水高度,然后绘制一个简单的湖水变化图,通过湖水变化图可以实时观察湖水的水位情况。行空板界面显示图如下:

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图13

(1)绘制湖水框图

湖水框图很简单,就是一个未封闭的长方形,由三条线段组成。使用显示线段指令,绘制湖水框图。

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图14

如何才能确定预警水位线呢?我找的是一个大约15cm高的杯子作为湖,那杯子水位2/3的位置就是预警水位线。预警线位置对应行空板上的湖水框图位置就是(10,158),因此使用显示线段指令绘制一条红色的预警水位线,并使用显示文字指令,显示预警水位为10cm。

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图15

(2)绘制湖水液位增长变化图

Python主程序开始下,将实时水增长图与当前水位文字显示隐藏。

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图16

新建一个变量距离,用来存储超声波传感器检测到与水面的距离。

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图17

检测出湖水高度后,怎样才能将湖水的实时高度显示在行空板上呢?使用映射指令,将变量距从0-15映射到行空板湖水框图上(318-78)。新建一个变量当前水位,用来存放映射后的数据。为了便于查看,这里使用保留小数指令,将变量距离只保留整数部分。

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图18

使用更新数字参数指令,更新湖水线段的起始点y为变量当前水位

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图19

使用更新数字参数指令,更新当前水位文字显示的位置为变量当前水位-10,使用合并字符指令,将文字“当前水位:”、变量距离以及单位(cm)组合后,使用更新文本内容参数指令,实时更新数据。完整程序如下:

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图20

2.程序运行

点击运行,程序运行成功,行空板上动态显示湖水水位高度。显示效果如下图所示:

注意:使用过程中,要注意安全,所有模块都不能直接与水接触。

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图21

3.试一试


上面程序,当水位高度大于10cm时,预警水位线和预警水位数据,会被实时的湖水水位给遮住。接下来,大家修改一下程序,实现无论在什么时候预警水位线和预警水位数据都不能被实时湖水水位给遮住。

提示:可以将预警水位线与文字显示程序放在最实时湖水水位程序之下。

任务三:绘制湖水液位折线图

1.编写程序


任务二中,虽然可以看到湖水水位数据的实时变化情况,但是不能一眼看出,哪个时间段水位增长最快,哪个时间段水位没有变化。要想一眼就能看出水位数据的增减变化趋势,该怎么做呢?可以每隔一段时间检测一次湖水水位数据,然后将水位数据绘制成折线图。

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图22

(1)放置直角坐标图

要绘制折线图,首先需要直角坐标图,接下来先将图片文件夹中的坐标图,导入到文件系统中。

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图23

使用显示图片指令,将坐标图显示在行空板上,并使用更新数字参数指令,更改坐标图的高为320。

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图24

直角坐标放置好之后,将超声波测距的功能加上。新建变量距离,用来存放转换后的距离。新建变量y,用来存放将变量距离映射在行空板上的y坐标。

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图25

(2)描点并连线

使用填充圆形指令,进行描点。首先需要知道指令的xy坐标,y坐标为变量y,x坐标从横纵坐标交叉点位置开始,并且每个点之间的间隔为15。因此新建变量x,并设置初始值为20,描点完成后让变量x+15。

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图26

使用显示线段指令,当行空板上显示第二点时,就需要将第一个点和第二点用线段连接起来。当变量X>20时,新建一个 变量Y1 ,用来获取第一个点变量Y的值。因此,起点的XY坐标为:(变量X-15,变量Y1);终点的XY坐标为:(变量X,变量Y)。完整程序如下:

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图27

2.程序运行

点击运行,程序运行成功后,不停往水杯里加水或倒水,行空板上会实时绘制水位的折线图。

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图28

知识园地

1.什么是模拟信号

模拟信号是指在一定范围内,有无限值。在行空板的模拟口中,已经将0V到3.3V之间的值映射为0-4095范围内的模拟值。比如,0对应0V,4095对应3.3V。

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图29

模拟输入信号,就是模拟量超声波传感器检测到的0-4095的模拟值,通过对这个模拟值进行转换就变成了我们想要的距离。模拟量超声波的距离计算公式为:

距离值 = 模拟量输入值 * 520 / 4096

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图30

将模拟量超声波传感器检测到的模拟值,代入这个公式进行计算,可以得出,这个超声波能测出的最大距离为520cm。

2.模拟信号与数字信号的区别

数字信号只有两个值(0V和3.3V),运用在行空板中,就是高电平和低电平,高电平是数字1,对应3.3V。低电平是数字0,对应0V。也就是说,如果使用数字信号来控制LED灯,那么LED灯只有两种状态,亮或者灭。

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图31

模拟信号在0-3.3V范围内有无数个值,0-3.3V映射到行空板模拟引脚上变成了0-4095。也就说如果使用模拟信号控制LED灯,那么LED灯的亮度就会有很多种状态,LED灯的亮度可以随着模拟值变化而变化(LED灯由逐渐亮——逐渐灭)。

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图32

3.认识模拟量超声波传感器

模拟量超声波测距传感器是一款开放式双探头的超声波测距模块,输出模拟电压值。这个模块是如何实现测量距离的呢?超声波模块有两个探头,一个探头用来发射信号,另一个探头用来接收遇到障碍物返回的电压信号。

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图33

由于行空板的模拟引脚ADC精度为12bit,因此返回的0-3.3V电压信号会被映射为0-4095的模拟信号值,也就是我们如果直接使用读取模拟引脚指令,读取P21引脚的模拟信号为0-4095之间的值。将检测到的模拟值代入距离公式进行计算,就可以得出测出的距离。

4.指令学习

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图34

挑战自我

这节课我们学习了使用超声波传感器测距,但其实超声波传感器测出的是一个模拟电压值,通过公式转换后,才能得到我们想要的距离值。有没有一种简单的方式,可以直接读取超声波传感器测出的距离呢?其实在pinpong库中有提供模拟量超声波测距传感器的库,点击“扩展”,在pinpong库中找到“模拟超声波测距传感器”并点击,完成添加。

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图35

模拟超声波测距传感器库中只有两条指令,分别是模拟量超声波初始化引脚指令与读取模拟量超声波指令。第一条指令用于初始化引脚,第二条指令用于读取超声波传感器检测到的距离。大家可以体验一下使用超声波库中的指令来测距,具体使用方法如下:

【行空板】用Python玩转开源硬件-第05课:湖水液位监测仪图36

附件下载:
下载附件第5课 湖水液位监测仪.zip

(如有其它问题,请添加微 信咨询:DFRobot2019)


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

本版积分规则

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

硬件清单

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

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

mail