markdown复制## 1. 项目概述与核心功能解析
最近在工作室折腾了一个基于STM32的智能浇花系统,不仅实现了基本的土壤湿度监测和自动灌溉,还整合了蓝牙控制、光照补偿、声光报警和风扇降温等实用功能。这个项目特别适合喜欢养花但经常忘记浇水,或者需要短期出差的朋友。整套系统成本控制在200元以内,用到的都是常见电子元件,下面就把完整实现过程分享给大家。
核心功能模块可以拆解为五个部分:
1. 土壤湿度监测:通过传感器实时检测盆栽土壤含水率
2. 蓝牙远程控制:手机APP可查看数据并手动控制浇水
3. 光照补偿算法:根据环境光强自动调整浇水阈值
4. 异常声光报警:土壤过干/水泵故障时触发警报
5. 辅助风扇降温:防止密闭环境高温影响植物生长
## 2. 硬件选型与电路设计
### 2.1 主控芯片选择
选用STM32F103C8T6最小系统板作为主控,原因有三:
- 充足的IO口资源(37个GPIO)满足多传感器需求
- 内置12位ADC便于采集模拟信号
- 支持硬件串口方便蓝牙模块通信
> 注意:市面上有些低价STM32开发板可能偷工减料,建议选择正点原子或野火等品牌,我最初用的杂牌板子就遇到过ADC采样不稳定的问题。
### 2.2 传感器模块配置
- **土壤湿度检测**:采用电容式传感器(型号SEN0193)
- 相比电阻式更耐腐蚀
- 量程0-100%对应输出电压0-3V
- 安装时要确保金属探头完全插入土中
- **光照传感器**:BH1750数字光强模块
- I2C接口节省IO资源
- 量程0-65535 lux
- 需避免阳光直射导致数据饱和
- **温湿度传感器**:DHT11
- 虽然精度一般但成本低廉
- 单总线协议接线简单
### 2.3 执行机构电路
```c
// 水泵控制电路示例
void Pump_Control(uint8_t state)
{
if(state) {
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET); // 继电器吸合
Buzzer_Beep(1); // 短提示音
} else {
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);
}
}
继电器模块选用5V低电平触发型,驱动水泵时要注意:
- 必须在继电器触点并联续流二极管
- 水泵电源需独立供电(建议12V/2A)
- 水管接口要用热熔胶密封防漏
3. 软件逻辑与关键算法
3.1 主程序流程图
plaintext复制初始化硬件 → 传感器校准 → 进入主循环
↓
[主循环] 读取传感器 → 数据处理 → 执行控制 → 蓝牙通信
3.2 光照补偿算法实现
植物在不同光照条件下的需水量不同,我们采用动态阈值法:
c复制#define BASE_MOISTURE 40 // 基础湿度阈值(%)
uint16_t Get_Adjusted_Threshold(void)
{
float light_factor = BH1750_Read() / 30000.0; // 归一化
return BASE_MOISTURE * (1 + light_factor * 0.5);
// 光照越强阈值提高最多50%
}
3.3 蓝牙通信协议设计
使用HC-05模块实现手机控制,自定义了简协议:
| 指令头 | 参数 | 说明 |
|---|---|---|
| AA 01 | 无 | 请求实时数据 |
| AA 02 | 00/01 | 手动开关水泵 |
| AA 03 | 00-FF | 设置基础湿度阈值 |
手机端可以用MIT App Inventor快速开发控制界面,重点是要处理粘包问题:
c复制void USART1_IRQHandler(void)
{
static uint8_t buffer[10], index=0;
if(USART1->SR & USART_SR_RXNE) {
buffer[index++] = USART1->DR;
if(index>=3 && buffer[0]==0xAA) {
Process_Command(buffer);
index=0;
}
}
}
4. 系统集成与调试技巧
4.1 机械结构组装
- 3D打印的传感器支架要预留走线槽
- 水泵安装位置应低于水箱以利用虹吸效应
- 风扇建议采用5020规格(5V 0.2A)侧向吹风
4.2 常见故障排查
-
湿度读数异常:
- 检查传感器供电是否稳定(3.3V)
- 尝试重新校准(干燥时读取最小值,浸水时读取最大值)
-
蓝牙连接不稳定:
- 确保模块已进入AT模式配置正确波特率(通常9600)
- 手机APP要添加延时防止频繁发送指令
-
水泵不工作:
- 测量继电器线圈电压是否达到4.5V以上
- 检查水泵是否卡死(可短暂直接通电测试)
4.3 功耗优化方案
- 将DHT11采样间隔从1秒改为30秒
- 蓝牙模块在不使用时进入AT+SLEEP模式
- STM32主频降至36MHz仍能满足需求
5. 功能扩展方向
实际使用两个月后,发现还可以加入这些改进:
- 历史数据记录:添加SD卡模块存储每日湿度变化
- 太阳能供电:搭配18650电池实现离网运行
- 多区域控制:通过74HC595扩展IO控制多个花盆
- 云端监控:换用ESP8266模块连接物联网平台
这个项目最让我惊喜的是光照补偿算法确实有效——阳台的绿萝在夏季高温时,系统会自动增加浇水频率,现在叶片明显比手动浇水时更加饱满。建议初次尝试时可以先用洞洞板搭建原型,测试OK后再设计PCB,能节省不少调试时间。
code复制