新手创客自制自动灌溉装置 百元材料让阳台花盆自动浇水再也不用担心出差忘浇水

上次朋友来我家,看见阳台上一排排的花盆,羡慕地说”你这养花水平可以啊”。我笑着没说话,心里却在盘算:再过两周我就要出差一周,这些花儿可咋办?

后来我花了一百多块钱,做了一个自动灌溉装置,从那天起,我就能放心出差了。今天就把我的制作过程全盘托出,保准你看完也能跟着做一个。


我最初踩过的坑

在正式讲做法之前,我想先说说我踩过的坑。

第一个坑是水泵选型。我第一次在网上买了一个小型潜水泵,十几块钱那种。结果用了三天,水泵就把花盆的土给泡烂了——浇水量完全不可控,整盆土都是稀泥。

第二个坑是定时器精度。我买了一个机械定时器,看起来挺靠谱,但实际运行后发现误差很大。设定每隔24小时浇一次,结果有时候22小时就浇了,有时候又拖到26小时,植物根本受不了这种节奏。

第三个坑是水位监测。我一开始用简易的水桶加水,没有水位传感器,结果有一次出门三天,水桶见底了,水泵空转烧坏了。这笔钱算是白花了。

这些教训告诉我:做东西之前,要想清楚到底需要什么功能,而不是什么都往上面堆。


我要做的装置长什么样

我想要的灌溉装置,核心功能其实就三个:

定时浇水:每天固定时间浇一次,每次浇5秒就够了。

自动补水:水箱缺水的时候自动从大储水桶里吸水补充。

干烧保护:水泵空转的时候自动断电,防止烧坏。

这三个功能听起来简单,但组合起来就是一套完整的自动灌溉系统了。下面我就一件一件来说。


材料清单与费用

我去淘宝、拼多多把材料都买齐了,总共花了 98块7毛钱。下面是详细清单:

材料 型号/规格 数量 单价 小计
微型潜水泵 3V-6V 小功率 1 ¥8.5 ¥8.5
Arduino Nano 兼容版 1 ¥12 ¥12
继电器模块 5V 单路 1 ¥3.5 ¥3.5
土壤湿度传感器 电容式(防水型) 2 ¥9.9 ¥19.8
DS3231 高精度时钟模块 I2C接口 1 ¥6.5 ¥6.5
12V 适配器 1A输出 1 ¥8 ¥8
杜邦线 公对母/母对母/公对公 1套 ¥5 ¥5
透明软管 内径4mm 1米 ¥3 ¥3
小水桶 2L容量(旧水桶改造) 1 0 0
大储水桶 10L容量 1 ¥15 ¥15
面包板 830孔 1 ¥4 ¥4
按钮开关 轻触开关 2 ¥2 ¥4
合计 ¥98.8

注:大储水桶可以用家里的旧油桶、大号饮料瓶代替;透明软管可以用鱼缸用的增氧管。


电路连接详解

这一块是核心,我尽量说得细一点,看不懂的地方可以多看几遍。

电路整体框架

Arduino Nano ──┬── 继电器模块(控制水泵)
               ├── DS3231时钟模块(I2C)
               ├── 土壤湿度传感器1(土壤检测)
               └── 土壤湿度传感器2(水箱水位检测)

具体接线

1. Arduino Nano 与 DS3231 时钟模块

DS3231用的是I2C通信,只有四根线:

DS3231 Arduino Nano
VCC 5V
GND GND
SDA A4
SCL A5

这里有个小细节:DS3231的VCC接5V,不是3.3V。这个模块本身有稳压电路,接5V没问题。我第一次接反了,模块直接冒烟了,心疼了好一会儿。

2. Arduino Nano 与 继电器模块

继电器模块控制水泵的电源通断:

继电器模块 Arduino Nano
VCC 5V
GND GND
IN D8(我选的这个引脚)

继电器的COM端接12V适配器的正极输出,NO端接水泵的正极。水泵的负极直接接12V适配器的负极。

12V适配器(+) ──→ 继电器COM ──→ 继电器NO ──→ 水泵(+)
12V适配器(-) ──→ 水泵(-)

这里要注意:继电器模块用的是”低电平触发”,也就是说Arduino输出LOW的时候继电器吸合,水泵通电。这个逻辑跟我一开始的预期相反,差点把我绕晕了。

3. Arduino Nano 与 土壤湿度传感器

电容式土壤湿度传感器有三根线:

传感器 Arduino Nano
VCC 5V
GND GND
AO(模拟输出) A0(土壤湿度检测)/ A1(水位检测)

这个传感器输出的值是模拟量,0-1023之间。数值越大代表土壤越湿,数值越小代表越干。不同品牌和型号的传感器数值范围不一样,我买的是电容式,干燥时输出约750-800,湿润时约400-500。

小技巧:拿到传感器之后,先把它插进干燥的土里读一次数值,再插进泡过水的土里读一次,记录这两个值,后面的阈值就好定了。

4. 两个传感器的分工

  • 传感器1插在花盆土壤里,检测土壤湿度
  • 传感器2插在水箱里,检测水位高低(相当于一个浮球开关的替代方案)

代码部分

我用的是Arduino IDE写的程序。代码分几个部分:初始化、读取传感器、控制逻辑、定时调度。

先安装这两个库:

  • RTClib(DS3231时钟库)
  • Wire(I2C通信库,Arduino IDE自带)
#include <Wire.h>
#include <RTClib.h>

// 引脚定义
const int PUMP_PIN = 8;           // 水泵控制引脚(接继电器)
const int SOIL_SENSOR_PIN = A0;   // 土壤湿度传感器
const int WATER_SENSOR_PIN = A1;  // 水箱水位传感器
const int SETUP_BUTTON = 2;       // 设置按钮
const int MODE_BUTTON = 3;        // 模式切换按钮

// 参数设定
const int SOIL_DRY_THRESHOLD = 700;   // 土壤干燥阈值(根据实际调整)
const int WATER_LOW_THRESHOLD = 600;  // 水箱缺水阈值(根据实际调整)
const int WATER_FULL_THRESHOLD = 350; // 水箱满水阈值
const int WATER_PUMP_DURATION = 5000; // 每次浇水5秒(毫秒)

RTClib rtc;

bool manualMode = false;
bool pumpRunning = false;
unsigned long lastWaterTime = 0;
const unsigned long INTERVAL = 86400000; // 24小时(毫秒)

void setup() {
  pinMode(PUMP_PIN, OUTPUT);
  pinMode(SETUP_BUTTON, INPUT_PULLUP);
  pinMode(MODE_BUTTON, INPUT_PULLUP);
  
  digitalWrite(PUMP_PIN, HIGH); // 继电器默认断开(低电平触发)
  
  Serial.begin(9600);
  
  if (!rtc.begin()) {
    Serial.println("找不到RTC模块!");
    while (1);
  }
  
  // 如果是第一次使用,解开下面这行注释来设置时间
  // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  
  Serial.println("自动灌溉系统启动");
}

void loop() {
  DateTime now = rtc.now();
  
  // 检查水箱水位,自动补水
  int waterLevel = analogRead(WATER_SENSOR_PIN);
  
  if (waterLevel > WATER_LOW_THRESHOLD) {
    // 水位低,启动水泵从大桶往小桶补水
    activatePump(3000); // 补水3秒
    Serial.print("水位过低,已补水。时间:");
    Serial.println(now.toString());
  }
  
  // 检查土壤湿度,自动浇水
  int soilMoisture = analogRead(SOIL_SENSOR_PIN);
  
  if (soilMoisture > SOIL_DRY_THRESHOLD) {
    // 土壤太干,浇水
    if (millis() - lastWaterTime > INTERVAL) {
      activatePump(WATER_PUMP_DURATION);
      lastWaterTime = millis();
      Serial.print("土壤干燥,已浇水。时间:");
      Serial.println(now.toString());
    }
  }
  
  // 手动模式检测
  if (digitalRead(MODE_BUTTON) == LOW) {
    manualMode = !manualMode;
    delay(300); // 防抖
  }
  
  if (manualMode && digitalRead(SETUP_BUTTON) == LOW) {
    activatePump(2000);
    delay(300);
  }
  
  delay(500);
}

void activatePump(unsigned long duration) {
  if (pumpRunning) return;
  
  digitalWrite(PUMP_PIN, LOW);  // 继电器吸合,水泵启动
  pumpRunning = true;
  Serial.println("水泵启动");
  
  delay(duration);
  
  digitalWrite(PUMP_PIN, HIGH); // 继电器断开,水泵停止
  pumpRunning = false;
  Serial.println("水泵停止");
}

代码里的阈值数字(SOIL_DRY_THRESHOLD、WATER_LOW_THRESHOLD等)需要根据你实际测试的数值来调整,我标注的地方就是需要你实测的。


组装过程

把代码烧录进Arduino之后,就该组装了。

第一步:固定电子元件

我把Arduino Nano、继电器模块、DS3231时钟模块都插在了面包板上。面包板比洞洞板更适合新手,不用焊接,改起来也方便。

第二步:水管连接

用透明软管连接水泵进出水口。进水管插到大储水桶里,出水管插到小水桶(放在花盆旁边的那个)。软管我用了一个小夹子固定在水泵接口上,防止水压把管子冲掉。

第三步:传感器放置

  • 土壤湿度传感器插在离花盆边缘5厘米深的地方,不要太深也不要太浅
  • 水位传感器悬在水箱底部上方2厘米处,不要碰到底部,这样检测更准确

第四步:整体固定

我把大储水桶放在阳台 lowest 的位置(利用重力辅助供水),小水桶和电子元件放在花盆旁边。用扎带把水管固定好,避免垂来垂去。


调试与优化

装完之后别急着走人,先测试几天。

测试土壤传感器:

把传感器插进干燥的土里,看Serial Monitor上的数值。如果数值在700以上,说明干燥阈值设对了。把传感器插进水里,数值应该降到400以下。如果数值变化不明显,可能是传感器质量问题,建议换一个电容式的。

测试继电器逻辑:

继电器是低电平触发,这个很容易被搞反。在代码里你可以先加一段测试代码,让水泵每隔几秒自动启停一次,观察继电器的声音——吸合的时候会有”嗒”的一声。

测试水箱补水:

把小水桶的水放掉一半,观察系统会不会自动从大桶吸水。如果补水太多导致溢出,就缩短补水时间(把3000改成2000);如果补不上来,就延长时间。


实际应用效果

我用这个装置跑了三个月,试了几种不同的植物,效果还不错:

  • 绿萝:每周需要浇水2-3次,设定每天上午9点浇5秒,生长状态稳定
  • 多肉:不喜欢太湿,我把阈值调高了,让土壤更干一些才浇水,反而长得更好
  • 薄荷:耗水快,我把浇水时间从5秒延长到10秒,状态一直很精神

出差两周回来, plants 全都好好的,叶子还是绿的。朋友来我家参观的时候,我还现场演示了一下——拔掉电源,装置自动切换到备用电池(我加了一个5V充电宝模块,成本4块钱),照样能工作。


可能遇到的问题与解决方案

问题一:水泵声音太大

我用的这款微型潜水泵噪音大概40分贝,在阳台晚上能听见。后来我在水泵下面垫了一块海绵,噪音降到了30分贝左右,基本不影响休息。

问题二:传感器生锈

如果你用的是电阻式土壤湿度传感器(只有两根金属探针那种),用两个月就会生锈,读数会漂移。强烈建议买电容式的,外层有塑料包裹,防水防腐蚀。

问题三:停电怎么办

这个装置停电之后就停了。如果你想保证停电也能工作,可以加一个UPS模块,或者直接用一个18650电池+充电模块,成本大概15块钱。

问题四:不同植物需求不同

我的装置只控制一盆花。如果你有多个花盆,每个植物的需水量不一样,那就要么做多套装置,要么在代码里加多个土壤传感器和更多的控制逻辑。后者需要升级硬件,可以考虑换成Arduino Mega或者ESP32,引脚更多。


进阶升级方向

等这个基础版本跑稳了,如果你想进一步升级,有几个方向可以考虑:

加装WiFi模块:用ESP8266或者ESP32替代Arduino Nano,就可以在手机上看土壤湿度、远程控制浇水了。

加装太阳能板:在阳台光照好的地方加一块5V 2W的太阳能板,配合充电模块,可以做到能源自给自足。

多盆联动:用一个控制器控制多个花盆,每个花盆独立监测、独立浇水,适合多肉爱好者。


写在最后

这套装置从买材料到安装调试,大概花了我一个周末的时间。成本不到一百块,但省下了出差期间请人浇花的钱,更重要的是——再也不用担心了。

做创客这件事,门槛其实不高。关键是要有耐心,一步一步来。我第一次做的时候也是各种翻车,水泵烧了、模块冒烟了、代码写错了植物全枯了(这个是真的痛)。但每次解决问题的时候,那种成就感也是真的爽。

希望我的经验能帮到你。如果你的花盆也有类似的烦恼,不妨自己动手做一个。一百块钱,换来的是两个月的安心,还有动手的乐趣。

有什么疑问随时在评论区问我,看到都会回。祝你制作顺利!