D1 MINI 制作可测温、土壤湿度的智能浇水器-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1664|回复: 15

[分享] D1 MINI 制作可测温、土壤湿度的智能浇水器

[复制链接]
发表于 2022-2-18 15:15 | 显示全部楼层 |阅读模式
本帖最后由 jerryiot 于 2022-2-18 15:26 编辑

D1 MINI + 2路继电器 制作可测温、土壤湿度的智能浇水器,可设置浇水的土壤湿度阈值、浇水的时间周期,当检测到土壤湿度低于阈值时自动浇水。
成品:

需要的材料:
D1MIINI芯片、2路 继电器、DS18B20测温度、220V-5V稳压、还有土壤湿度传感器
自己用洞洞板焊接了一下,技术很捉急,惨不忍睹,背面就不展示了。
组装起来就可以了:
设计了一下点灯的APP界面:
界面可以获取DS18B20测量的室温,土壤湿度,WIFI信号强度以及两个开关:浇水泵和循环水泵。浇水启动一次持续10s,循环水泵是用来沼泽过滤的,冬天沼泽过滤撤掉了。
最后贴一下代码:
  1. #define BLINKER_WIFI
  2. #include <Blinker.h>
  3. #include <OneWire.h>
  4. #include <DallasTemperature.h>

  5. #define ONE_WIRE_BUS 2 // DS18B20 on NodeMCU pin D4
  6. OneWire oneWire(ONE_WIRE_BUS);
  7. DallasTemperature DS18B20(&oneWire);

  8. char auth[] = "";
  9. char ssid[] = "";
  10. char pswd[] = "";

  11. // 新建组件对象
  12. BlinkerButton Button1("btn-w");
  13. BlinkerButton Button2("btn-s");

  14. BlinkerNumber TEMP("temp");
  15. BlinkerNumber JSCOUNT("jscount");
  16. BlinkerNumber SYSRSSI("rssi");
  17. BlinkerNumber SOILVALUE("soil");
  18. BlinkerText SYSTIME("systime");
  19. BlinkerSlider SliderWP("wp");
  20. BlinkerSlider SliderWY("wy");

  21. //定义土壤湿度
  22. #define soilPin A0

  23. //Relay
  24. #define RELAY1 D5
  25. #define RELAY2 D6

  26. float temp_read = 0;


  27. //浇水计数器
  28. int TOTALCOUNT=0;

  29. //浇水阈值(土壤湿度低于该值浇水)
  30. int WY = 20;

  31. //浇水周期(单位小时)
  32. int WP = 4;

  33. void sliderWYcallback(int32_t value)
  34. {
  35.     BLINKER_LOG("get slider value: ", value);
  36.     WY = value;
  37. }

  38. void sliderWPcallback(int32_t value)
  39. {
  40.     BLINKER_LOG("get slider value: ", value);
  41.     WP = value;
  42. }

  43. void heartbeat()
  44. {
  45.     TEMP.print(temp_read);
  46.     String tstr = getTime();
  47.     int tmpsoil = getSoilValue();
  48.     SYSRSSI.print(WiFi.RSSI());
  49.     SYSTIME.print(tstr);
  50.     SOILVALUE.print(tmpsoil);
  51.     JSCOUNT.print(TOTALCOUNT);
  52.     SliderWP.print(WP);
  53.     SliderWY.print(WY);
  54.     if (digitalRead(RELAY2) == HIGH)
  55.     {
  56.         Button2.color("#708090");
  57.         Button2.print("off");
  58.     }
  59.     else if(digitalRead(RELAY2) == LOW)
  60.     {
  61.         Button2.color("#6666ff");
  62.         Button2.print("on");
  63.     }
  64. }

  65. // 按下按键即会执行该函数
  66. void button1_callback(const String & state)
  67. {
  68.     BLINKER_LOG("get button state: ", state);
  69.     digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
  70.     startRainOneTime();
  71. }
  72. void button2_callback(const String & state)
  73. {
  74.     BLINKER_LOG("get button state: ", state);
  75.     if (state == BLINKER_CMD_ON) {
  76.         digitalWrite(RELAY2, LOW);
  77.         Button2.color("#6666ff");
  78.         Button2.print("on");
  79.     }
  80.     else if (state == BLINKER_CMD_OFF) {
  81.         digitalWrite(RELAY2, HIGH);
  82.         Button2.color("#708090");
  83.         Button2.print("off");
  84.     }
  85. }

  86. String getTime()
  87. {
  88.     uint32_t time=millis();
  89.     int day=time / 86400000;
  90.     int hour=(time-(86400000*day)) / 3600000;
  91.     int min=(time-(86400000*day)-(3600000*hour)) / 60000;
  92.     String timeStr=String(day)+"天"+String(hour)+"时"+String(min)+"分";

  93.     if (hour > 0 and hour % WP == 0 and getSoilValue() < WY)
  94.     {
  95.         Blinker.print(timeStr);
  96.         Blinker.print("自动浇水一次!");
  97.         
  98.         startRainOneTime();
  99.     }
  100.    
  101.     return timeStr;
  102. }

  103. int getSoilValue()
  104. {
  105.     int soilValue;
  106.     int soilMoisture;
  107.     //读取土壤传感器上的电压值
  108.     soilValue = analogRead(soilPin);
  109.     //把电压值按照[0,1023]映射到[100,0]
  110.     soilMoisture = map(soilValue,0,1023,100,0);
  111.     return soilMoisture;
  112. }

  113. void startRainOneTime()
  114. {
  115.     //继电器开10s 用于浇水
  116.     digitalWrite(RELAY1, !digitalRead(RELAY1));
  117.     Blinker.delay(10000);
  118.     digitalWrite(RELAY1, !digitalRead(RELAY1));
  119.     TOTALCOUNT++;
  120. }

  121. void setup()
  122. {
  123.     // 初始化串口
  124.     Serial.begin(115200);
  125.     BLINKER_DEBUG.stream(Serial);
  126.     BLINKER_DEBUG.debugAll();
  127.         
  128.     // 初始化有LED的IO
  129.     pinMode(LED_BUILTIN, OUTPUT);
  130.     digitalWrite(LED_BUILTIN, HIGH);

  131.     //Relay
  132.     pinMode(RELAY1, OUTPUT);
  133.     digitalWrite(RELAY1, HIGH);

  134.     pinMode(RELAY2, OUTPUT);
  135.     digitalWrite(RELAY2, LOW);
  136.    
  137.     // 初始化blinker
  138.     Blinker.begin(auth, ssid, pswd);

  139.     Button1.attach(button1_callback);
  140.     Button2.attach(button2_callback);
  141.     SliderWP.attach(sliderWPcallback);
  142.     SliderWY.attach(sliderWYcallback);
  143.    
  144.     Blinker.attachHeartbeat(heartbeat);
  145.     DS18B20.begin();
  146. }

  147. void loop() {
  148.     Blinker.run();

  149.     DS18B20.requestTemperatures();
  150.     temp_read = DS18B20.getTempCByIndex(0);
  151.     Serial.print(temp_read);
  152.     BLINKER_LOG("temp: ", temp_read);
  153.     Blinker.delay(2000);
  154.    
  155. }
复制代码


发表于 2022-4-9 01:30 | 显示全部楼层
能发下电路图学习一下吗
 楼主| 发表于 2022-4-12 18:11 | 显示全部楼层
510506404 发表于 2022-4-9 01:30
能发下电路图学习一下吗

没画过电路图 就根据代码连就好了
发表于 2022-5-4 19:23 | 显示全部楼层
Blinker的库文件怎么下载呀
发表于 2022-5-4 19:31 | 显示全部楼层
暮光大盗 发表于 2022-5-4 19:23
Blinker的库文件怎么下载呀

会了会了
发表于 2022-5-5 17:39 | 显示全部楼层
学习了,谢谢楼主
发表于 2022-5-5 19:00 | 显示全部楼层
楼主,能发一下点灯app软件各组件对应的代码名称吗?
 楼主| 发表于 2022-5-5 19:02 | 显示全部楼层
暮光大盗 发表于 2022-5-5 19:00
楼主,能发一下点灯app软件各组件对应的代码名称吗?

// 新建组件对象
BlinkerButton Button1("btn-w");
BlinkerButton Button2("btn-s");

BlinkerNumber TEMP("temp");
BlinkerNumber JSCOUNT("jscount");
BlinkerNumber SYSRSSI("rssi");
BlinkerNumber SOILVALUE("soil");
BlinkerText SYSTIME("systime");
BlinkerSlider SliderWP("wp");
BlinkerSlider SliderWY("wy");
发表于 2022-5-5 19:07 | 显示全部楼层
jerryiot 发表于 2022-5-5 19:02
// 新建组件对象
BlinkerButton Button1("btn-w");
BlinkerButton Button2("btn-s");

可以发一下手机app上的截图吗?
 楼主| 发表于 2022-5-5 19:07 | 显示全部楼层
暮光大盗 发表于 2022-5-5 19:07
可以发一下手机app上的截图吗?

时间太久了 已经 改了很多版了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 09:48 , Processed in 0.108537 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表