查看: 2432|回复: 13

blinker物联网教程——11、自动灌溉

[复制链接]

该用户从未签到

发表于 2021-3-12 11:30 | 显示全部楼层 |阅读模式
本帖最后由 海神 于 2021-6-7 11:05 编辑

简介

农业是用水大户,近年来农业用水量约占经济社会用水总量的62%,部分地区高达90%以上,农业用水效率不高,节水潜力很大。大力发展农业节水,在农业用水量基本稳定的同时扩大灌溉面积、提高灌溉保证率,是促进水资源可持续利用、保障国家粮食安全、加快转变经济发展方式的重要举措。
在自动灌溉系统中,我们使用了水泵电机与土壤温湿度传感器,其中,土壤温湿度传感用来收集土壤数据,从而监测土壤是否缺水,同时还会把收集到的数据给反馈到blinker手机APP上,达到合适的浇水条件时便打开水泵进行灌水,从而达到自动灌溉的目的。


土壤湿度传感器
zdgg2.png
此传感器属于模拟输入传感器,插入土壤中将采集到的湿度,进行模拟放大,可以得到一个模拟数值。我们可以通过这个模拟数值来判断当前土壤的湿度情况。
水泵电机
zdgg.png
我们采用一个3V的立式小型潜水泵,可以直接将下端沉入水中,底部吸水进入,连接出水管喷水。理论上是可以直接接在主板引脚上,通过IO口的通断实现电机控制。但一般的电机我们不直接接在主板的引脚上,因为在运动时可能会产生较大的反向电流,从而烧毁主板。所以我们将水泵电机连接在继电器上,通过继电器的开关来控制水泵电机的开合,从而控制开关水。


硬件

wifiduino主板*1
wifiduino扩展板*1
DHT11温湿度传感器*1
土壤温湿度传感器*1
继电器*1
水泵电机*1

软件

blinker app
在blinker的设备中,我们需要添加三个数据控件,分别显示展示空气温度、空气湿度、土壤湿度的实时数据。


代码

代码中我们实时监测空气温度、空气湿度、土壤湿度的实时数据。当满足灌溉条件时候(这个温湿度条件是根据不同植物的生长属性来制定),我们就打开继电器,让连接在继电器上的电磁阀导通,打开水闸,进行灌水。
  1. #define BLINKER_WIFI
  2. #include <Blinker.h>
  3. #include <DHT.h>

  4. volatile int hum;
  5. volatile int tem;
  6. volatile int soil;
  7. DHT dhtD7(D7, 11);

  8. char auth[] = "dae8eaxxxx8";
  9. char ssid[] = "mxxxxxn";
  10. char pswd[] = "cdxxxxxx51";
  11. BlinkerNumber Number1("num-abc");
  12. BlinkerNumber Number2("num-abd");
  13. BlinkerNumber Number3("num-abe");
  14. void dataStorage(){
  15.    Blinker.dataStorage("num-abc", hum);
  16.    Blinker.dataStorage("num-abd", tem);
  17.    Blinker.dataStorage("num-abe", soil);
  18. }
  19. BlinkerText Text1("TextKey");

  20. void setup(){
  21.   Blinker.begin(auth,ssid,pswd);
  22.   hum = 0;
  23.   tem = 0;
  24.   soil = 0;
  25.   pinMode(D13, OUTPUT);
  26.    dhtD7.begin();
  27.   Blinker.attachDataStorage(dataStorage);
  28. }

  29. void loop(){
  30.   hum = dhtD7.readHumidity();
  31.   tem = dhtD7.readTemperature();
  32.   soil = analogRead(A0);
  33.   delay(100);
  34.   Number1.print(hum);
  35.   Number2.print(tem);
  36.   Number3.print(soil);
  37.   if (soil < 200) {
  38.     Text1.print("灌溉中");
  39.     digitalWrite(D13,HIGH);

  40.   } else if (soil >= 200) {
  41.     Text1.print("湿度正常");
  42.     digitalWrite(D13,LOW);
  43.   }
  44.   Blinker.run();

  45. }
复制代码

blinker定制软件界面

zdgg24.png zdgg23.png zdgg26.jpg
随后添加一个图表控件,设置图表控件添加三个键名以及对应的显示文本,与以上上个按键名称相对应。环境湿度——num-abc;环境温度——num-abd;土壤湿度——num-abe
zdgg25.png
再添加一个文本控件,用来做警报反馈。
zdgg21.png
设置成功后,回到主界面,调整各个控件的位置达到想要的界面效果,点击解锁,完成控件编辑。

zdgg22.png






硬件连接



将温湿度传感器接在D7接口中,继电器接在D13接口中。土壤湿度传感器接线在A0接口中。
土壤湿度传感器插入在植物土壤中,水泵电机放置在水中,保证水泵底部接触到水,同事水泵的接线位置保证不与水接触。水泵出水口连接水管,水管放入植物花盆中。

zdgg.png


观察现象

观察blinker界面中各传感器反馈的数据.
zdgg27.jpg zdgg28.png zdgg29.png
同时在土壤干燥时,观察是否自动打开水泵浇水。




blinker物联网教程目录


该用户从未签到

发表于 2021-3-18 12:05 | 显示全部楼层
可以再加个流量传感器,监测泵了多少水,然后自动关水泵

点评

对的,这就是选器件的问题了。当然也可以自己测试并设定,测试水泵打开一分钟可以抽多少容量的水,在程序里计算浇不同植物需要多少水,然后换算成打开水泵的时间便可。  详情 回复 发表于 2021-3-18 12:10

该用户从未签到

 楼主| 发表于 2021-3-18 12:10 | 显示全部楼层
myself1820 发表于 2021-3-18 12:05
可以再加个流量传感器,监测泵了多少水,然后自动关水泵

对的,这就是选器件的问题了。当然也可以自己测试并设定,测试水泵打开一分钟可以抽多少容量的水,在程序里计算浇不同植物需要多少水,然后换算成打开水泵的时间便可。

该用户从未签到

发表于 2021-3-19 16:27 | 显示全部楼层
海神 发表于 2021-3-18 12:10
对的,这就是选器件的问题了。当然也可以自己测试并设定,测试水泵打开一分钟可以抽多少容量的水,在程序 ...

这样也可以

该用户从未签到

发表于 2021-3-21 14:13 | 显示全部楼层
请问硬件连接可以详细点吗,新手,有点不太懂怎么连接

该用户从未签到

发表于 2021-5-5 22:33 | 显示全部楼层
海神大佬,10,11,12行代码应该怎么改

点评

自己的设备KEY值,要连接热点的账号和密码  详情 回复 发表于 2021-5-6 08:54

该用户从未签到

 楼主| 发表于 2021-5-6 08:54 | 显示全部楼层
sl020408 发表于 2021-5-5 22:33
海神大佬,10,11,12行代码应该怎么改

自己的设备KEY值,要连接热点的账号和密码

该用户从未签到

发表于 2021-5-17 21:14 | 显示全部楼层
海神 发表于 2021-5-6 08:54
自己的设备KEY值,要连接热点的账号和密码

大佬,这程序是否可以上传到esp8266上

点评

可以啊,IDE配置不一样,代码引脚宏定义不一样,其他应该不用修改,不想那么麻烦的话可以选wifiduino  详情 回复 发表于 2021-5-18 09:18

该用户从未签到

 楼主| 发表于 2021-5-18 09:18 | 显示全部楼层
sl020408 发表于 2021-5-17 21:14
大佬,这程序是否可以上传到esp8266上

可以啊,IDE配置不一样,代码引脚宏定义不一样,其他应该不用修改,不想那么麻烦的话可以选wifiduino

该用户从未签到

发表于 2021-5-18 13:38 | 显示全部楼层
灌溉是只有自动的吗?还是有按键可以另行控制的?

点评

当然可以,还可以在blinker中,加个按钮,手机点按钮,控制灌溉  详情 回复 发表于 2021-5-19 09:35
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

esp32s2 在Arduino IDE调试USB CDC
esp32s2 在Arduino IDE调
各位大佬好,最近尝试弄清如何使用esp32s2的usb功能。然后在Github上找的代码,放到自
一直想做个飞行器,但是出了电小问题
一直想做个飞行器,但是出
这是主函数的源码 extern uint8_t PWM_PIN[8]; void initOutput();//初始化函数 void
Arduino mega2560 usb串口01被modbus master库占用,无法下载程序
Arduino mega2560 usb串口
Arduino mega2560 用来测试modbus master通信,因未发现串口可选择,直接下载了串口(
DIY炫彩灯带,竟如此简单,更有硬件开发工具免费领!
DIY炫彩灯带,竟如此简单
什么是涂鸦Arduino SDK? Arduino 是全球最流行的开源硬件平台,涂鸦官方推出的 Ardui
.h .cpp源代码转.ino草图
.h .cpp源代码转.ino草图
在Github上下载了源码,是.h 和.cpp文件,请问一下,如何才可以转成可以在arduinoIDE
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表