Mind+Python编程进阶系列课程—05鱼缸自动水位控制
本帖最后由 木子呢 于 2021-11-25 10:25 编辑鱼缸自动水位控制课程目录:
[*]Python编程进阶系列教程—序章
[*]Python编程进阶系列课程—01 趣味数字电导仪
[*]Python编程进阶系列课程—02 简易气象站
[*]Python编程进阶系列课程—03 自制通信设备(上)
[*]Python编程进阶系列课程—03 自制通信设备(下)
[*]Python编程进阶系列课程—04 穿戴计步器
[*]Python编程进阶系列课程—05鱼缸自动水位控制
一、实践情境
随着我国小康社会的全面建成,人们的生活水平也不断提高,越来越多的人喜欢在家中养殖观赏鱼来陶冶情操。在鱼缸养鱼时,充足的水量对鱼至关重要。然而,有时候长时间出门在外,我们往往没法及时给鱼缸补水,以致对鱼的生存产生影响。鉴于此,本实践将设计一个鱼缸自动补水系统,弥补这一不足。
二、实践目标
本实践项目运用micro:bit作为智能终端,通过液位传感器来采集鱼缸的水位数据并将其上传至物联网平台,之后使用继电器和水泵来实现补水功能。
三、知识目标
1、认识液位传感器、继电器和水泵,掌握其使用方法
2、掌握运用micro:bit作为智能终端,通过 Python 编程采集液位传感器数据的方式
3、掌握通过 Python 编程使继电器和水泵进行补水的方式
四、实践准备
硬件清单:
软件使用:mind+编程软件x1、SIoT系统软件x1
其他:
1、鱼缸 x1(可用花盆替代)
2、水桶 x1(可用烧杯替代)
3、十字/一字两用螺丝刀 x1
知识链接
[*]智能非接触式液位传感器
简介:智能型非接触式液位传感器可用于检测是否有液体存在,使用时将传感器贴在容器壁上即可,无须与液体直接接触。当检测到有液体时,指示灯亮起。
[*]简易继电器模块
简介:继电器是一种用小电流去控制大电流运作的具有隔离功能的自动开关元件。
Tips:虽然micro:bit的供电电压5V大于水泵的最小工作电压4.5V,但是实际驱动起来运行会很不稳定。因此可通过继电器来使水泵工作。
[*]带水管潜水泵
简介:水泵是输送液体或使液体增压的机械。可放置水中直接使用,4.5~12V宽电压供电范围。可用来为植物浇水,甚至为鱼缸换水。
五、实践过程
在本项目中,我们将分两步,自制一个鱼缸自动补水系统,实现对鱼缸水位的实时监测以及自动补水功能。
1、实时监测鱼缸水位并将信息发送至SIoT物联网平台
2、添加反馈控制,实现自动补水功能
任务1:水位监测
1. 分析设计
在本任务中,我们将通过液位传感器,实时监测鱼缸的水位。这里,我们可通过扩展板将液位传感器与micro:bit开发板相连接,采集水位情况,并将获取到的数据上传到SIoT物联网平台上。
2. 硬件搭建
STEP1:通过传感器连接线将液位传感器连在扩展板的P1端口,如下图。
STEP2:将micro:bit开发板插入I/O扩展板,并通过USB连接线将micro:bit接到计算机。
3. 平台搭建
SIoT物联网平台的搭建方法可参考第三课。
4. 软件编写
在编写代码之前,我们依旧需要先对软件进行一些设置。
软件设置:
STEP1:创建与保存项目文件
启动Mind+软件,选择“Python模式”,另存项目并命名为“m鱼缸自动水位控制”。
STEP2:创建与保存python文件
创建一个python程序文件“任务一.py”,双击打开。
程序编写、运行及回顾:
STEP1:编写python程序
import time#导入时间库
import siot#导入siot库
from pinpong.board import Board,Pin#导入pinpong.board包中的Board,Pin模块
Board("microbit").begin()#初始化,选择板型和端口号,不输入端口号则进行自动识别
water_level = Pin(Pin.P1, Pin.IN) #初始化P1引脚为电平输入模式
SERVER = "192.168.9.66"#MQTT服务器IP地址
CLIENT_ID = ""#创建空消息队列
IOT_UserName ='siot'#用户名
IOT_PassWord ='dfrobot'#密码
IOT_pubTopic= 'microbit/005'#“topic”为“项目名称/设备名称”
siot.init(CLIENT_ID, SERVER, user=IOT_UserName, password=IOT_PassWord)#初始化,确定输入的用户名和密码正确
siot.connect()#连接
siot.loop()#循环
while True:#永久循环
v = water_level.read_digital()#读取引脚高低电平
print(v)#终端打印读取的电平状态
siot.publish(IOT_pubTopic, v)#发送消息
time.sleep(1)
Tips:上述“SERVER”中输入的是自己电脑的实际IP地址。
STEP2:运行程序并观察效果
(1)手握传感器,将其贴在鱼缸外壁上,并使监测点略高于水位线
(2)运行程序,观察软件终端
点击运行,可以看到终端内显示“连接成功”的提示字样,之后一直显示数字“0”,此时鱼缸内的水位线未达到传感器监测点。
(3)物联网平台网页端查看检测数据
首先找到我们的设备“microbit/005”,接着点击“查看消息”,
之后单击“显示/隐藏图表”和“自动刷新消息”,我们可以看到检测到的反馈数值实时自动刷新呈现在页面上,并以图表形式呈现了出来。
(4)将液位传感器慢慢往下移动,直至检测点在水位线以下。
(5)再次观察软件终端和网页平台,可以看到此时的数据变为了“1”。
Tips:若数值不变化可尝试按压“set”键1-4次,调整灵敏度。
STEP3:回顾程序
1、读取水位值
from pinpong.board import Board,Pin#导入pinpong.board包中的Board,Pin模块
water_level = Pin(Pin.P1, Pin.IN) #初始化P1引脚为电平输入模式
v = water_level.read_digital()#读取引脚电平
在使用micro:bit主控板和液位传感器进行检测时,我们将液位传感器和主控板上的P1引脚进行连接,而为了能够读取P1引脚上液位传感器检测出来的值,编程时,我们需要在导入模块后将P1引脚设定为电平输入模式“Pin.IN”,之后使用“read_digital()”来进行读取数值。
这里的“电平”是指电压,有高和低两种区别,当读取到的值为“1”时,也就指“高电平”,而当读到的值为“0”时,则指代“低电平”。
任务2:添加反馈
1.分析设计
在上个任务中,我们已经成功实现了对水位的实时检测。接下来,我们将在此基础上添加反馈控制,实现当水位不足时,为鱼缸补水。
这里,我们可在之前实时检测水位的基础上,对检测到的数据进行判别,当判别水量不足时进行补水。
2.硬件搭建
STEP1:利用螺丝刀将水泵正负线与转接头连接起来,步骤与成型图如下,
(1)松掉转接头螺丝
(2)将线插入,注意正负(棕/红—正;蓝/黑—负)
(3)拧紧螺丝
STEP2:利用继电器将12V电源开关与水泵的转接头连接起来
STEP3:通过连接线将继电器连在扩展板的P2端口
STEP4:将继电器开关拨至NO端
Tips:继电器上有一个开关,NO 为断开,表示默认继电器状态为断开,需要程序写入一个低电平,控制其闭合;NC 为闭合,表示默认继电器状态为闭合,需要程序写入一个高电平,控制其断开。这里,我们设定默认状态为断开。
3.软件编写
这里,我们依旧将先对Mind+编程软件进行设置,再编写Python程序。
软件设置:
STEP1:创建与保存python文件
新建一个python程序文件“任务二.py”,双击打开。
程序编写、运行及回顾:
STEP1:编写python程序
import time#导入时间库
import siot#导入siot库
from pinpong.board import Board,Pin#导入pinpong.board包中的Board,Pin模块
from pinpong.extension.microbit import * #导入pinpong.extension.microbit包中的所有模块
Board("microbit").begin()#初始化,选择板型和端口号,不输入端口号则进行自动识别
water_level = Pin(Pin.P1, Pin.IN) #初始化P1引脚为电平输入模式
pump = Pin(Pin.P2, Pin.OUT) #初始化P2引脚为电平输出模式
SERVER = "192.168.9.66"#MQTT服务器IP地址
CLIENT_ID = ""#创建空消息队列
IOT_UserName ='siot'#用户名
IOT_PassWord ='dfrobot'#密码
IOT_pubTopic= 'microbit/005'#“topic”为“项目名称/设备名称”
siot.init(CLIENT_ID, SERVER, user=IOT_UserName, password=IOT_PassWord)#初始化,确定输入的用户名和密码正确
siot.connect()#连接
siot.loop()#循环
while True:#永久循环
v = water_level.read_digital()#读取引脚电平
print(v)#终端打印读取的电平状态
siot.publish(IOT_pubTopic, v)#发送消息
if v==0: #未检测到水,缺水
display.show(Image.SAD)#显示图案sad
pump.write_digital(0) #输出低电平,补水
else: #检测到有水
display.show(Image.HAPPY)#显示图案happy
pump.write_digital(1) #输出高电平,不补水
time.sleep(1)
STEP2:运行程序并观察效果
(1)将水泵浸没于满水的水桶(烧杯)之中
Tips:水泵不能空转,必须将黑色水泵头沉入水中,否则可能会烧毁硬件。
(2)将水管出水口插入鱼缸中。
(3)将12V电源开关插上220V电源插座
(4)将液位传感器贴在鱼缸外壁上,且在水位之上
(5)运行程序,观察软件终端和SIoT物联网平台
点击运行按钮,终端显示“连接成功”。之后始终显示数值“0”,SIoT平台显示相同。
(6)观察鱼缸与点阵屏
观察鱼缸,可以发现,鱼缸内水量不足,micro:bit显示哭脸,这时水泵开始工作,将水桶中的水抽入鱼缸之中。当数值变为1,水位高于检测点时,水泵停止工作,同时点阵屏显示笑脸。
STEP3:回顾程序
1、控制继电器启停
from pinpong.board import Board,Pin#导入pinpong.board包中的Board,Pin模块
pump = Pin(Pin.P2, Pin.OUT) #初始化P2引脚为电平输出模式
pump.write_digital(1) #输出高电平
pump.write_digital(0) #输出低电平
为了能够控制作为执行器的水泵和继电器进行抽水,编程时,我们需要在导入模块后将继电器所在的P2引脚设定为电平输出模式,之后用“write_digital(1)”和“write_digital(0)”来分别输出高电平和低电平。
同时,由于继电器开关拨到了NO口,因此,此时,输入低电平方可使水泵工作。
2、点阵屏图案显示
display.show(Image.HAPPY)#显示图案happy
display.show(Image.SAD)#显示图案sad
在点阵屏上不仅能够显示字符,还可以通过屏幕对象的“show()”方法显示多种不同的表情图案等,如,
happy,sad,angry,silly,smile,heart,heart_small,arrow_n,arrow_s等。
六、巩固提高
1.项目小结
本节课我们以micro:bit为智能终端,结合液位传感器、继电器和水泵制作了一个鱼缸自动水位控制系统。首先设定一个水位标准并对鱼缸上的水位进行实时监测,之后对监测的结果添加反馈,当水位低于标准时通过继电器和水泵进行补水。
2. 项目拓展
观察SIoT物联网平台上的数据,分析每次加水的时间段,加水次数多,说明一次加水量少。尝试修改程序,增加每次的补水量,减少补水次数吧!
页:
[1]