HOOOS

如何用Arduino DIY一个智能浇花神器?下雨天自动停浇的那种!

0 9 绿植守护者 Arduino智能家居自动浇花
Apple

告别“手残党”!用Arduino打造你的专属智能浇花系统

你是不是也经常忘记浇花,或者一不小心就浇多了,导致心爱的花花草草不是干枯而死,就是烂根say goodbye?别担心,今天就教你用Arduino,轻松DIY一个智能浇花系统,让你的植物喝水再也不用你操心,而且还能省水环保!

面向人群:

  • 对电子制作有一定兴趣的初学者
  • 想要解放双手,又想养好花草的“懒人”
  • 希望体验DIY乐趣的科技爱好者

所需技能:

  • 具备基础的Arduino编程知识 (别怕,我会尽量讲得通俗易懂!)
  • 了解一些简单的电子元件知识
  • 有动手能力和耐心

项目目标:

  • 制作一个能够自动检测土壤湿度并进行浇水的系统
  • 实现通过手机APP远程控制浇水功能
  • 加入雨水传感器,实现下雨自动停止浇水,节约用水

一、准备工作:磨刀不误砍柴工

  1. Arduino开发板: 推荐使用Arduino Uno,简单易用,资料丰富。
  2. 土壤湿度传感器: 用于检测土壤的湿度,可以选择模拟土壤湿度传感器,或者数字土壤湿度传感器。我个人比较喜欢模拟的,可以更精确地读取湿度值。
  3. 水泵: 将水从水箱抽到花盆里,选择12V的小型水泵即可。
  4. 继电器模块: 用于控制水泵的开关,因为Arduino的IO口电压和电流都比较小,无法直接驱动水泵。
  5. 雨水传感器: 检测是否下雨,避免雨天重复浇水,浪费水资源。可以选用简易的雨滴传感器。
  6. ESP8266 WiFi模块: 用于连接WiFi,实现手机APP远程控制功能。NodeMCU也是一个不错的选择,它集成了ESP8266,使用更方便。
  7. 杜邦线: 用于连接各个模块。
  8. 面包板: 用于搭建电路。
  9. 水管和水箱: 用于输送和储存水。
  10. 手机APP开发工具: 比如Blynk、EasyIoT等,可以快速搭建远程控制界面。(当然,你也可以用更高级的方案,比如自己写APP,或者用微信小程序,这里我们先用简单的)

温馨提示: 以上元件在某宝上都可以轻松买到,而且价格也不贵,全套下来估计也就几十块钱。建议新手购买带教程的套装,可以省去不少麻烦。

二、电路连接:让你的花花草草“有水喝”

  1. 土壤湿度传感器连接:

    • 将土壤湿度传感器的VCC引脚连接到Arduino的5V引脚。
    • 将GND引脚连接到Arduino的GND引脚。
    • 将信号引脚(A0)连接到Arduino的模拟输入引脚A0。
  2. 水泵和继电器模块连接:

    • 将继电器模块的VCC引脚连接到Arduino的5V引脚。
    • 将GND引脚连接到Arduino的GND引脚。
    • 将信号引脚(IN)连接到Arduino的数字输出引脚D2。(你可以根据自己的喜好选择其他的数字引脚)
    • 将水泵的正极连接到继电器模块的NO (常开)端子。
    • 将水泵的负极连接到电源的负极。
    • 将电源的正极连接到继电器模块的COM (公共)端子。
  3. 雨水传感器连接:

    • 将雨水传感器的VCC引脚连接到Arduino的5V引脚。
    • 将GND引脚连接到Arduino的GND引脚。
    • 将信号引脚(D0)连接到Arduino的数字输入引脚D3。(同样,你可以自由选择)
  4. ESP8266 WiFi模块连接:

    • 将ESP8266的VCC引脚连接到Arduino的3.3V引脚。(注意是3.3V,不是5V!)
    • 将GND引脚连接到Arduino的GND引脚。
    • 将TX引脚连接到Arduino的数字引脚D10 (或者其他的,在代码里对应修改即可)。
    • 将RX引脚连接到Arduino的数字引脚D11 (同上)。

电路连接示意图:

+-----------------------+    +-----------------------+    +-----------------------+
| Soil Moisture Sensor  |    |     Relay Module      |    |    Rain Sensor        |
+-----------------------+    +-----------------------+    +-----------------------+
| VCC  ---- Arduino 5V  |    | VCC  ---- Arduino 5V  |    | VCC  ---- Arduino 5V  |
| GND  ---- Arduino GND |    | GND  ---- Arduino GND |    | GND  ---- Arduino GND |
| A0   ---- Arduino A0  |    | IN   ---- Arduino D2  |    | D0   ---- Arduino D3  |
+-----------------------+    +-----------------------+    +-----------------------+

+-----------------------+
|     Water Pump        |
+-----------------------+
| + ---- Relay NO        |
| - ---- Power Supply -  |
+-----------------------+

Relay COM ---- Power Supply +

+-----------------------+
|    ESP8266            |
+-----------------------+
| VCC  ---- Arduino 3.3V|
| GND  ---- Arduino GND |
| TX   ---- Arduino D10 |
| RX   ---- Arduino D11 |
+-----------------------+

温馨提示: 电路连接一定要仔细,特别是正负极,接错很容易烧坏元件。如果不确定,可以多参考一些电路图或者视频教程。

三、代码编写:让Arduino“聪明”起来

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

// WiFi配置
const char* ssid = "你的WiFi名称";
const char* password = "你的WiFi密码";

// Blynk配置
char auth[] = "你的Blynk Auth Token";

// 引脚定义
const int moisturePin = A0;  // 土壤湿度传感器引脚
const int pumpPin = 2;       // 水泵控制引脚
const int rainPin = 3;        // 雨水传感器引脚

// 湿度阈值 (根据实际情况调整)
const int dryThreshold = 600; // 土壤干燥的阈值
const int wetThreshold = 400; // 土壤湿润的阈值

// 浇水时长 (单位:毫秒)
const int wateringTime = 5000; // 浇水5秒

// 状态变量
bool isRaining = false;     // 是否正在下雨
bool pumpOn = false;       // 水泵是否正在运行

// 定时器
unsigned long lastWateringTime = 0; // 上次浇水时间
const long wateringInterval = 86400000; // 每天最多浇一次水 (24小时)

void setup() {
  Serial.begin(115200);

  // 初始化WiFi和Blynk
  WiFi.begin(ssid, password);
  Blynk.config(auth);
  Blynk.connect();

  // 引脚模式设置
  pinMode(pumpPin, OUTPUT);
  pinMode(rainPin, INPUT_PULLUP); // 使用内部上拉电阻

  // 初始状态:关闭水泵
  digitalWrite(pumpPin, HIGH); // 继电器高电平关闭水泵
}

void loop() {
  Blynk.run();
  checkRain();
  checkMoistureAndWater();
}

// 检测是否下雨
void checkRain() {
  int rainValue = digitalRead(rainPin);
  //雨水传感器检测到雨水时,rainValue为LOW
  isRaining = (rainValue == LOW);

  // 将雨水状态发送到Blynk APP
  Blynk.virtualWrite(V1, isRaining); // V1 是Blynk APP上的显示控件

  Serial.print("Rain Sensor Value: ");
  Serial.println(rainValue);
  Serial.print("Is Raining: ");
  Serial.println(isRaining);
}

// 检测土壤湿度并浇水
void checkMoistureAndWater() {
  // 读取土壤湿度值
  int moistureValue = analogRead(moisturePin);

  // 将湿度值映射到0-100范围
  int moisturePercentage = map(moistureValue, 1023, 0, 0, 100);

  // 将湿度百分比发送到Blynk APP
  Blynk.virtualWrite(V0, moisturePercentage); // V0 是Blynk APP上的显示控件

  Serial.print("Moisture Value: ");
  Serial.println(moistureValue);
  Serial.print("Moisture Percentage: ");
  Serial.println(moisturePercentage);

  // 判断是否需要浇水
  if (moistureValue > dryThreshold && !isRaining && !pumpOn && (millis() - lastWateringTime > wateringInterval)) {
    waterPlant();
  }
}

// 浇水函数
void waterPlant() {
  Serial.println("Watering...");
  digitalWrite(pumpPin, LOW); // 继电器低电平启动水泵
  pumpOn = true;
  lastWateringTime = millis();
  Blynk.virtualWrite(V2, "Watering...");
  delay(wateringTime);
  digitalWrite(pumpPin, HIGH); // 继电器高电平关闭水泵
  pumpOn = false;
  Serial.println("Watering finished.");
  Blynk.virtualWrite(V2, "Idle");
}

// Blynk 按钮控制 (手动浇水)
BLYNK_WRITE(V3) {
  int pinValue = param.asInt(); // 从Blynk APP接收按钮状态
  if (pinValue == 1 && !isRaining && !pumpOn) { // 按下按钮
    waterPlant();
  }
}

代码解释:

  • 引入库: 引入ESP8266WiFi.h和BlynkSimpleEsp8266.h库,用于连接WiFi和Blynk。
  • WiFi和Blynk配置: 填写你的WiFi名称、密码和Blynk Auth Token。
  • 引脚定义: 定义各个传感器和执行器的引脚。
  • 湿度阈值: 设置土壤干燥和湿润的阈值,根据实际情况调整。土壤湿度传感器读数越高,表示土壤越干燥。
  • 浇水时长: 设置每次浇水的时间,单位为毫秒。
  • setup()函数: 初始化WiFi、Blynk、引脚模式。
  • loop()函数: 循环检测雨水、土壤湿度,并根据情况进行浇水。
  • checkRain()函数: 检测是否下雨,并将状态发送到Blynk APP。
  • checkMoistureAndWater()函数: 检测土壤湿度,判断是否需要浇水。
  • waterPlant()函数: 启动水泵进行浇水,并更新状态。
  • BLYNK_WRITE(V3): Blynk APP按钮控制,用于手动浇水。

温馨提示:

  • 代码中的WiFi名称、密码和Blynk Auth Token需要替换成你自己的。
  • 湿度阈值和浇水时长需要根据你的植物种类、花盆大小和当地气候进行调整。
  • Blynk APP需要自己创建一个项目,并添加显示控件(Gauge)和按钮(Button),并将控件与代码中的Virtual Pin对应起来。

四、Blynk APP配置:远程控制你的“绿植卫士”

  1. 下载并安装Blynk APP: 在手机应用商店搜索“Blynk”并下载安装。

  2. 创建Blynk项目: 打开Blynk APP,注册账号并登录,然后创建一个新的项目。选择ESP8266作为硬件平台。

  3. 获取Auth Token: 创建项目后,Blynk会发送一个Auth Token到你的邮箱,复制这个Token备用。

  4. 添加控件: 在Blynk APP中添加以下控件:

    • Gauge: 用于显示土壤湿度百分比,连接到Virtual Pin V0。
    • Value Display: 用于显示是否正在下雨,连接到Virtual Pin V1。
    • Button: 用于手动控制浇水,连接到Virtual Pin V3,并将按钮模式设置为PUSH。
    • Value Display: 用于显示浇水状态,连接到Virtual Pin V2。
  5. 运行项目: 点击Blynk APP右上角的播放按钮,运行项目。

温馨提示:

  • Blynk APP的界面可以根据自己的喜好进行自定义。
  • 如果连接不上Blynk服务器,请检查你的WiFi连接是否正常,以及Auth Token是否正确。

五、组装与测试:让一切运转起来

  1. 将各个模块固定在合适的位置: 可以使用双面胶或者扎带将Arduino、继电器模块、ESP8266等固定在一个盒子里。
  2. 将土壤湿度传感器插入花盆中: 注意不要插得太深,以免影响植物根系的生长。
  3. 将雨水传感器放置在室外: 确保雨水可以淋到传感器上。
  4. 将水泵放入水箱中,并将水管连接到花盆: 确保水管没有弯折或者堵塞。
  5. 连接电源: 为Arduino和水泵供电。
  6. 上传代码: 将代码上传到Arduino开发板。
  7. 测试: 观察土壤湿度传感器读数是否正常,手动按下Blynk APP上的按钮,测试水泵是否可以正常工作,模拟下雨,测试雨水传感器是否可以正常停止浇水。

六、进阶玩法:让你的智能浇花系统更强大

  • 添加光照传感器: 根据光照强度自动调节浇水频率。
  • 添加温度传感器: 根据温度自动调节浇水量。
  • 使用太阳能供电: 实现真正的绿色环保。
  • 扩展到多个花盆: 控制多个水泵,同时为多个花盆浇水。
  • 数据记录与分析: 将土壤湿度、光照强度、温度等数据记录下来,并进行分析,以便更好地了解植物的生长情况。

总结:

通过这个项目,你不仅可以学会使用Arduino控制各种传感器和执行器,还可以了解到一些关于植物生长和节约用水的知识。更重要的是,你体验到了DIY的乐趣,并创造了一个真正属于自己的智能浇花系统。还在等什么?赶快动手试试吧!让你的花花草草在你的精心呵护下茁壮成长!

点评评价

captcha
健康