JIAJIA 发表于 2023-3-3 15:54:45

【行空板】用Python玩转开源硬件第09课-IoT植物灌溉系统

本帖最后由 JIAJIA 于 2023-3-3 15:54 编辑

IoT植物灌溉系统
快节奏的生活中,养一盆绿植可以用来缓解压力和焦虑,现在很多人会在家里或办公室种植一些花花草草以净化空气,陶冶情操。很多养花的小伙伴会因为出差、旅游或者一些其他的原因,不能及时照料它们,短时间可能会影响其正常生长,长时间甚至会导致死亡。


植物跟宠物一样需要细心照料,它们对土壤湿度的要求极高,土壤湿度过低会造成植物缺水,土壤湿度过高会导致植物根系腐烂。如何才能做到合理浇水呢?接下来,使用行空板、土壤湿度传感器和水泵制作一款IoT植物灌溉系统,24小时监控植物的土壤湿度,自动灌溉系统还能解决不能及时浇水的问题。

任务目标

在行空板上通过植物两种状态图(缺水和健康)展示土壤湿度情况,并将实时采集到的土壤湿度数据发送到SIoT平台。为了更加人性化的控制浇水,设置了两种控制方式:手动控制、自动控制。

手动控制:通过手动控制区的“开”和“关”按钮,控制水泵的开启和关闭。

自动控制:通过自动控制区的“+”和“-”按钮,调节适合植物生长的土壤湿度阈值。当土壤湿度传感器检测到的土壤湿度值小于土壤湿度阈值时,自动打开水泵;反之,关闭水泵。

https://m.bilibili.com/video/BV1zT411Y7Ce?share_source=copy_web&vd_source=98de4a48f0ea2e3d30571e3541e90d99&code=091lm01w3I2ud03EeZ2w3Du4MN2lm01P&state=&wxfid=o7omF0b1PSmc9fLZunTNFwCaNDFc&share_times=1
知识点

1.掌握土壤湿度传感器的使用方法及工作原理
2.掌握继电器、水泵的使用方法及工作原理

材料清单

硬件清单:


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

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


动手实践

这节课中,主要是学习和了解土壤湿度传感器、继电器、水泵的使用方法,然后使用这些传感器制作一款IoT植物灌溉系统。接下来,通过三个小任务来完成,注意任务二和任务三分别实现两个独立功能!

任务一:探测土壤并控制水泵

这个任务,主要是学习使用土壤湿度传感器获取土壤湿度值,以及学习如何使用继电器控制水泵工作。

任务二:制作手动控制系统

通过“开”和“关”按钮,控制水泵打开或关闭。

任务三:制作自动控制系统

通过“+”和“-”按钮,调节土壤湿度阈值。系统会将土壤湿度传感器实时检测到的土壤湿度值与土壤湿度阈值进行判断,当土壤湿度值小于土壤湿度阈值时,自动打开水泵;反之,关闭水泵。最后将检测到的土壤湿度值与控制状态,发送到SIoT平台。

任务一:探测土壤并控制水泵

1.硬件连接

土壤湿度传感器是一款简易的水分传感器,可以用来检测土壤中的水分。继电器是一种电子元件,应用于自动控制电路中,作为一个“自动开关”。下面将土壤湿度传感器连接到行空板P21引脚,然后将继电器连接到行空板的P24引脚,水泵连接到继电器的VOUT端口,电池盒连接到继电器的VIN端口。硬件连接成功后,使用USB线将行空板连接到计算机。

注意:“土壤湿度传感器”与“继电器”以及“水泵”的相关介绍,见知识园地。


2.软件准备

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


3.编写程序

这个任务主要是学习如何获取土壤湿度传感器检测到的土壤水分值,以及使用继电器如何控制水泵开启与关闭。

(1)获取土壤湿度传感器的值

土壤湿度传感器模块上印有丝印“A”,说明土壤湿度传感器为模拟量传感器。


要获取土壤湿度传感器输入的模拟信号值,使用读取模拟引脚指令,并选择引脚为P21引脚。


然后使用显示文本指令,将土壤湿度传感器采集到的模拟信号值显示在行空板上。


(2)学习使用继电器控制水泵

继电器连接到行空板的P24引脚后,怎样才能通过继电器控制水泵工作呢?继电器模块上印有丝印“D”,说明继电器模块需要使用数字信号来控制。


使用增加按钮指令,在行空板屏幕上添加“打开”和“关闭”按钮,并分别设置对应的点击回调函数名为button_click1、button_click2。


点击行空板上的开始按钮,控制继电器输出高电平;点击关闭按钮,控制继电器输出低电平。因此在当点击回调函数button_click1被触发指令下,使用设置数字引脚指令,设置P24引脚输出高电平。在当点击回调函数button_click2被触发指令下,使用设置数字引脚指令,设置P24引脚输出低电平。


4.程序运行

点击运行,程序运行成功后,行空板上实时显示土壤湿度传感器检测到的模拟值。点击行空板上的打开按钮,继电器模块上的指示灯亮起,水泵开始工作。点击行空板上的关闭按钮,继电器模块上的指示灯关闭,水泵停止工作。

注意:1. 需要将电池盒上的开关,拨到ON端;

          2.避免损害水泵,水泵必须放入水中,不能空转。

          3.关于继电器模块上的NO、NC端的相关介绍,见知识园地。


5.试一试

我们能否通过土壤湿度来控制水泵呢?例如,当土壤湿度值小于500时,打开水泵;当土壤湿度值大于等于500时,关闭水泵。接下来,大家自己编程实现吧!

任务二:制作手动控制系统

1.编写程序在开始边编写程序之前,先来分析一下,这个任务中需要完成哪些功能。首先是行空板界面上的整体UI 界面设计,然后是植物状态显示区,根据土壤湿度传感器检测到的值切换健康和缺水图片;其次是控制状态显示区;最后是手动面板控制区,有手动控制按钮,以及水泵状态显示,还有控制水泵的开关按钮。


(1)整体UI界面设计

为了简化程序,这里将界面中的框以及不用变化的文字制作成了一张背景图。首先将这个任务要用的图片,从图片素材库中导入到文件系统。


使用显示图片指令,在行空板上显示背景图片。


在控制状态中显示手动控制,使用显示文字指令,设置显示控制状态为手动控制。


(2)植物状态切换

使用显示图片指令,在植物状态显示区,通过植物两种状态图(缺水和健康)展示土壤湿度情况。当土壤湿度传感器检测到的值小于500时,使用更新图片指令,更新为缺水图片;当土壤湿度传感器检测到的值大于等于500时,使用更新图片指令,更新为健康图片。


(3)实现按钮控制水泵

手动面板控制区中,有三个按钮,分别是手动控制按钮,以及控制水泵的开关按钮。下面使用增加按钮指令,在手动面板控制区分别添加这三个按钮。


手动控制按钮下方,还有一个水泵状态显示。使用显示文字指令,显示文字“水泵状态:”,并设置水泵状态为关。


点击手动控制面板区的开按钮,打开水泵,在当点击回调函数button_click2被触发指令下,使用设置数字引脚指令,设置P24引脚输出为高电平,并使用更新文本参数指令,更新水泵状态为开;点击手动控制面板区的关按钮,关闭水泵,在当点击回调函数button_click3被触发指令下,使用设置数字引脚指令,设置P24引脚输出为低电平,并使用更新文本参数指令,更新水泵状态为关。完整程序如下:


2.程序运行

点击运行,程序运行成功后,行空板界面显示效果如下:当检测到的土壤湿度小于500时,植物状态显示区显示缺水图片,当检测到的土壤湿度大于等于500时,显示健康图片。点击手动控制面板中的开按钮,打开水泵,并更新水泵状态为开;点击关按钮,关闭水泵,更新水泵状态为关。


任务三:制作自动控制系统

1.编写程序

任务三作为一个独立的控制系统,需要具体实现哪些功能呢?首先在自动控制面板区可以通过“+、-”按钮,调节土壤湿度阈值。然后系统会根据检测到的土壤湿度值与设置的土壤湿度阈值进行比较,当土壤湿度传感器检测到的值,小于设置的土壤湿度阈值时,开启水泵;反之,关闭水泵。最后是将土壤湿度传感器检测到的土壤湿度值以及控制状态上传到SIoT。


(1)整体UI界面设计

在界面显示上,自动控制界面只比手动控制界面多了一个土壤湿度阈值的显示。因此,直接从任务二的程序上进行修改即可。


(2)设计阈值调节功能

新建变量土壤湿度阈值,并初始化该变量的值为500。并在当点击回调函数button_click2、当点击回调函数button_click3指令下,定义变量土壤湿度阈值为全局变量。


按下+按钮,设置变量土壤湿度阈值+1;按下-按钮,设置变量土壤湿度阈值-1。并使用更新文本参数指令,更新土壤湿度阈值为调节后的值。


在自动控制模式中,怎样才能实现自动浇水功能呢?使用条件分支语句,判断变量土壤湿度是否小于变量土壤湿度阈值,如果是,就打开水泵(设置数字引脚P24输出为高电平),并更新水泵状态为开;否则,就关闭水泵(设置数字引脚P24输出为低电平),更新水泵状态为关。


(3)行空板向SIoT平台发送数据

长按行空板的“Home”键进入菜单页,点击“应用开关”,检查SIoT服务是否开启,如果显示“已禁用”,点击SIoT选项,切换SIoT状态为“已启用”。


要向SIoT平台发送数据,要有发送相关指令才能实现。但是现在行空板的指令区中没有这样的指令,该怎么办呢?点击“扩展”,在官方库中找到“MQTT-py”并点击,完成添加。


完成“MQTT的初始化——发起连接——保持连接——订阅”这四个步骤。这里需要订阅两个主题,分别是“IoT植物灌溉系统/土壤湿度值”与“IoT植物灌溉系统/控制模式”。


然后在循环执行指令中,使用MQTT发布指令,将土壤湿度传感器检测到的土壤湿度值发送到“IoT植物灌溉系统/土壤湿度值”主题中。在当点击回调函数button_click1被触发指令下,发送自动控制到“IoT植物灌溉系统/控制模式”主题中。完整程序如下:


2.程序运行

点击运行,程序运行成功后,点击自动控制按钮,进入自动控制模式。可以通过“+、-”按钮调节土壤湿度阈值,当土壤湿度传感器检测到的值小于设定的阈值时,自动打开水泵;反之,关闭水泵。


登录SIoT平台,还可以查看当前土壤湿度传感器检测到的土壤湿度值以及控制模式。


知识园地

1.了解土壤湿度传感器的工作原理

土壤湿度传感器是一个简易的水分传感器,可用于检测土壤中的水分。当土壤中水分含量越大,传感器输出的值就越大;当土壤中的水分越小,传感器输出的值就越小。因此土壤湿度传感器通过判断土壤中水分含量的多少来判定土壤湿度的大小。

土壤是湿度传感器是如何工作的呢?


如图所示,当土壤湿度传感器的探头悬空时,电路处于开路状态,因此土壤湿度传感器输出的值为0。当土壤湿度传感器的探头插入土壤中时,由于土壤中的水分含量不同,土壤的电阻值就不同,电路就处于导通状态,最后将土壤的电阻经过电路转换成电压,输出土壤湿度模拟值。

2.认识继电器

继电器是一种电子控制器件,我们可以将这个电子控制器件理解为一个开关,只是这个开关不是用手按,而是用“电”来带动的。这个套件中,给大家配的是一个简易继电器模块,这个模块由VIN端和VOUT端以及控制电路组成。


在继电器的VIN端接上电源,VOUT端接上水泵。在程序中,通过给控制电路设置高电平与低电平,从而实现对VOUT端的水泵进行“开”或“关”的控制。

这款继电器同时还保留了NC、NO的功能,只需要简单的调节拨动开关,就可以切换NO和NC模式,继电器上的NO与NC是什么意思呢?

NO, 即nomal open,常开触点,当继电器未通电时,处于断开状态。

NC, 即nomal close,常闭触点,当继电器未通电时,处于导通状态。

3.认识水泵

水泵是如何工作的呢?为什么控制继电器输出高电平,水泵就可以工作;输出低电平,水泵就可以停止工作?

水泵作为一款执行器,需要有电源和控制开关。电池盒为水泵提供电源,继电器作为水泵的控制开关,只有通过继电器才能实现打开或关闭水泵。


水泵又称为直流水泵,可以简单理解为水泵内部有一个直流电机。控制继电器输出高电平,就是给水泵通电,直流电机就开始旋转。电机旋转过程中,从吸水口吸入水,水跟着电机一起旋转,最后从排水口将水排出,实现抽水。


挑战自我

任务二和任务三是两个独立的控制功能,接下来大家试一下,将这两个任务合并为一个。在控制面板区同时显示手动控制与手动控制两个功能。比如,在行空板左侧设置手动控制功能,在右侧设置自动控制功能。程序效果图如下:

注意:图片素材库中有提供对应的背景图。


附件下载




三春牛-创客 发表于 2023-3-3 22:43:21

不错不错

三春牛-创客 发表于 2023-3-3 22:44:46

很赞啊!学习了!

花生编程 发表于 2023-3-3 22:46:50

厉害厉害

花生编程 发表于 2023-3-3 22:47:53

赞赞赞赞赞

花生编程 发表于 2023-3-3 22:49:36

学习了,感谢分享

花生编程 发表于 2023-3-3 22:50:57

不错!!挺实用的。

手机连接万物 发表于 2023-12-10 14:57:05

继续学习!
页: [1]
查看完整版本: 【行空板】用Python玩转开源硬件第09课-IoT植物灌溉系统