广数系统自动模式暂停_自学单片机第三十三篇:自动浇水系统

自动浇水是需要传感器的信号辅助的一个实例。不过为了简便操作,我们假设了一些条件。首先是一个自动浇水的示意图,我们先看下如何实现自动浇水。

e326d6dc8f7775a2c0b7c8107d440269.png

图中有三个传感器,分别是湿度传感器1,湿度传感器2,液位传感器1。一个开关,一个指示灯,一个水泵电机。设计目的:实现自动浇水功能。设计功能:1,自动检测土壤湿度。2,自动检测水位最低位置。3,自动浇水。4,指示灯提示。端口分配:P10:手动开关,P11:液位1,P12:液位2,P13:湿度1,P14:湿度2。          P20:水泵。P21:指示灯。工作模式:1,按下手动开关P10一次,系统开始运行,每工作十秒钟检测一次水位和湿度,检测中,指示灯会点亮,检测完毕,指示灯熄灭。一直循环执行此操作。2,当湿度变低,土壤电阻增大,湿度传感器就会传入信号,此时液位正常,则水泵开始工作,工作5秒后,进入等待,系统暂停5分钟,目的是为了防止水流太大,土壤渗水慢,造成溢水。五分钟后再次检查,若湿度异常,则继续加水,然后暂停,如此往复,知道湿度正常,或者液位变得过低。电机工作中,指示灯长亮,系统等待中,指示灯亮十秒,熄灭十秒。3,当按下手动开关第二次,水泵会强制上水5秒。4,当按下手动开关第三次,所有设备关闭,指示灯熄灭。通过以上描述,基本已经知道这个自动浇水系统的工作方式了。接下来,我们尝试写下程序代码。

b3e7798d872aa1dec0989fdd7d5703ee.png

78d108adb4eec2091939bde262316356.png

88c50b37e5f91f0de05bcf78ae61c3fa.png

cfd90b94918e9424ab096a851db5b737.png

09cab7a6b5dc2868d7474af506c8b37e.png

由于我们使用的是延时模式,所以在采集按键动作上,会存在一些延迟,为了让程序自动工作,我们就需要在程序中添加循环语句,但是不可避免的循环语句会造成循环中,无法读取按键状态,尤其是在延时过程中,程序是处于暂停状态的,尽管如此,这样也是可以解释的,就是当处于工作状态时,按键是被限制的,以防误操作。如果后期学习了中断,就可以更加优化了。程序中的延时只有2秒,主要是为了方便调测代码,实际的可以根据情况增加,由于我使用的是int型,所以最大时间是13秒左右。过长的时间,可以通过多次延时实现。接下来是软件仿真。近期均没有实际操作电路,是因为家中有了一个宝宝,为了防止她在不注意的情况下误食电子元件,于是把设备都保存起来了,所有就没有实际进行电路操作,如果后期有时间,会进行实际的连线。如果有兴趣的同学可以自己试试,把实际情况反馈给我,因为毕竟仿真和实际是有不同的。

51d092b2334150a292c1bdee3ef9ebeb.png

首先我们打开仿真并运行代码,所有端口都是高电位,拨码开关我选择了低电位,这是因为,低电位是湿度正常0,液位正常0,的状态。模式转换开关我选择了自复位按钮来实现。水泵的上端采用了继电器来控制,主要是为了增加控制电流,三个小灯是为了状态指示,用来反应程序执行到了哪一步。

5f22880490db22aab428f2438f09ec6b.png

单击一下自复位按钮,此时程序进入模式1,开始扫描液位和湿度,状态灯D1开始闪烁,D3熄灭D2点亮,表示此时正在模式1中运行。

6411595ecdac759761a24851fdc2542a.png

当我把湿度信号调整为高电位1,则水泵就会立即启动,工作一段时间后停止,然后等待一段时间,如果湿度依然为1,就会继续工作。直到湿度为0,或者液位过低为1,才会停止。

99a089e3fecc1f4f701968dcebb941fc.png

这是我把液位调整为1的状态,此时可以看到继电器已经断开,水泵停止。

9b4d3cbf1b032077ceed69fa4f437053.png

再次单击自复位按键,此时进入模式2,D2、D3都熄灭,水泵强制工作一段时间,此时不判断液位和湿度。有一点需注意,模式1切换模式2的过程,有些不太灵敏,因为在模式1中,我们有一个液位的检测过程,在检测过程中,你按下按键,是不会检测按键的,也就无法切换到模式2,所以需要切换时,可以看到D1熄灭了,就可以按下按键了,此时模式1中已经检测完毕,正在进入按键判断,可以长按,有按键弹起检测,不会出现连续动作的现象。

297dc4a978534be72e11834066b8a2b7.png

当模式2中水泵工作完毕,此时D3会点亮,D1熄灭,表示代码已经运行结束。

150d11dfeb304053427bfa09aa490f70.png

再次单击按键,就会进入模式3,输出端口会全部清空,恢复到初始状态。以上就是自动浇水系统的全部内容,主要是说明了传感器信号的采集和使用,对于这种需要实时动作的,我们就很难使用延时来做到即扫描按键,又操作水泵,因为顺序执行同时包含循环语句,就会干完一个再去干另一个,难免顾此失彼。但是后期我们学习了中断就可以完成了。一些特定的事件可以用中断来完成。不占用程序步骤。关于这个小实验,你有什么好的想法吗?欢迎留言讨论。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值