但是很多养花的小伙伴会因为出差、旅游或者一些其他的原因,不能及时照料它们,短时间可能会影响其正常生长,长时间甚至会死亡。
为此,我们将创造一位植物管家,24小时全方位照料花花草草茁壮成长!
二、实践目标
本实践项目运用掌控板作为智能终端,通过土壤湿度传感器和防水温度传感器来采集土壤的湿度和温度,并借助水泵和继电器实现自动浇水和温度警报的功能。
三、知识目标
- 认识土壤湿度传感器、防水温度传感器、水泵、继电器等硬件设备;
- 理解上述不同元器件的使用和接线方法,能根据连线图进行实物连接;
- 掌握以掌控板为智能终端,通过BXY软件编写代码采集土壤温湿度数据的方法;
- 掌握以掌控板为智能终端,通过BXY软件编写代码使水泵与继电器运转的方法;
四、实践准备
硬件清单:
掌控板x1 |
I/O扩展板x1 |
土壤湿度传感器及模拟连接线x1 |
12V电源适配器x1 |
|
|
|
|
带水管潜水泵(4.5~12V)x1 |
简易继电器模块x1 |
Type-C&Micro二合一USB线x1 |
18B20 防水温度传感器套件x1 |
|
|
|
|
软件使用:BXY编程软件
其他:
- 一盆植物
- 一烧杯水
知识链接
土壤湿度传感器
简介:这是一个简易的水分传感器,可用于检测土壤的水分。当土壤缺水时,传感器输出值将减小,反之将增大。传感器表面做了镀金处理,可以延长它的使用寿命。
防水温度传感器
简介:这是温度传感器的一种,相较于LM35温度传感器,防水18B20温度传感器最大的特点在于其防水性。正因此,它可以用于一些特定场景,比如土壤温度检测、热水箱温度控制等。
水泵
简介:水泵是输送液体或使液体增压的机械。这是新款潜水泵,可放置水中直接使用,4.5~12V宽电压供电范围,兼容性好。可用来做一些抽水类的小项目,像人造喷泉或者瀑布类的。也可用来为植物浇水,甚至为鱼缸换水。采用静音设计,工作时的音量小于40分贝。内有一个过滤器,并装有吸盘,因此能够紧紧地粘在光滑的表面上。
继电器
简介:继电器是一种用小电流去控制大电流运作的具有隔离功能的自动开关元件。关于继电器的详细介绍可见附录1。
Tips:由于掌控板的供电电压5V大于水泵的最小工作电压4.5V。但是实际驱动起来运行会很不稳定。因此可通过继电器来使水泵工作。
蜂鸣器
简介:蜂鸣器是一种能够发出类似蜂鸣声音的器件。这里的蜂鸣器已被内置在I/O扩展版上。
五、实践过程
在本项目中,我们将利用土壤湿度传感器和防水温度传感器,分三步创造一位植物管家,来实时检测植物生长时土壤的温湿度,并利用水泵和继电器实现自动浇水和温度警报。
- 实时检测土壤湿度
- 添加自动浇水功能
- 添加温度警报功能
任务1:土壤湿度实时检测
1、硬件搭建
STEP1:将掌控板插入I/O扩展板,注意正反,OLED屏幕朝扩展板上“掌控板”图标方向
STEP2:通过传感器连接线将土壤湿度传感器连在扩展板的P1端口。其中,红线和黑线分别对应电源正极和负极,蓝线对应信号线,用来传输信号。
STEP3:通过USB连接线将掌控板接到计算机。
连接完成后如下图,
2、软件编写
STEP1:软件设置
1、创建与保存项目文件
(1)启动BXY编程软件,选择主控类型“掌控板”。
(2)新建项目,保存并命名为“z2.1”。
STEP2:程序编写
from mpython import * # 导入mpython模块
p1=MPythonPin(1,PinMode.ANALOG) # 将P1设置为"PinMode.ANALOG"模式
while True:
#土壤湿度
value1=p1.read_analog() # 读取P1引脚模拟量
oled.DispChar("analog:%d" %value1,30,20) #屏幕显示
oled.show()
oled.fill(0)
print(value1)#串口打印
print("------------------")
3、运行调试
STEP1:将土壤湿度传感器镀金部分插入花盆土壤中约2厘米。
注:未镀金部分不可触水。
STEP2:点击“烧录”上传程序并运行“z2.1”文件
STEP3:观察效果
观察掌控板,我们可以发现测得的土壤湿度对应的模拟值在屏幕上实时显示
观察软件终端界面,我们同样可以看到测得的土壤湿度对应的模拟值。
注:使用micro:bit V1 版时,需要在菜单栏中,点击串口,才会打开终端的串口显示。
若读取不出,可尝试重启软件。
任务2:自动浇水
在上个任务中,我们已经完成了对于土壤湿度的实时检测,接下来,我们将在此基础上,添加自动浇水功能。当检测到的土壤湿度的模拟值低于临界值时,打开继电器开关,利用水泵进行浇水。
1、硬件搭建
STEP1:利用螺丝刀将水泵正负线与转接头连接起来,步骤与成型图如下,
(1)松掉转接头螺丝
(2)将线插入,注意正负(棕/红—正;蓝/黑—负)
(3)拧紧螺丝
STEP2:利用继电器将12V电源开关与水泵的转接头连接起来
STEP3:通过连接线将继电器连在扩展板的P0端口。
连接完成后整体如下图,
STEP4:将继电器开关拨至NO端
注:继电器上有一个开关,NO 为断开,表示默认继电器状态为断开,需要程序写入一个高电平,控制其闭合;NC 为闭合,表示默认继电器状态为闭合,需要程序写入一个高电平,控制其断开。这里,我们设定默认状态为断开。
2、软件编写
STEP1:软件设置
1、创建与保存项目文件
(1)启动BXY编程软件,选择主控类型“掌控板”。
(2)新建项目,保存并命名为“z2.2”。
STEP2:程序编写
from mpython import * # 导入mpython模块
p1=MPythonPin(1,PinMode.ANALOG)
# 实例化MPythonPin,将P1设置为"PinMode.ANALOG"模式
P0=MPythonPin(0,PinMode.OUT)
# 实例化MPythonPin,将P0设置为"PinMode.OUT"模式
while True:
#土壤湿度
value=p1.read_analog() # 读取P1引脚模拟量
oled.DispChar("土壤湿度:%d" %value,30,14)
oled.show()
oled.fill(0)
if value <= 210: #当土壤湿度低于210的时候进行浇水
P0.write_digital(1) # P0写高电平
sleep(1)
if value > 210:
P0.write_digital(0) # P0写低电平
3、运行调试
STEP1:将水泵浸没于水桶之中
注:水泵不能空转,必须将黑色水泵头沉入水中,否则可能会烧毁硬件。
STEP2:将水管出水口插入花盆中
STEP3:将12V电源开关插上220V电源插座
STEP4:点击“烧录”上传程序,并运行
观察花盆,由于目前花盆中土壤的湿度低于我们设定的临界值,因此,继电器导通,可以看到烧杯中的水随管子注入花盆之中。
注:程序中的“210”是我们依据实验情况设定的缺水时的临界值,不同的植物对水的需求量不同。
任务3:温度警报
在上个任务中,我们已经完成了植物在缺水时的自动浇水功能,而由于温度对于植物的生长同样重要,过高或过低的温度皆会对植物生长产生影响。因此接下来,我们将在上述实验基础上,添加温度警报功能。当检测到的温度超出生长范围时,使我们的装置发出警报声。
1、硬件搭建
STEP1:将18B20 数字温度防水传感器与可插拔传感器转接器连接起来,步骤与成型图如下,
(1)向下按压住转接器上方的三个塑料按键
(2)将线插入,注意对应接口(红线(VCC)接C,黑线(GND)接B,黄线(DATA)或绿线(DATA)接A)
(3)松掉对塑料按键的按压,使线固定住
STEP2:通过连接线将防水温度传感器连在扩展板的P13端口。其中,红线和黑线分别对应电源正极和负极,绿线对应信号线,用来传输信号。
连接完成后如下图,
注:土壤湿度传感器是模拟量传感器,而防水温度传感器是数字量传感器,需要查询掌控板引脚图,查看对应引脚是否支持接口,如果接到不支持的接口则无法正常读取数据。掌控板引脚说明见附录2。
2、软件编写
STEP1:软件设置
1、创建与保存项目文件
(1)启动BXY编程软件,选择主控类型“掌控板”。
(2)新建项目,保存并命名为“z2.3”。
STEP2:程序编写
from mpython import * # 导入mpython模块
import music #导入音乐模块
from machine import Pin
import onewire, ds18x20
import time
p1=MPythonPin(1,PinMode.ANALOG)
# 将P1设置为"PinMode.ANALOG"模式
P0=MPythonPin(0,PinMode.OUT)
# 将P0设置为"PinMode.OUT"模式
ow = onewire.OneWire(Pin(Pin.P13))
ds = ds18x20.DS18X20(ow)
roms = ds.scan()
print('found devices:', roms)
while True:
#土壤湿度
value1=p1.read_analog() # 读取P1引脚模拟量
oled.DispChar("土壤湿度:%d" %value1,30,14)
oled.show()
oled.fill(0)
if value1 <= 210: #当土壤湿度低于210的时候进行浇水
P0.write_digital(1) # P0写高电平
if value1 > 210:
P0.write_digital(0) # P0写低电平
#温度
print('temperatures:', end=' ')
ds.convert_temp()
time.sleep_ms(750)
for rom in roms:
print(ds.read_temp(rom), end=' ')
print()
if ds.read_temp(rom) >= 31 or ds.read_temp(rom) <= -3:
music.pitch(131, 500); #蜂鸣器发音,1 低 C
sleep(1)
3、运行调试
STEP1:将防水温度传感器金属端插入土壤中约1.5厘米。
STEP2:打开蜂鸣器开关
STEP3:点击“烧录”上传程序,运行并观察软件
观察BXY界面,我们可以看到所测得的土壤中的温度在终端中实时显示着
并且我们发现,当测得的土壤中的温度≥31或≤-3℃时,蜂鸣器就会发出警报声。
注:程序中的“31”和“-3”是我们依据实验情况设定的温度临界值,不同的植物适合不同的生长温度。
六、延伸拓展
思考:
1、关于植物的生长,除了温度和土壤湿度之外还有什么因素会对其有影响呢?我们手头是否有工具可以对其进行测量?
2、我们都知道植物生长是通过光合作用的,但是到了黑夜因为没有了阳光而导致植物无法进行光合作用,如果我们想要加快植物生长就可以在光线不足的时候对其进行补光。但是如果一直亮着植物的补光灯会很费电,我们是否可以为我们的管家添加自动补光的功能弥补这一不足呢?
附录
附录1:
拓展阅读:继电器
详细介绍:继电器(英文名称:relay)是一种电控制器件,是当输入量(激励量)的变化达到规定要求时,在电气输出电路中使被控量发生预定的阶跃变化的一种电器。它具有控制系统(又称输入回路)和被控制系统(又称输出回路)之间的互动关系。通常应用于自动化的控制电路中,它实际上是用小电流去控制大电流运作的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。光看文字描述有点难以理解,下面看看图示帮助理解继电器的作用。
继电器工作原理图:
这里有两个电源回路,一个是线圈部分的回路另一个是设备(灯珠)端的回路。我们把线圈铁芯这端理解成micro:bit这端,设备(灯珠)端我们理解成水泵;线圈电源就是micro:bit的输出电压5V,被控制端电源电压就是我们驱动水泵的12V电源。我们通过5V的电压控制线圈铁芯这个电磁铁,当继电器高电平时,线圈通电,将衔铁吸引,这样设备端的回路就接通了。
继电器的作用:
继电器是具有隔离功能的自动开关元件,广泛应用于遥控、遥测、通讯、自动控制、机电一体化及电力电子设备中,是最重要的控制元件之一。继电器一般都有能反映一定输入变量(如电流、电压、功率、阻抗、频率、温度、压力、速度、光等)的感应机构(输入部分);有能对被控电路实现“通”、“断”控制的执行机构(输出部分);在继电器的输入部分和输出部分之间,还有对输入量进行耦合隔离,功能处理和对输出部分进行驱动的中间机构(驱动部分)。作为控制元件,概括起来,继电器有如下几种作用:
1)扩大控制范围:例如,多触点继电器控制信号达到某一定值时,可以按触点组的不同形式,同时换接、开断、接通多路电路。
2)放大:例如,灵敏型继电器、中间继电器等,用一个很微小的控制量,可以控制很大功率的电路。
3)综合信号:例如,当多个控制信号按规定的形式输入多绕组继电器时,经过比较综合,达到预定的控制效果。
4)自动、遥控、监测:例如,自动装置上的继电器与其他电器一起,可以组成程序控制线路,从而实现自动化运行。
附录2:掌控板引脚说明
引脚 |
功能描述 |
P0 |
模拟/数字输入,模拟/数字输出 |
P1 |
模拟/数字输入,模拟/数字输出 |
P2 |
模拟/数字输入 |
P3 |
模拟输入,连接掌控板EXT鳄鱼夹,可连接阻性传感器 |
P4 |
模拟输入,连接掌控板光线传感器 |
P5 |
数字输入,模拟/数字输出, 连接掌控板按键A |
P6 |
数字输入,模拟/数字输出, 连接掌控板蜂鸣器,不使用蜂鸣器时,可以作为数字IO使用 |
P7 |
数字输入,模拟/数字输出, 连接掌控板RGB LED |
P8 |
数字输入,模拟/数字输出 |
P9 |
数字输入,模拟/数字输出 |
P10 |
模拟输入,连接掌控板声音传感器 |
P11 |
数字输入,模拟/数字输出, 连接掌控板按键B |
P12 |
保留 |
P13 |
数字输入,模拟/数字输出 |
P14 |
数字输入,模拟/数字输出 |
P15 |
数字输入,模拟/数字输出 |
P16 |
数字输入,模拟/数字输出 |
3V3 |
电源正输入:连接USB时,掌控板内部稳压输出3.3V,未连接USB可以通过输入(2.7-3.6)V电压为掌控板供电 |
P19 |
数字输入,模拟/数字输出,I2C总线SDA,与内部的OLED和加速度传感器共享I2C总线 |
P20 |
数字输入,模拟/数字输出,I2C总线SDA,与内部的OLED和加速度传感器共享I2C总线 |
GND |
电源GND |
Touch_P(P23) |
TouchPad |
Touch_Y(P24) |
TouchPad |
Touch_T(P25) |
TouchPad |
Touch_H(P26) |
TouchPad |
Touch_O(P27) |
TouchPad |
Touch_N(P28) |
TouchPad |