创客自制自动灌溉装置成本不到50元手机远程控制农村老人阳台种菜养花自动浇水实用方案
前两天回老家看我爸,他一个人在阳台上种的那几畦菜,浇水成了大问题。夏天走两天不回,叶子全蔫了;回来又浇过头,根部都烂了。我看着他弯腰浇水的样子,心里不是滋味,寻思着非得给他整一个自动浇水的方案不可。
折腾了半个月,花不到50块钱,搞出来了。今天就把整个方案掰开揉碎跟大伙儿说说。
一、为什么是这套方案
先看几个关键点:
- 农村老人操作能力有限,不能搞太复杂的界面,最好手机点一下就完事
- 阳台空间小,设备不能太大太重
- 预算有限,成本控制是关键
- 稳定性要过关,不能天天修
市面上那种几百块的智能花盆、自动浇水器,功能花里胡哨,价格动辄一两百,而且坏了找不到人修。自己做一个,成本降下来不说,出了问题随时能改。
我选的核心板子是 ESP8266(NodeMCU),这块板子自带WiFi,一块钱能买三四块,性价比没得说。配合一块土壤湿度传感器和一个小水泵,整套下来不到50块。
二、材料清单和成本明细
| 配件 | 规格 | 数量 | 单价(元) | 小计(元) |
|---|---|---|---|---|
| ESP8266开发板 | NodeMCU V3 | 1 | 8 | 8 |
| 土壤湿度传感器 | 电容式(防腐蚀) | 1 | 6 | 6 |
| 5V微型潜水泵 | 流量200L/h | 1 | 5 | 5 |
| 5V继电器模块 | 单路 | 1 | 3 | 3 |
| USB数据线 | Micro-USB | 1 | 3 | 3 |
| 12V电源适配器 | 5V/2A | 1 | 8 | 8 |
| 水管/硅胶管 | 内径4mm,3米 | 1 | 3 | 3 |
| 塑料水桶 | 旧物利用 | 1 | 0 | 0 |
| 杜邦线 | 公对母/母对母若干 | 1套 | 5 | 5 |
| 热熔胶/扎带 | 固定用 | 若干 | 2 | 2 |
| 合计 | 约43元 |
电容式土壤湿度传感器比普通电阻式的耐用得多,因为不会氧化腐蚀,阳台这种潮湿环境里能多用一年。这一步的钱别省。
三、硬件连接
ESP8266的引脚不多,接法很直接。下面这张表把每个引脚对应关系说清楚:
ESP8266 → 外设
D1(GPIO5) → 继电器控制引脚
A0 → 土壤湿度传感器模拟输出
5V → 继电器VCC + 水泵正极(共用)
GND → 继电器GND + 水泵负极 + 传感器GND(共地)
接线图文字说明:
- 土壤湿度传感器:VCC接ESP8266的3.3V引脚(注意是3.3V不是5V,电容式传感器一般支持3.3-5V),GND接地,AO模拟输出接到ESP8266的A0引脚。
- 继电器模块:VCC接5V(直接取USB电源的5V),GND共地,IN控制引脚接D1(GPIO5)。
- 水泵:正极接继电器的常开触点(NO),负极接GND。继电器的COM公共端接5V电源正极。这样继电器吸合时,水泵得电转动。
⚠️ 重要提醒:水泵工作时电流较大,建议用单独的5V电源供电,不要从ESP8266的5V引脚取电,否则可能因为电流不够导致开发板重启。
四、代码部分(Arduino IDE)
用Arduino IDE来写代码,对新手最友好。先确保你装了ESP8266的开发板支持包,然后在IDE里选 NodeMCU 1.0 作为开发板。
方案A:纯本地自动控制(不需要联网)
如果你不需要远程控制,只是想让设备自己根据土壤湿度来浇水,代码很简单:
#include <ESP8266WiFi.h>
// ====== 引脚定义 ======
#define SOIL_SENSOR_PIN A0 // 土壤湿度传感器接A0
#define PUMP_PIN D1 // 继电器控制接D1
// ====== 参数配置 ======
#define DRY_THRESHOLD 400 // 干燥阈值(根据实际调整)
#define WET_THRESHOLD 600 // 湿润阈值
#define PUMP_DURATION 3000 // 每次浇水时间(毫秒)
#define CHECK_INTERVAL 30000 // 检测间隔(30秒)
bool isPumping = false;
unsigned long lastCheckTime = 0;
void setup() {
pinMode(PUMP_PIN, OUTPUT);
digitalWrite(PUMP_PIN, HIGH); // 继电器高电平关闭(低电平触发型)
Serial.begin(115200);
Serial.println("自动灌溉系统启动...");
}
void loop() {
unsigned long now = millis();
if (now - lastCheckTime >= CHECK_INTERVAL) {
lastCheckTime = now;
int moisture = analogRead(SOIL_SENSOR_PIN);
// 注意:电容式传感器的值可能和电阻式不同
// 一般干燥时值较小,湿润时值较大
Serial.print("当前湿度值: ");
Serial.println(moisture);
if (moisture < DRY_THRESHOLD && !isPumping) {
startPump();
}
}
// 检查水泵是否还在运行
if (isPumping && millis() - pumpStartTime >= PUMP_DURATION) {
stopPump();
}
}
void startPump() {
Serial.println("土壤干燥,开始浇水...");
digitalWrite(PUMP_PIN, LOW); // 低电平触发继电器
isPumping = true;
pumpStartTime = millis();
}
void stopPump() {
Serial.println("浇水完成,停止水泵");
digitalWrite(PUMP_PIN, HIGH); // 高电平关闭继电器
isPumping = false;
}
unsigned long pumpStartTime = 0;
阈值校准方法:把传感器插入干燥的土壤,看Serial串口监视器里的数值,记下这个值作为DRY_THRESHOLD;再插进湿土里,记下WET_THRESHOLD。取两个值的中间作为判断标准。
方案B:带WiFi的手机远程控制(核心方案)
这个方案需要连接你家WiFi,然后通过手机App来控制水泵。用 Blynk 这个平台,手机上装个App就能实时控制,配置简单到离谱。
第一步:注册Blynk账号
去 blynk.io 注册一个免费账号,免费版每个月有5个设备、2个项目的额度,完全够你用。
第二步:获取Auth Token
注册登录后,新建一个项目,选ESP8266,网络选WiFi,然后会给你一个Auth Token(类似 xxxx-xxxx-xxxx-xxxx 的字符串),复制下来备用。
第三步:完整代码
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
// ====== WiFi和Blynk配置 ======
char auth[] = "你的Blynk_Auth_Token";
char ssid[] = "你的WiFi名称";
char pass[] = "你的WiFi密码";
// ====== 引脚定义 ======
#define SOIL_SENSOR_PIN A0
#define PUMP_PIN D1
// ====== 自动控制参数 ======
#define DRY_THRESHOLD 400
#define PUMP_DURATION 3000
#define CHECK_INTERVAL 30000
// ====== 状态变量 ======
bool autoMode = true; // 默认自动模式
bool isPumping = false;
unsigned long lastCheckTime = 0;
unsigned long pumpStartTime = 0;
// ====== Blynk虚拟引脚 ======
// V0: 手动控制水泵开关
// V1: 自动/手动模式切换
// V2: 显示土壤湿度值
// V3: 显示系统状态
BLYNK_WRITE(V0) {
// 手动控制水泵
int pumpState = param.asInt();
if (pumpState == 1) {
startPump();
Blynk.virtualWrite(V3, "手动浇水中...");
} else {
stopPump();
Blynk.virtualWrite(V3, "已停止");
}
}
BLYNK_WRITE(V1) {
// 模式切换
int mode = param.asInt();
autoMode = (mode == 1);
if (autoMode) {
Blynk.virtualWrite(V3, "自动模式");
} else {
Blynk.virtualWrite(V3, "手动模式");
}
}
void setup() {
pinMode(PUMP_PIN, OUTPUT);
digitalWrite(PUMP_PIN, HIGH); // 关闭继电器
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
Serial.println("设备已连接到Blynk服务器");
}
void loop() {
Blynk.run();
unsigned long now = millis();
// 自动模式下的土壤检测
if (autoMode && now - lastCheckTime >= CHECK_INTERVAL) {
lastCheckTime = now;
int moisture = analogRead(SOIL_SENSOR_PIN);
Blynk.virtualWrite(V2, moisture); // 上报湿度值到App
if (moisture < DRY_THRESHOLD && !isPumping) {
startPump();
Blynk.virtualWrite(V3, "自动浇水中...");
}
}
// 水泵超时保护
if (isPumping && millis() - pumpStartTime >= PUMP_DURATION) {
stopPump();
if (autoMode) {
Blynk.virtualWrite(V3, "自动模式");
}
}
}
void startPump() {
digitalWrite(PUMP_PIN, LOW);
isPumping = true;
pumpStartTime = millis();
Serial.println("水泵启动");
}
void stopPump() {
digitalWrite(PUMP_PIN, HIGH);
isPumping = false;
Serial.println("水泵停止");
}
第四步:Blynk App界面配置
登录Blynk App后,在面板里添加以下控件:
- Switch开关 → 绑定到 V0:用作手动浇水开关
- Toggle开关 → 绑定到 V1:自动/手动模式切换
- Gauge仪表 → 绑定到 V2:显示土壤湿度数值
- Label标签 → 绑定到 V3:显示当前系统状态
这样你打开手机就能看见土壤湿度、切换模式、远程浇水,操作逻辑对农村老人来说完全没有学习成本。
五、实际组装和固定方案
光有代码不够,得把东西物理上固定好。下面是我实际用的一些土办法:
水泵固定:把潜水泵放进水桶底部,用热熔胶在水桶内壁打个凹槽固定水泵底座,这样水泵不会在水桶里乱跑。
水管连接:水泵出水口接硅胶管,管子另一头穿进花盆的土里约5厘米深。管子用扎带固定,不要让它掉进土里出不来。
ESP8266和继电器:用扎带绑在花盆旁边的支架上,用小的塑料盒(比如药盒)装起来防淋雨。ESP8266本身不防水,千万别直接淋到。
传感器插法:电容式土壤湿度传感器直接插在花盆边缘的土里,深度10厘米左右,靠近植物根部但别贴根。一盆花插一个,多盆花的话用一根传感器轮流测,或者多买几个传感器分摊到不同花盆。
电源:用一个旧的手机充电器或者5V的USB电源适配器,插在家里墙壁插座上,走一条长线到阳台,ESP8266通过USB供电。如果阳台有现成的插座就最方便了。
六、可能遇到的问题及解决办法
问题1:水泵不转
检查接线是否牢固,特别是继电器和水泵之间的线。用万用表量一下继电器吸合时输出端有没有电压。有时候水泵堵转也会导致不工作,把水泵拿出来看看叶轮里有没有杂物。
问题2:湿度读数不正常
先确认传感器接的是A0模拟口。如果读数一直是1023或者0,检查接线有没有松。电容式传感器需要稳定后读数才准,上电后等5秒再读。
问题3:WiFi连接不上
检查路由器有没有开2.4GHz(ESP8266不支持5GHz WiFi),SSID和密码里不要有特殊字符。把路由器密码改成纯字母数字。
问题4:Blynk连接失败
检查Auth Token有没有复制错,WiFi密码有没有错。如果提示”Connecting to Blynk”一直转圈,重启一下开发板试试。服务器不稳定时可以用Blynk的本地服务器方案,但那个需要自己搭服务器,成本就超了。
问题5:水泵持续运行不停
检查代码里的PUMP_DURATION参数是否太小,或者继电器是不是接反了(有些继电器是高电平触发,需要把代码里的LOW/HIGH对调)。
七、成本再核算和扩展建议
我这套东西实际加起来是 43元左右,再加上热熔胶、扎带这些零碎,确实没超50块。
如果想扩展,有几个方向:
- 多盆控制:再加几个继电器模块(一块继电器模块可以做多路),每个花盆对应一个水泵,成本增加但每个花盆都能独立控制
- 加水流量传感器:在管路上加一个YF-S201流量传感器(约3块钱),可以精确控制每次浇多少水
- 加太阳能板:如果阳台有阳光,可以加一块5V太阳能板和充电模块(约15元),实现离网运行
- 加风速/温度传感器:DHT11(约5元)可以监测环境温湿度,智能判断要不要浇水
八、给农村老人用的几条建议
- 把手机桌面图标做大:让父母在桌面放一个醒目的Blynk App快捷方式,字体调大,让他们一眼能找到
- 写一张纸质说明贴在墙上:用大字写清楚”红色按钮=浇水”“绿色按钮=自动模式”,防止忘记
- 帮忙设置好WiFi和Blynk:这些配置一次性做好,以后老人家不需要再动
- 测试充分再离开:出发前连续测试3天以上,确保不会误浇水或者不浇水
- 水桶放在高处:利用重力辅助,把水桶架高一点,水泵吸水更容易
九、实际效果反馈
这套东西在我家阳台跑了快两个月了,我爸现在出门三天都不带怕的。最省心的是自动模式——平时不用管,手机看一眼湿度值就行。上次他忘了带手机,回来发现花浇得正好,土是润的。
说实在的,花五十块钱解决了大麻烦,比买那些现成的智能花盆划算太多了。而且出了问题自己会改、会修,这才是真正的动手乐趣。
你要是也在阳台种花种菜,或者家里老人需要这种照顾,不妨试试自己做一套。工具不用多,一把电烙铁、一个万用表就够用了。有什么具体问题,欢迎留言交流。
