回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

#决赛# 全民来环保--水质地图建设 简单

头像 海川 2023.08.22 229 1

【项目背景】跌跌撞撞进入第三轮比赛,拿到物联网还可以这样玩的题目,我陷入了深思,我知道赛事方希望通过这个题目找到更具创新性的应用场景。但是我对创新思维这一块严重不足,而且能走到第三轮已经深感荣幸。所以一度想放弃。在第二轮比赛中的主题是环保,曾经想做一个水质检测的项目,因为畏难而放弃。在今年三月份参与了一个腾讯双师创客营的活动,指导学生用3dONE创建了一个环保船的模型项目。认识到我国乡村水域污染严重,希望通过环保船来治理家乡村口的水塘。当时环保船设计了一个水质检测的功能,但并没有实现。在项目创作过程中,越来越多的觉得自己有责任为此贡献一份力量。我告诉孩子们:当你参加绘画比赛时,你要绘出我们的环保船,当你参加作文比赛时,要写出我们的环保船,当你参加演讲比赛时,也要以环保船为主题演讲,哪怕你什么比赛也不参加,在家里,向家人,向亲戚介绍我们的环保船,让更多的人了解环保理念,环保知识,参与到环保建设中来。所以今天我要利用这次难得的机会,践行我对孩子们的承诺,也许我无法完成赛事方交给我的任务,但我希望通过把我的思路写出来,让更多的人了解我们的想法,能理解的我们的项目,能参与到环境保护,自觉从我做起,减少对环境的污染。重视农村水域环境,加强农村水域治理。相信一定有人能帮助我实现这个项目的。好在赛事方对我们的鼓励,不比技术,只看脑洞,所以我打算坚持写出自己的思路。

  项目设计任务一:水质检测

        通过学习查询得知水质检测项目多达42种,常用的检测项目也有9种之多,如何做好水质检测,通常最为方便的是TDS和PH值,因为在了解TDS检测笔之前,我对如何测水质一无可知。但我看到污染的水很浑浊,所以我认为这样的水的透光线会很差,一个很简单的方法就是可以通过光线值来测试水质的好坏。如果用TDS值来测水质,必须添购TDS测试笔,而掌控板,行空板等都有光线传感器,如果能找到TDS与光线值之间的某种对应关系,通过光线值就能获得TDS值,从而了解水质情况。

       虽然现在市面上各种TDS检测笔有很多,做这样一个通过光线值检测TDS的项目也许没有必要。但是我还是想把我的想法实现。也许这就是创客应该具备的精神。

【水质检测实施计划】

1、水质检测盒制作

      由于光线值受环境光影响很大,为此我有一个初步想法,把水样,掌控板放置在一个容器中与外界隔离开来。左边放置光源,可调节亮度,中间放置水样,右边放置掌控板。

2、水源采样

      武汉水资源比较丰富,我准备采集东湖水,长江水,汉江水,木兰湖水,井水,自来水,纯净水,村口干净水塘中的水,村口污染水塘中的水,田间用水等水样进行测试。

3、水质检测记录

4、数据分类,比对

5、数据反馈

项目任务二:水质地图建设

       在完成任务一的过程中,我发现采集水样测试仅凭我一人也紧能做到有限的几个水域的水质检测,不能让更多的人参与进来。如何能引起更多人关注水质情况。我结合每天的各城市天气预报,想到要做一个水质地图,在地图上标示出各水域的水质优劣,让大家通过图像能更清淅反应各地水质情况,通过TDS或光线值区分水的等级,通过在地图上用不同颜色标示水的不同等级。

【水质地图实施计划】

1、 远端数据的收集与存储

        想让更多的人学习环保知识参与数据的收集,我决定用mind+的实时模式设计一个答题小游戏,在网上收集学习了一些游戏的制作。但是本次任务是水质地图,所以我就把游戏习题简单化,后续希望大家设计更优秀的游戏。

       游戏的目的是传播环保知识,同时限制一些不必要的提交。我简单的在网上收集了十五个试题让参与者回答,计分。当分数达到一定数值时可以参与数据的提交。把提交的数据保存在tinywebdb中。

2、 远端数据与本地数据的交互

        在本地建立siot来处理数据,由于mind+的python模式并不支持tinywebdb,所以如何把远端数据拿到本地使用让我想了很久。好在上传模式可以支持tinywebdb,所以我想到在上传模式中拿到tinywebdb中的数据,再利用MQTT传到siot。最后再在python模式中使用siot中的数据。

        这个想法从理论上我认为可行,但网上没看到相关教程,所以我花了好长时间在三种模式中进行数据传递的尝试。一次一次的失败后,在DFROBOT技术支持的耐心指导下,我总算完成了数据在三种模式中的数据传递。

3、 本地数据的处理与显示

      远端数据拿到本地后,我们就可以按照第二轮比赛中的方法建立数据大屏显示。

4、 本地数据在地图上的显示(学习文件1)(学习文件2)

        收集的数据主要包括城市,水域,水质,经度,纬度,Tds,水质等级等,其中通过经度,纬度信息,调用foinum库,可生成带有标示的地图。

5、 本地数据传给远端。

        本地通过传感器收集到的数据远给tinywebdb的过程同样借助上传模式进行。

6、 数据地图在远端的显示

        如何把本地生成的地图html文件传给远端,我想到的方法有两个,一是把网页文件存放在某个个人空间,然后把网址链接地址回传但真心不会。另一种,通过邮件把文件传给远端。

看起来一个想法很简单,但是在实现过程中发现很麻烦,很多知识不会,好在dfrobot的技术支持特别耐心指导,多次远程帮助我克服困难。到目前为止,生成地图和会传送地图,显示地图还没成功,但我相信一定能最终完成这个项目。

【任务1实施步骤】

步骤1 硬件准备

材料清单

  • 掌控板 X3
  • LED X1
  • 纸盒 X2

步骤2 测试盒制作

测试盒3.jpg

测试盒用一个鞋盒来隔离外界光线,左边放一LED灯,两边放一个掌控板,中间用一个蚊香液盒来隔断,两个盒中中间掏空一个圆,用来放置水样。

步骤3 水样采集

取水样.jpg
水样.jpg

    实际采样比计划采样少了,木兰湖太远,去取样估计得一天,由于时间有限,决定先把这几个水样测试好,后期再增加水样。采样也是一件很麻烦的事,这也是我从水质检测想到建立水质地图的原因,让不同地区的人在各地分别采样,把数据收集,再通过地图显示出来。

步骤4 软件准备

由于是使用掌控板,我决定就用mpython软件。

软件下载地址 https://study.labplus.cn/#/download

下载安装完成后运行mpython界面如下:

mpython界面.png

此时把掌控板过上电脑。连接.png

先烧录固件。

烧录.png

 

由于是使用掌控板,我决定就用mpython软件。

软件下载地址 https://study.labplus.cn/#/download

下载安装完成后运行mpython界面如下:

mpython界面.png

此时把掌控板过上电脑。连接.png

先烧录固件。

烧录.png

 

步骤5 编写程序

开始希望两个掌控板发送光线值,一个掌控板接收光线值并显示。实际操作中发现无法实现,所以增加了一个掌控板。两组掌控板分别发送和接收。发送程序如下:发送.png

接收程序如下:

接收.png

分别上传到每组掌控板中,只需把无线频道改为13(或其他值)。

开始希望两个掌控板发送光线值,一个掌控板接收光线值并显示。实际操作中发现无法实现,所以增加了一个掌控板。两组掌控板分别发送各接收。发送程序如下:发送.png

接收程序如下:

接收.png

分别上传到每组掌控板中,只需把无线频道改为13(或其他值)。

步骤6 水样检测与记录

      在实际检测过程中,发现左右两边光源无法一致,导致数据不稳定,无法有效的测量数据。因此我只能暂时放弃检测计划。后续我想看能不能找到一个稳定的光源再次尝试。

     虽然任务1以失败告终,但在实施过程中想到了任务2水质地图建设,所以我继续坚持,做这些工作主要是让更多人了解水质污染,关心环保。所以不能怕失败。虽然任务2更难。我还是 尽最大努力来一步一步往前走。

【任务2实施步骤】

1、硬件准备

材料清单

  • 行空板 X1 链接
  • Sci X1 链接
  • GNSS北斗定位模块 X1 链接
  • TDS传感器 X1 链接
  • 掌控板 X1 链接
  • 两头PH2.0-3P白色硅胶绞线 X若干
  • 两头PH2.0-4P白色硅胶绞线 X若干

2.软件准备

   Mind+1.8.0版本     (注:测试版本 )         SIoT V2版本

  下载链接:

(1) 腾讯微云下载(推荐) (2)百度云盘 提取码:mind    (3)阿里云盘 提取码: 0c0s

3.答题小游戏制作

   制作答题小游戏的目的是普及环保知识,收集各地水质情况,增加一定趣味性。他是可以单独作为一个程序运行在参与答题人的电脑上,由于他不在我们局域网中,所以不能用SIOT,我采用tinywebdb进行数据的传输和保存。

    制作答题小游戏在mind+的实时模式中完中,运行程序后,进入实时模式,添加背景,角色,创建变量,列表。

  一共创建了四个列表,分别是题目,选项A,选项B,答案,他们对应每一问题的题目,选项和答案,所以在列表中要对应。(选项1,2更为选项A,B)

 列表.png

新建 变量 城市,答案,得分,经度,纬度,水域,水质TDS,水质,综合,A,B和角色image.png
 

答题板对应的代码为答题板.png

   选项A对应的代码为

选项A.png

 

  选项B对应的代码为

选项B.png

 角色提示只需添加上图第三个当背景换成丛林时隐藏即可。

人物使用的是凯西,当时随便选的主要看他有四种造型,大家可任意找喜色的人物和背景。当点击他是会出题。对应的代码如下。

人物.png

由于数据的提交要用到tinywebdb,所以我们要先到tinywebdb中注册。百度搜索tinywebdb。

搜索.png

选择第一个进入注册。界面.png

注册后登录,保存API地址,用户名(user),密钥(secret)信息。

进入.png

完成这些工作后在mind+中实时模式中添加扩展tinywebdb。

扩展png.png

编写角色的提交代码如下提交代码.png

 

在这个代码中tinywebdb的设置时复制API地址,用户名(user),密钥(secret)信息到tinywebdb的设置中填写。

设置.png

运行我们的小游戏,根据要求答题,填写水质数据后提交,我们重新登录tinywebdb,浏览数据。

浏览.png

可以发现我们提交的数据成功的上传到tinywebdb中了。

4.上传模式中tinywebdb与siot中的数据传递。

   由于Python模式不支持tinywebdb,所以实时模式中收集的数据无法中Python模式中使用。好在上传模式同时支持tinywebdb与siot,所以我在上传模式中通过掌控板作为桥梁建立tinywebdb与siot的数据传递。

 (1)行空板搭建siot,登录siot服务器,创建主题。主题.png

(由于我使用的是轻薄本笔记本电脑,USB接口不够,我采用无线方式连接siot,网址为192.168.0.104,如果通过USB接口连行空板地址使用10.1.2.3。行空板搭建siot的方法参照硬件中行空板链接。)

(2)掌控板上电脑USB接口,编写程序。

        打开mind+后,选择上传模式,点击扩展,添加主控为掌控板,添加网络服务,WiFi,MQTT和TinyWebDb。编写程代码如下。

实时模式程序.jpg

运行程序后tinywebdb数据完美取得发送到siot中。

siot中数据.png

至此我们完成了数据的传递。此过程中tinywebdb设置与实时模式一样,MQTT模式设置如下:

MQTT设置png.png

5.本地数据的采集。

   除了通过游戏收集远端数据外,在本地我们也可通过TDS传感器测量水质,通过GNSS北斗定位模块测量经纬度,通过Sci连接TDS传感器和GNSS北斗定位模块,也可把GNSS北斗定位模块接在行空板上。此外我还在行空板上添加了一个语音模块,主要考虑到行空板不便于信息输入。在对城市进行输入时可采用语音识别的形式来输入。

(1)Python模式下进行库的导入,加载官方的行空板、代码生成器,百度语音,MQTT-py、语音识别与合成模块,SCI模块和GNSS北斗定位模块。

添加模块1.png
添加模块2.png
添加模块3.png

(2)硬件连接。(运行结果图中有,这里就不给图片了)

(3)编写程序。

  为了简化程序,我把城市,水域信息固定在自己所在的城市,只测量经纬度和TDS值。

python程序1.JPG
python程序2.JPG

(4)运行结果如下。

运行结果1.jpg

siot中成功获取得数据。

运行结果2.png

     至此我们在siot上可以获取远端数据和本地实时测量数据。语音识别城市和水域我也能实现了,这里暂时不加到本程序中。

 

6.大屏显示。

        大屏2.png

       由于在屏中显示数据较少,很容易实现,左边放了一个走马灯,轮播各水域,绿水与污水对比,唤醒人们对水污染的重视,中间想放一个实现的效果图,由于目前还不会folium,网上找了一个想实现的图,当然我们要标示的是检测的水源地,通过颜色来区分各地的水质级别。城市,水域,水质的数据我们无法通过传感器获得,前面设想通过语音来获取,这时发现大屏有输入框,所以也可以通过输入框来实现。

  7.地图的创建。

    我们已经能够获得经纬度数据各水质数据,如何通过这些数据生成地图我到目前还没有明白。一直在学习云天写的行空定位这篇文章,试图复现此文场景,为此添购了语音识别传感器和北斗传感器,可惜云天大佬写得简略,我在学习过程中遇到很多困难,于是我联系云天本人请教。不过由于涉及到很库的安装,一次次安装失败,所以一直没能复现。最后一天,我决定继续尝试。下面我将把学习过程完整记录下来。

(1)本地测试程序后补充如下语句把数所保存到文本文件中存储。

    在项目文件夹中先创建my.text,写入一个城市水域数据,因为第一个数据前不需加:,所以要预先放一个数据。程序运行完成后结果如下。

 

结果.png

(2)编写程序创建地图。

代码
import folium
from folium.plugins import LocateControl 
import webbrowser  
import exifread
import re
m=folium.Map([30.1639, 114.4400],  
            tiles= 'https://rt0.map.gtimg.com/tile?z={z}&x={x}&y={-y}',
            attr='腾讯图',
            zoom_start=15,
          )
m.add_child(folium.LatLngPopup())
LocateControl().add_to(m)
folium.Marker(
    location=[30.604567, 114.190496],
    popup='东湖 171.22 二级',
    icon=folium.Icon(color='red')
).add_to(m)
 
folium.Marker(
    location=[30.60689, 114.258952],
    popup='汉江 98.123 一级',
    icon=folium.Icon(color='green')
).add_to(m)
m.save('./map.html')
search_text = "cdn.jsdelivr.net"
replace_text = "gcore.jsdelivr.net"
#replace_text = "fastly.jsdelivr.net"
# 如果还是不行就把上面的注释取消掉
with open(r'map.html', 'r', encoding='UTF-8') as file:
    data = file.read()
    data = data.replace(search_text, replace_text)
with open(r'map.html', 'w', encoding='UTF-8') as file:
    file.write(data)
webbrowser.open('map.html')

(3)程序运行结果水质地图1.png

水质地图2.png

(4)上述程序中我用给定的经纬度运行显示出了我所想表现的效果。但数据并不是siot中传过来的,我们只需要my.text文件读出以:分隔成列表,再通过列表读取所需要的数据。

添加1.png
添加2.png

   加上上述代码后我们就能通过读取保存的txt文件来生成水质地图。

总结:非常高兴参加此次活动,在设计水质地图过程中得到dfrobot技术支持和群友的无私帮助,收获很多。由于水平有限,时间有限,很多任务没有完成。但是好在整体算是把该项目弄清晰了,只是还有好多地方需要完善。比如我一直觉得数据在传输过程中会出现混乱,所以我在中间设置综合变量把数据打包传输。本地城市和水域的提交由于行空板不方便输入,最初想通过语音输入实现,后来没有加进去。另外大屏设计过程中感觉很不方便,程序需要改进。为了宣传环保,设计的答题小游戏很简单,后续可以改进,增加题目和趣味性,让更多的人愿意参与。同时希望dfrobot能像scratct一样能有一个网络平台上传设计的小游戏,让更多的人能下载学习。Python模式能支持tinywebdb更好。

评论

user-avatar
  • hacker_

    hacker_2023.08.28

    666

    0