1. 项目概述
作为一名从事嵌入式开发多年的工程师,最近完成了一个基于STM32的智能宠物喂养系统项目。这个系统完美解决了现代养宠人群面临的几个痛点:定时定量投喂、远程监控、余粮监测等功能一应俱全。相比市面上动辄上千元的品牌智能喂食器,我们这个方案成本可以控制在300元以内,而且全部开源,特别适合电子爱好者DIY或作为毕业设计项目。
系统以STM32F103C8T6为主控,配合称重模块、时钟模块、温湿度传感器等常见外设,实现了高度自动化的宠物喂养管理。最让我自豪的是,通过精心设计的控制算法,投食精度可以达到±2g,完全满足科学养宠的需求。下面我就把这个项目的完整实现过程分享给大家。
2. 硬件设计与选型
2.1 核心硬件清单
经过多次迭代测试,最终确定的硬件配置如下:
- 主控芯片:STM32F103C8T6(性价比高,资源丰富)
- 显示模块:LCD1602(成本低,显示信息足够)
- 称重模块:HX711(24位ADC,精度可达0.1g)
- 时钟模块:DS1302(带电池供电,断电不影响计时)
- 温湿度传感器:DHT11(虽然精度一般,但成本低)
- 电机驱动:ULN2003(驱动步进电机足够)
- 通信模块:ESP8266 WiFi模块(实现远程控制)
2.2 关键硬件设计要点
称重模块的安装:
在实际安装HX711称重模块时,要注意避免机械应力干扰。我的经验是:
- 使用硅胶垫隔离食盆与底座
- 称重传感器要水平安装
- 导线要固定,避免拉扯影响读数
电机选型建议:
经过测试,28BYJ-48步进电机是最佳选择:
- 扭矩足够推动普通宠物粮
- 价格便宜(约10元/个)
- 配合ULN2003驱动板使用简单
重要提示:电机安装时要注意与粮仓出口的对齐,避免卡粮。我最初版本就因为这个设计缺陷经常出现卡死情况。
3. 软件系统设计
3.1 主程序流程图
系统软件采用前后台架构,主循环中依次处理各个功能模块:
code复制初始化硬件 → 读取传感器数据 → 处理用户输入 → 执行定时任务 → 更新显示
3.2 关键算法实现
重量测量算法:
HX711模块的原始AD值需要经过处理才能得到实际重量。我的处理方法是:
c复制void get_weight(void) {
volatile unsigned long cur_adc_value = ReadCount();
if(cur_adc_value <= FullScale) {
weight = 0;
} else {
cur_adc_value = cur_adc_value - FullScale;
// 数据滤波处理
if(cur_adc_value > 55) {
if(cur_adc_value % 100 >= 55) {
cur_adc_value = cur_adc_value + (100 - (cur_adc_value % 100));
} else {
cur_adc_value = cur_adc_value - (cur_adc_value % 100);
}
} else {
cur_adc_value = 0;
}
weight = cur_adc_value * RATIO; // 乘以校准系数
}
}
定时投喂控制:
系统支持设置最多3个定时投喂时间点,通过RTC模块触发:
c复制if((SysDate.hour==nz_shi && SysDate.min==nz_fen && SysDate.sec==nz_miao)||
(SysDate.hour==nz_shi2 && SysDate.min==nz_fen2 && SysDate.sec==nz_miao2)||
(SysDate.hour==nz_shi3 && SysDate.min==nz_fen3 && SysDate.sec==nz_miao3)) {
if(weight < food_weight) openFlag = 1; // 触发投喂
}
4. 系统功能实现细节
4.1 多模式投喂控制
系统支持三种投喂模式:
- 定时自动模式:按预设时间自动投喂
- 手动按键模式:通过物理按键立即投喂
- APP远程模式:通过手机APP控制投喂
实测发现,步进电机运行30秒大约可以投放15g普通猫粮(具体数值需要根据粮仓设计校准)。
4.2 余粮监测与提醒
通过HX711实时监测食盆重量,当余粮低于设定阈值时:
- LCD显示警告信息
- 通过WiFi模块向手机APP推送通知
- 记录缺粮事件到EEPROM
5. 常见问题与解决方案
5.1 称重不准问题
现象:重量读数波动大
解决方法:
- 检查HX711的基准电压是否稳定
- 增加软件滤波算法
- 确保机械结构稳固
5.2 电机卡死问题
现象:投喂时电机堵转
解决方法:
- 增加电流检测,发现堵转立即停止
- 优化粮仓出料口设计
- 在代码中加入超时保护:
c复制if(count_ss <= 100) {
MotorCW(); // 正转
} else {
MotorStop(); // 超时停止
count_ss = 100;
}
5.3 WiFi连接不稳定
现象:APP经常断开连接
优化方案:
- 增加重连机制
- 优化天线布置
- 采用心跳包保持连接
6. 项目优化方向
在实际使用过程中,我发现还可以做以下改进:
- 增加摄像头模块,实现宠物进食监控
- 改用更精确的DHT22温湿度传感器
- 开发微信小程序替代原生APP
- 增加电池供电,应对突发停电
这个项目最让我惊喜的是它的实用性。我自己养的两只猫现在已经完全依赖这个喂食器了,即使出差几天也不用担心它们的吃饭问题。整个系统的稳定性经过了一个月的连续运行测试,表现非常可靠。
