智能宠物喂食毕业设计原理从硬件选型到嵌入式控制的实战落地
摘要:许多物联网方向的毕业生在实现“智能宠物喂食器”时,常陷入原理图设计不合理、电机驱动不稳定或定时逻辑不可靠等困境。本文基于真实毕业设计项目,详解以 STM32 为核心、结合称重传感器与 Wi-Fi 模块的完整硬件原理图设计,并配套轻量级固件架构,确保喂食动作的幂等性与低功耗运行。读者可直接复用电路拓扑与控制逻辑,快速完成高可靠性原型开发。
1. 典型痛点:为什么“能跑”≠“能喂”
做毕业设计时,大家往往先跑通“Hello World”就急着拍视频演示,结果现场答辩一上电:
- 电源噪声耦合到 HX711 差分输入,称重值漂移 ±20 g,投粮误差肉眼可见
- 继电器在 3.3 V GPIO 直接驱动,触点打火导致 MCU 复位,定时任务直接丢失
- 电机堵转电流飙升,LDO 瞬间掉压,Wi-Fi 模块重启,云端显示“离线”
这三连击足以让评委眉头一皱。下面把踩过的坑拆给你看,并给出原理图级解决方案。
2. 主控与传感器选型:STM32F103 vs ESP32,HX711 到底够不够用?
2.1 MCU 对比
| 维度 | STM32F103C8T6 | ESP32-WROOM |
|---|---|---|
| 主频 | 72 MHz | 240 MHz (双核) |
| 低功耗 | Sleep 20 µA | 轻睡眠 2 mA,Deep-sleep 10 µA |
| 外设 | 多路 12-bit ADC、PWM、USB FS | Wi-Fi/BLE 双模,但 ADC 非线性区大 |
| 电机控制 | 硬件 PWM 死区 | 软件 PWM 抖动大 |
| 供应链 | 10 元以内 | 15-20 元,缺货风险高 |
结论:若只做本地定时+称重闭环,STM32 更稳;若必须原生连云,ESP32 可省一颗通信模组,但记得外加电机驱动隔离,否则射频干扰会拉垮 ADC。
2.2 称重方案
HX711 24-bit Σ-Δ ADC 足够 5 kg 猫狗粮秤,0.1 g 分辨率。注意:
- 采样率 10 Hz 时,低通滤波截止 5 Hz 可抑制宠物踩踏板抖动
- 片内 PGA 128 倍增益,差分输入共模需落在 AVDD/2±30 mV,否则非线性爆表
若预算充足可换 AD7190,但毕业设计 HX711 足以“交差”。
3. 原理图关键模块拆解
下图是核心电路拓扑,可左右对照阅读。
3.1 电源树
- 外接 12 V/2 A 适配器,先经共模扼流圈 + TVS 抑制浪涌
- 12 V → 降压 DCDC MP1584 → 5 V/1 A,给电机、继电器
- 5 V → LDO BL1117-3.3 → 3.3 V/800 mA,给 MCU、HX711、WS2812 指示灯
- 电池备份:CR2032 + 肖特基 OR-ing,掉电维持 RTC,保证定时任务不丢
3.2 电机驱动
- 5 V 减速电机额定 300 mA,堵转 1.2 A
- 采用 DRV8873 集成 H 桥,内置电流斩限 1.5 A;逻辑输入 IN1/IN2 由 STM32 定时器 PWM 驱动,可硬件刹车防过冲
- 电机电源与数字地单点连接,并在 H 桥 VM 引脚就近放 100 µF+100 nF 去耦,削弱换向火花
3.3 继电器/灯带驱动隔离
- 继电器为 5 V 单线圈,吸合 70 mA,不能用 GPIO 直驱
- NPN 达林顿 ULN2003 做低侧开关,并在线圈反并 1N4149;MCU 引脚仅出 2 mA,实现电气隔离
- WS2812 灯带数据口经 74VHC244 做电平转换,避免 3.3 V 驱动 5 V 像素时采样点漂移
3.4 称重前端
- 5 kg 铝质单点式传感器,全桥 1 mV/V
- HX711 采用本地 LDO 供电,与 MCU 数字电源分开,地线星型汇总到电池负极
- SCK、DOUT 走线长度 < 50 mm,并包地,远离电机电源线
4. 固件架构:状态机 + 任务调度
4.1 核心状态机
typedef enum { ST_IDLE = 0, ST_WEIGHT_CHECK, ST_MOTOR_RUN, ST_FEED_DONE, ST_ERROR } state_e; volatile state_e g_state = ST_IDLE;主循环 100 Hz 刷新,喂狗、收 Wi-Fi 事件、刷新 LED;状态迁移只在中断或事件下触发,保证幂等。
4.2 定时任务调度
采用 RTC Alarm A + 备份寄存器保存下次喂食时间,掉电不丢。代码片段:
/* rtc_alarm.c */ void RTC_Alarm_IRQHandler(void) { if (RTC_GetITStatus(RTC_IT_ALRA) != RESET) { RTC_ClearITPendingBit(RTC_IT_ALRA); /* 置位信号量,通知主循环 */ xSemaphoreGiveFromISR(xSemFeed, NULL); } }主循环阻塞在xSemaphoreTake(xSemFeed, portMAX_DELAY),拿到信号后把g_state推进ST_WEIGHT_CHECK,开始称重闭环。
4.3 称重闭环算法
float get_weight_avg(uint8_t samples) { float sum = 0; for (int i = 0; i < samples; i++) { sum += hx711_read(); vTaskDelay(100 / portTICK_RATE_MS); /* 100 ms 间隔 */ } return sum / samples; }- 开机校零:宠物未踩踏板时记录 offset
- 投粮阈值:目标重量 = 设定克数 + 容器皮重
- 实时 PID 没必要,直接“差值>5 g 继续转,<5 g 刹车”即可,简化参数
4.4 低功耗策略
- 空闲态调用
HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI),实测 6 mA - 喂食结束后关闭 DRV8873 使能,电机驱动高阻,电流降到 0.5 mA
- Wi-Fi 模组每 30 s 醒来一次发 MQTT,其余时间 Deep-sleep,整机平均 12 mA·h
5. 实测数据:功耗 & 精度
| 场景 | 电流 | 单次能耗 |
|---|---|---|
| 待机 | 6 mA | 144 mA·h/天 |
| 称重采样 | 18 mA × 3 s | 0.015 mA·h |
| 电机运行 | 450 mA × 4 s | 0.5 mA·h |
| Wi-Fi 同步 | 80 mA × 2 s | 0.044 mA·h |
使用 18650-2600 mA·h 电池,理论续航 2600/144 ≈ 18 天;若每天喂 4 次,仍富余 40 % 容量。
称重误差:标准 100 g 砝码 10 次平均 100.3 g,σ=1.1 g,满足 ±5 % 毕业设计指标。
6. 生产级避坑指南
- PCB 布局对称:HX711 差分走线等长 < 0.5 mm,否则温漂引入微伏级失调
- 电源顺序:先 3.3 V 后 5 V,否则 MCU 上电瞬间误触 DRV8873 使能,电机意外转动
- 机械防卡粮:绞龙与桶壁间隙 1 mm,并在桶底加 30° 斜面;堵转电流阈值设在 1 A,超时 500 ms 自动反转 1 圈
- 测试夹具:3D 打印“假粮杯”内放钢珠,可重复验证 50 g/100 g/200 g 三档,节省真粮
- 固件 OTA:Wi-Fi 模组留 1 MB 用户分区,采用 双备份 + CRC32,断点续传,校园网掉线也能恢复
7. 可扩展思考
- 多宠物识别:在桶口加 RC522 读卡,宠物颈挂 13.56 标签标签,系统按个体体重/食量自动分配
- 远程投喂确认:MQTT 下行指令带 message-id,设备执行后上行 ack + 实际重量,云端用幂等表去重,解决“手机多点一次”的重复投粮
毕业设计不是终点,把硬件可靠性做扎实,后续算法迭代才有意义。希望这份原理图与代码能为你的“毛孩子”项目保驾护航,也欢迎留言交流更多宠物 IoT 的奇思妙想。