1. 项目概述
这个基于STM32的智能宠物管家项目,是我去年为家里两只猫设计的自动化喂养系统。作为一个嵌入式开发老手,我最初只是想解决出差时宠物喂食的问题,没想到最终做成了一个集环境监测、远程投喂、行为分析于一体的智能终端。整套系统成本控制在200元以内,比市面同类产品便宜至少60%,而功能却更加丰富实用。
核心功能包括:
- 定时定量自动投喂(支持手机APP远程控制)
- 食盆重量监测与余量预警
- 环境温湿度检测与异常报警
- 宠物活动频率统计
- 低功耗设计(断电可续航72小时)
2. 硬件设计与选型
2.1 主控方案对比
我测试过三种主控方案:
-
STM32F103C8T6(最终选择)
- 72MHz主频足够处理传感器数据
- 内置硬件SPI/I2C接口简化外设连接
- 价格仅12元/片
- 开发资源丰富,社区支持好
-
ESP8266
- 虽然自带WiFi但处理能力有限
- 多任务运行时喂食机构响应延迟明显
-
STM32F407
- 性能过剩导致功耗增加
- 成本高出3倍但无明显体验提升
提示:选择F103系列时注意区分C8T6(64KB Flash)和CBT6(128KB Flash),后者更适合需要OTA升级的场景。
2.2 关键外设配置
投喂机构设计:
- 采用28BYJ-48步进电机(5元/个)驱动螺旋送料杆
- 加装霍尔传感器实现送料闭环控制
- 实测每转可送出3g饲料(误差±0.2g)
称重模块:
- HX711 ADC模块(8元)
- 定制不锈钢称重平台
- 软件滤波算法消除宠物触碰干扰
环境监测:
- DHT22温湿度传感器
- 加装金属网罩防止宠物破坏
- 每10分钟采样一次,变化超过阈值立即上报
3. 软件架构实现
3.1 系统任务划分
c复制void Task_Schedule(void)
{
xTaskCreate(Task_Feed, "FEED", 128, NULL, 3, NULL);
xTaskCreate(Task_Sensor, "SENSOR", 256, NULL, 2, NULL);
xTaskCreate(Task_Comm, "COMM", 256, NULL, 1, NULL);
}
采用FreeRTOS实现多任务管理,优先级设置要点:
- 通信任务优先级最低(避免网络阻塞影响喂食)
- 喂食任务响应延迟必须<50ms
- 传感器任务采用事件触发模式
3.2 关键算法解析
余量预测算法:
c复制float predict_remain_days(float current_weight)
{
static float history[7] = {0};
float avg_consume = moving_average(history);
return current_weight / (avg_consume * safety_factor);
}
通过7天消费量移动平均计算,叠加1.2倍安全系数,避免断粮风险。
防卡料检测:
监测电机电流+霍尔脉冲计数,当出现:
- 电流>300mA且脉冲数<预期值50%
- 持续超过2秒
判定为卡料并执行反转-正转解除流程
4. 低功耗优化实践
4.1 电源管理方案
采用双电源设计:
- 主电源:5V/2A适配器
- 备份电源:18650锂电池组(两节并联)
- 切换电路使用MOSFET实现无缝衔接
实测功耗数据:
- 空闲状态:8.3mA
- 喂食过程:210mA(持续5s)
- 通信时段:85mA(每次15s)
4.2 软件省电技巧
- 传感器采样后立即进入休眠
- WiFi模组采用UDP协议替代TCP
- RTC唤醒替代定时器中断
- 将非关键日志存储在FRAM而非Flash
通过上述优化,电池续航从初始设计的24小时提升到72小时。
5. 生产调试要点
5.1 校准流程
-
称重校准:
- 空载时执行Tare去皮
- 放置100g砝码,记录ADC原始值
- 计算线性系数:k = (W1-W0)/(AD1-AD0)
-
投料量校准:
python复制def calibrate_feed(rotations): for i in range(1,6): run_motor(i) actual = scale.read() print(f"{i}转 = {actual}g")建议测试5组数据建立转数-重量对照表
5.2 常见故障排查
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 饲料结块 | 湿度>70%RH | 在储料桶加装干燥剂包 |
| 称重漂移 | 机械应力累积 | 重新执行Tare操作 |
| WiFi频繁断开 | 2.4G信道干扰 | 修改路由器信道为1/6/11 |
| 电机异响 | 转子偏心 | 调整联轴器同心度 |
6. 扩展功能建议
-
图像识别升级:
- 添加OV2640摄像头模组
- 运行轻量级YOLO模型识别宠物
- 实现个体识别(多宠物家庭)
-
智能联动:
mermaid复制graph LR A[检测到离开] --> B[启动扫地机器人] C[温度>30℃] --> D[开启空调](注:实际实现需通过MQTT协议对接智能家居平台)
-
3D打印外壳优化:
- 使用PETG材料提高耐刮性
- 增加斜面设计防止宠物攀爬
- 预留走线槽保持整洁
这个项目最让我惊喜的是DHT22的长期稳定性——连续运行一年后,温湿度数据漂移仍<±5%。建议每半年用标准表做一次校准。下一步我准备加入水质监测功能,让主子们喝上更新鲜的水。