这个基于STM32F103C8T6单片机的家庭植物工厂控制系统,是我在指导毕业设计时经常推荐的一个经典项目。它完美结合了嵌入式系统开发、传感器技术和物联网应用,特别适合作为电子类专业学生的综合实践课题。
系统核心功能是通过多种传感器实时监测植物生长环境参数,并自动调节执行机构来维持最佳生长条件。具体来说:
这个设计的亮点在于它完整覆盖了从传感器数据采集、逻辑判断到执行控制的闭环流程,同时实现了本地和远程双控制模式,非常贴近实际智能农业应用场景。
整个系统采用经典的"传感器-控制器-执行器"架构:
code复制[传感器层] → [STM32主控] → [执行器层]
↑↓ ↑↓
[本地交互] [远程监控]
具体模块划分如下:
中控核心:STM32F103C8T6最小系统板
输入子系统:
输出子系统:
在选择各个模块时,我主要基于以下几个原则:
传感器部分:
执行机构:
通信模块:
实际开发中发现,ESP8266的固件版本对稳定性影响很大,建议使用安信可官方提供的AT固件(v1.7.1以上)
STM32F103C8T6最小系统包含以下关键部分:
电源电路:
时钟电路:
调试接口:
复位电路:
各传感器连接方式如下表所示:
| 传感器模块 | 接口类型 | 连接引脚 | 备注 |
|---|---|---|---|
| DS18B20 | 单总线 | PB12 | 需4.7k上拉 |
| BH1750 | I2C | PB6/PB7 | 地址0x23 |
| HC-SR04 | GPIO | PA8/PA9 | 5V需电平转换 |
| PH传感器 | ADC | PA0 | 需运放调理 |
特别注意:
继电器控制采用经典的三极管驱动方案:
code复制STM32 GPIO → 1k电阻 → S8050 NPN → 继电器线圈
↑
1N4148续流二极管
实测发现:
采用分层模块化设计:
code复制应用层:main.c (业务逻辑)
↓
驱动层:sensor.c/relay.c/oled.c (设备驱动)
↓
硬件层:HAL库/寄存器操作
关键设计要点:
虽然项目说明中只提到阈值控制,但实际加入了简易PID:
c复制// 在control.c中
float Temp_PID_Control(float current, float target)
{
static float errSum = 0, lastErr = 0;
float err = target - current;
errSum += err;
float dErr = err - lastErr;
lastErr = err;
return KP*err + KI*errSum + KD*dErr;
}
参数经验值:
超声波测距的常见误触发问题解决方案:
c复制// 在ultrasonic.c中
uint8_t Detect_Pest(void)
{
static uint8_t count = 0;
float dist = Get_Distance();
if(dist < 30.0) { // 30cm内有物体
if(++count > 3) { // 连续3次检测到
count = 0;
return 1;
}
}
else {
count = 0;
}
return 0;
}
手机端与ESP8266采用自定义简单协议:
code复制[帧头0xAA][数据类型][数据长度][数据内容][校验和]
示例温度上报帧:
code复制AA 01 04 00 00 20 41 25
解释:
布局策略:
布线技巧:
常见问题:
PH传感器校准:
光照传感器校准:
温度补偿:
在实际测试中,发现几个可以改进的地方:
电源管理优化:
传感器扩展:
算法升级:
低功耗设计:
这个项目最让我满意的是它的完整性和实用性。从硬件选型到软件架构,再到最后的调试优化,几乎涵盖了嵌入式系统开发的全部流程。特别是在解决PH传感器信号干扰问题时,让我深刻理解了模拟电路设计的重要性。建议后续开发者可以尝试用四层板设计,能更好地处理信号完整性问题。