1. 项目概述
去年夏天出差两周回家,发现阳台上精心培育的多肉植物全军覆没,这个惨痛教训让我下定决心开发一套可靠的智能浇花系统。传统定时浇灌方式存在水资源浪费、无法适应天气变化等问题,而市售智能花盆动辄上千元的价格又让人望而却步。基于STM32单片机的智能浇花控制系统,正是为解决这些痛点而生。
这套系统通过土壤湿度传感器实时监测盆栽状态,结合环境温湿度数据智能判断灌溉需求,既能防止植物缺水枯萎,又可避免过度浇水导致的烂根。我花了三个月时间从原型设计到最终实现,期间经历了传感器选型纠结、水泵控制难题、电源管理优化等一系列挑战,最终以不到200元的成本实现了不输千元商用产品的功能。
2. 核心设计思路
2.1 系统架构设计
整个系统采用模块化设计,分为感知层、控制层和执行层三个部分:
code复制[土壤湿度传感器] [温湿度传感器]
| |
v v
[STM32主控制器]
|
v
[水泵驱动电路]-->[微型水泵]
感知层由电容式土壤湿度传感器和DHT11温湿度传感器组成,分别采集土壤含水量和环境参数。控制层采用STM32F103C8T6最小系统板,负责数据处理和逻辑判断。执行层则包括5V微型隔膜泵和继电器驱动电路。
关键设计选择:采用电容式而非电阻式土壤传感器,避免了电极氧化问题,使用寿命可长达3-5年。
2.2 控制算法设计
灌溉决策采用多参数加权算法:
c复制// 伪代码示例
if(soil_moisture < threshold_low
|| (temp > 30 && humidity < 40% && soil_moisture < threshold_mid)) {
start_watering(duration);
}
阈值根据植物类型通过手机APP设置,典型值:
- 多肉植物:土壤湿度<30%启动
- 观叶植物:土壤湿度<50%启动
- 水生植物:土壤湿度<70%启动
3. 硬件实现细节
3.1 关键元件选型
| 部件 | 型号 | 参数 | 单价 | 选型理由 |
|---|---|---|---|---|
| 主控 | STM32F103C8T6 | 72MHz Cortex-M3 | ¥15 | 性价比高,外设丰富 |
| 土壤传感器 | SEN0193 | 0-100%RH | ¥35 | 电容式,防腐设计 |
| 温湿度传感器 | DHT11 | 20-90%RH | ¥8 | 精度满足需求 |
| 水泵 | 370微型泵 | 3-6V/1.5L/min | ¥25 | 低噪音,可USB供电 |
3.2 电路设计要点
水泵驱动采用光耦隔离+MOSFET方案:
code复制[STM32 GPIO] -> [PC817光耦] -> [IRLZ44N MOSFET] -> [水泵]
^ ^
| |
[12V电源] [续流二极管1N4007]
实测中发现的问题及解决方案:
- 水泵启停导致MCU复位 → 在MCU电源端增加1000μF电容
- 土壤传感器数据漂移 → 软件端增加滑动平均滤波
- 继电器触点火花 → 改用MOSFET驱动并增加续流二极管
4. 软件实现解析
4.1 主程序流程
c复制void main() {
hardware_init();
while(1) {
read_sensors();
process_data();
if(need_watering()) {
start_pump(calculate_duration());
}
enter_low_power_mode();
delay(10*60*1000); // 10分钟采样间隔
}
}
4.2 关键代码实现
土壤湿度校准算法:
c复制#define DRY_VALUE 2100 // 完全干燥时的ADC值
#define WET_VALUE 1100 // 完全湿润时的ADC值
int get_soil_moisture() {
int adc_val = read_adc();
return 100 - ((adc_val - WET_VALUE) * 100) / (DRY_VALUE - WET_VALUE);
}
水泵控制安全逻辑:
c复制void start_pump(int seconds) {
if(seconds > 180) seconds = 180; // 防呆设计
for(int i=0; i<seconds; i++) {
set_pump(ON);
delay(1000);
if(check_water_level() == LOW) break; // 缺水保护
}
set_pump(OFF);
}
5. 系统优化与实测
5.1 低功耗优化
通过以下措施使待机电流降至3mA:
- 关闭未用外设时钟
- 传感器供电改用MOSFET控制
- 主循环中进入STOP模式
- 采样间隔从1分钟延长至10分钟
5.2 实测数据对比
测试环境:阳台盆栽绿萝,环境温度25-32℃
| 天数 | 传统定时灌溉 | 智能控制系统 |
|---|---|---|
| 1 | 浇水50ml | 未触发 |
| 2 | 浇水50ml | 未触发 |
| 3 | 浇水50ml | 浇水80ml |
| 4 | 浇水50ml | 未触发 |
| 结果 | 局部烂根 | 健康生长 |
6. 常见问题解决
-
传感器读数异常
- 现象:土壤湿度显示固定值
- 检查:传感器供电是否正常
- 处理:重新插拔接线,必要时更换传感器
-
水泵不工作
- 先测试直接给水泵供电是否运转
- 检查MOSFET栅极电压是否达到4V以上
- 测量驱动电路是否断路
-
系统频繁重启
- 检查电源容量是否足够
- 在MCU电源端并联大容量电容
- 避免长距离导线带来的压降
这套系统经过半年实际使用,成功养护了包括多肉、绿萝、薄荷在内的12盆植物。最让我惊喜的是在雨季自动减少了90%的灌溉量,而在高温天气又能及时补水。下一步计划增加WiFi模块实现远程监控,让植物养护真正实现智能化。