1. 项目概述与核心功能解析
作为一名长期从事嵌入式系统开发的工程师,最近完成了一个基于STM32的智能猫砂盆控制系统设计项目。这个系统通过多传感器协同工作,实现了对猫砂盆状态的全面监控和智能管理。相比市面上简单的机械式猫砂盆,这套系统在功能性、安全性和用户体验方面都有显著提升。
核心功能模块可以归纳为三大类:
-
环境监测系统:
- 重量检测:HX711称重模块实时监测猫砂余量(0-1kg量程)
- 气体检测:MQ-135模块监测氨气浓度(典型检测范围10-1000ppm)
- 温湿度检测:DHT11传感器监测环境参数(温度0-50℃±2℃,湿度20-90%RH±5%)
- 体温监测:MLX90614非接触式红外测温(测量范围-70~380℃)
-
行为识别系统:
- 热释电传感器检测猫咪进出状态
- 基于重量变化的二次验证机制(200g-1kg为无猫状态)
-
执行机构系统:
- 翻砂电机(典型工作电流0.5A)
- UV消毒灯(波长253.7nm,功率5W)
- 通风风扇(DC12V,0.1A)
- 声光报警模块(蜂鸣器+LED)
提示:在原型开发阶段,建议使用可调电源对所有执行机构进行单独测试,确认工作电流在STM32 GPIO驱动能力范围内(通常不超过20mA),大电流设备必须通过继电器控制。
2. 硬件系统设计与关键器件选型
2.1 主控芯片选型考量
选择STM32F103C8T6作为主控芯片主要基于以下考量:
- 性价比:Cortex-M3内核,72MHz主频,20KB RAM+64KB Flash,市场价约15元
- 外设资源:
- 3个USART(WIFI模块、调试接口、备用)
- 2个SPI接口(OLED显示、MLX90614)
- 1个I2C接口(可扩展)
- 16路12位ADC(满足多传感器需求)
- 开发生态:丰富的库函数支持和社区资源
2.2 传感器模块关键参数
-
HX711称重模块:
- 24位ADC精度
- 支持5V/3.3V供电
- 典型接线方式:
c复制// STM32连接示意 #define HX711_DOUT PA6 #define HX711_SCK PA7
-
MLX90614红外测温:
- I2C接口(地址0x5A)
- 视场角90°
- 测量精度±0.5℃(体温范围)
- 需注意安装高度(建议距猫背15-20cm)
-
MQ-135氨气传感器:
- 预热时间≥24小时
- 使用前需进行72小时老化
- 需定期校准(建议每月一次)
2.3 电源设计要点
系统采用Type-C接口供电,实际开发中需要注意:
- 电机启动瞬间电流可能达到稳态的3-5倍
- UV消毒灯工作时会产生电源干扰
- 建议电路设计:
code复制5V输入 → LM2596(3.3V) → 单片机 │ └─ TPS5430(5V) → 传感器阵列
3. 软件架构与核心算法实现
3.1 主程序状态机设计
采用时间片轮询架构,关键状态包括:
c复制typedef enum {
IDLE_STATE, // 待机状态
CAT_DETECTED, // 猫咪进入
CLEANING_PROCESS, // 清理过程
EMERGENCY_ALERT, // 异常报警
MANUAL_MODE // 手动模式
} SystemState;
3.2 重量检测算法优化
原始HX711读数存在抖动问题,采用三重滤波:
- 硬件滤波:0.1μF电容并联DOUT引脚
- 软件滤波:连续10次采样取中值
- 动态阈值:根据历史数据自动调整敏感度
c复制#define SAMPLE_TIMES 10
int32_t Get_Stable_Weight(void) {
int32_t samples[SAMPLE_TIMES];
for(int i=0; i<SAMPLE_TIMES; i++){
samples[i] = HX711_Read();
delay_ms(5);
}
// 排序算法省略...
return samples[SAMPLE_TIMES/2];
}
3.3 热释电传感器误触发防护
常见问题:环境温度变化导致误触发
解决方案:
- 设置30秒锁定时间
- 与重量传感器联合判断
- 添加红外脉冲计数验证
c复制void PIR_Handler(void) {
static uint32_t lastTrigger = 0;
if(HAL_GetTick() - lastTrigger < 30000) return;
if(Read_Weight() > 200) { // 重量验证
systemState = CAT_DETECTED;
lastTrigger = HAL_GetTick();
}
}
4. 通信协议与手机端交互设计
4.1 WiFi模块配置
选用ESP8266模块,通信要点:
- 工作模式:STA+AP双模式
- 数据传输协议:自定义轻量级JSON格式
- 心跳包间隔:30秒
- 典型AT指令流程:
code复制AT+CWMODE=3 // 设置双模式 AT+CWJAP="SSID","PWD" // 连接路由器 AT+CIPSTART="TCP","192.168.1.100",8080 // 建立连接
4.2 数据包结构设计
json复制{
"ver":1,
"cmd":10,
"weight":450,
"temp":38.2,
"gas":120,
"alert":0
}
字段说明:
- ver:协议版本
- cmd:指令类型(1-数据上报,2-参数设置,3-控制命令)
- alert:报警状态位(bit0-重量,bit1-氨气,bit2-温度)
5. 系统调试与性能优化
5.1 常见问题排查表
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 重量读数漂移 | 传感器受力不均 | 调整安装位置,增加橡胶垫 |
| 热释电频繁误报 | 环境温度波动 | 调整灵敏度电位器 |
| WiFi频繁断开 | 信号干扰 | 更换2.4G信道,添加电容 |
| 电机启动失败 | 电源功率不足 | 外接12V/2A适配器 |
5.2 功耗优化措施
-
传感器分时供电:
c复制void Sensor_Power_Control(uint8_t state) { HAL_GPIO_WritePin(GPIOC, GPIO_PIN_12, state); // 电源稳定延迟 if(state) delay_ms(100); } -
动态调整采样频率:
- 无猫状态:每30秒采样一次
- 有猫状态:每秒采样一次
-
使用STOP模式降低待机功耗:
c复制void Enter_Low_Power(void) { HAL_SuspendTick(); HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); SystemClock_Config(); // 唤醒后重新初始化时钟 }
6. 生产注意事项与改进方向
6.1 批量生产建议
-
PCB优化:
- 改用四层板设计
- 电机驱动部分增加铺铜
- 添加TVS二极管防护
-
结构设计:
- 传感器防水处理(IP65等级)
- 电机传动部分添加润滑油脂
- 避免WiFi天线靠近金属部件
6.2 未来升级方向
-
机器学习算法:
- 猫咪如厕习惯分析
- 异常行为预警
-
多猫识别:
- RFID标签识别
- 图像识别技术
-
云平台集成:
- 数据长期存储
- 健康趋势分析
在实际开发过程中,最耗时的部分是传感器数据的稳定性调试。建议后来者在原型阶段就建立完善的数据日志系统,保存原始传感器数据用于后期分析。另外,电磁兼容性问题往往在后期才暴露,电源设计要预留足够的余量。
