1. 项目概述
去年夏天我养死了三盆绿萝之后,终于下定决心要做一个能自动照顾植物的智能花盆。这个基于单片机的智能花盆不仅能自动监测土壤湿度、环境光照和温度,还能根据植物需求自动浇水,简直就是植物杀手的救星。
这个项目特别适合:
- 经常忘记给植物浇水的上班族
- 想要尝试智能硬件开发的初学者
- 对物联网应用感兴趣的创客
- 需要长期出差但又想养植物的人
2. 硬件选型与设计思路
2.1 核心硬件组件
我最终选择的硬件配置如下:
-
主控芯片:ESP8266
- 选择理由:内置WiFi功能,价格便宜(约15元),社区支持完善
- 替代方案:STM32F103C8T6(更强大但需要外接WiFi模块)
-
土壤湿度传感器:FC-28
- 成本:约5元
- 注意:需要做防腐蚀处理(后面会详细说明)
-
环境传感器:DHT11温湿度传感器+BH1750光照传感器
- 总成本:约20元
- 更精准方案:DHT22+SHT30(但价格翻倍)
-
执行机构:5V微型水泵+继电器模块
- 水泵流量:120L/H
- 注意:一定要加装防水垫圈
-
电源系统:
- 主电源:5V/2A手机充电器
- 备用电源:18650锂电池+充电模块(防止停电)
2.2 结构设计要点
花盆的物理结构设计有几个关键点:
-
传感器布局:
- 湿度传感器插入深度建议5-8cm
- 温湿度传感器距离土壤表面3-5cm
- 光照传感器朝上安装,避免遮挡
-
防水设计:
- 电路板要用防水盒封装
- 所有线材接口打热熔胶密封
- 水泵安装位置要低于水箱
-
外观设计:
- 3D打印外壳(PLA材料)
- 预留观察窗查看水位
- 顶部LED状态指示灯
3. 电路连接与系统搭建
3.1 完整电路图
主要连接方式如下:
code复制ESP8266 | 传感器/执行器
----------------|-------------------
GPIO4 (D2) | 土壤湿度传感器DO
GPIO5 (D1) | 继电器控制端
GPIO12 (D6) | DHT11数据线
GPIO13 (D7) | BH1750 SDA
GPIO14 (D5) | BH1750 SCL
3.3V | 所有传感器VCC
GND | 所有传感器GND
特别注意:继电器模块要单独接5V电源,不能直接从ESP8266取电
3.2 传感器校准
-
土壤湿度传感器校准:
- 将传感器完全浸入水中,记录ADC值(假设为WET_VALUE)
- 将传感器完全干燥,记录ADC值(假设为DRY_VALUE)
- 实际湿度百分比 = (当前值 - DRY_VALUE)/(WET_VALUE - DRY_VALUE)*100
-
DHT11温湿度校准:
- 与标准温湿度计对比
- 如有偏差,在代码中设置补偿值
-
光照传感器校准:
- 使用手机光强APP作为参考
- 记录不同光照条件下的lux值
4. 软件系统实现
4.1 核心代码结构
主要程序逻辑分为三个部分:
- 传感器数据采集:
cpp复制void readSensors() {
humidity = analogRead(SOIL_MOISTURE_PIN);
temperature = dht.readTemperature();
light = lightMeter.readLightLevel();
}
- 控制逻辑:
cpp复制void controlLogic() {
if(humidity < threshold && waterLevel > MIN_LEVEL) {
digitalWrite(PUMP_PIN, HIGH);
delay(WATERING_TIME);
digitalWrite(PUMP_PIN, LOW);
}
}
- 网络功能:
cpp复制void setupWiFi() {
WiFi.begin(SSID, PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
}
4.2 物联网功能实现
我选择了MQTT协议实现远程监控:
-
MQTT服务器配置:
- 使用免费的公共MQTT broker(如mqtt.eclipse.org)
- 主题设计:
- plant/status:发布传感器数据
- plant/control:接收控制命令
-
手机端监控:
- 使用MQTT Dashboard APP
- 可设置浇水阈值提醒
- 支持历史数据查看
-
数据存储:
- 简易方案:SD卡模块存储CSV格式数据
- 进阶方案:InfluxDB+Gragana搭建可视化平台
5. 实际使用与优化
5.1 安装调试步骤
- 将传感器按设计位置固定
- 连接所有电路,特别注意电源极性
- 烧录固件后上电测试
- 校准各传感器
- 设置初始阈值:
- 绿萝:湿度40%,光照2000lux
- 多肉植物:湿度30%,光照5000lux
5.2 使用中的问题与解决
-
土壤传感器腐蚀:
- 问题:金属探头2周后出现氧化
- 解决:涂覆指甲油作为保护层
- 更好方案:改用电容式传感器
-
水泵噪音:
- 问题:夜间浇水声音明显
- 解决:改用蠕动泵(更安静但流量小)
- 折中方案:设置浇水时间段(如9:00-20:00)
-
WiFi断连:
- 问题:偶尔会断开连接
- 解决:增加自动重连机制
- 代码示例:
cpp复制void checkWiFi() {
if(WiFi.status() != WL_CONNECTED) {
WiFi.reconnect();
}
}
6. 进阶改进方向
这个基础版本完成后,还可以考虑以下升级:
-
多区域控制:
- 扩展多个土壤传感器
- 分区浇水控制
-
营养液自动添加:
- 增加PH/EC传感器
- 配比泵实现自动施肥
-
太阳能供电:
- 6W太阳能板+锂电池
- 低功耗设计(深度睡眠模式)
-
图像识别:
- 添加摄像头模块
- 使用TensorFlow Lite识别病虫害
7. 项目成本与采购建议
完整BOM清单(参考价格):
| 组件 | 型号 | 单价(元) | 采购渠道 |
|---|---|---|---|
| 主控 | ESP8266 | 15 | 淘宝/得捷 |
| 土壤传感器 | FC-28 | 5 | 淘宝 |
| 温湿度传感器 | DHT11 | 8 | 淘宝 |
| 光照传感器 | BH1750 | 12 | 淘宝 |
| 水泵 | 微型潜水泵 | 18 | 淘宝 |
| 继电器 | 5V单路 | 3 | 淘宝 |
| 其他 | 线材/结构件 | ~20 | 本地电子市场 |
总成本约80-100元,建议:
- 初学者购买现成模块
- 有经验的可以自己设计PCB降低成本
8. 关键注意事项
-
安全第一:
- 所有220V部分必须专业处理
- 建议使用安全电压(12V/24V系统)
-
防水措施:
- 电路板必须完全密封
- 水泵接口要定期检查
-
植物适配:
- 不同植物需要不同参数
- 建议先从耐活的绿萝开始测试
-
维护要点:
- 每月检查传感器状态
- 每季度清理水箱
- 注意水泵滤网清洁
这个项目我从原型到稳定运行花了两个月时间,最大的体会是:硬件项目最难的不是代码,而是各种意想不到的物理世界问题。比如最初没考虑水泵的扬程,导致高处花盆浇不到水;还有一次湿度传感器误报,把我的书房给淹了...
