1. 项目背景与核心价值
养宠家庭最头疼的问题之一就是出差或加班时无法按时喂食。传统喂食器要么功能单一,要么需要依赖特定品牌生态,而我们要做的是一款基于Flutter+OpenHarmony的跨平台智能喂食器控制系统。这个方案有三大突破点:
- 用Flutter实现一套代码适配手机、平板、车机等多终端控制界面
- 通过OpenHarmony的分布式能力实现开发板与多设备协同
- 独创的定时任务缓存机制确保断网时仍能正常喂食
我选择T113开发板作为硬件核心(市价约200元),搭配STM32F407VET6作为电机驱动模块,整套硬件成本控制在300元以内。相比市面动辄上千元的智能喂食器,这个方案对DIY爱好者非常友好。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构设计
2.1 跨平台方案选型
Flutter在这个项目中展现出三大优势:
- 一套代码同时生成Android/iOS控制端APP
- 丰富的动画库可以实现投食过程可视化
- 热重载特性大幅提高界面调试效率
关键配置:
dart复制dependencies:
flutter_local_notifications: ^9.1.5 // 用于喂食提醒
provider: ^6.0.2 // 状态管理
web_socket_channel: ^2.1.0 // 与开发板通信
2.2 OpenHarmony设备组网
开发板端采用OpenHarmony 3.2 LTS版本,关键实现步骤:
- 编译烧写系统镜像到T113开发板
- 配置distributed_hardware_manager组件实现设备发现
- 通过softbus建立手机与开发板的P2P连接
实测在家庭WiFi环境下,控制指令延迟可以控制在200ms以内,完全满足喂食场景需求。
3. 核心功能实现
3.1 定时任务管理
采用改良版时间轮算法实现定时任务调度:
c复制// OpenHarmony侧代码示例
#define SLOTS_NUM 24 // 24小时制
typedef struct {
int hour;
int minute;
int food_gram;
} FeedTask;
void schedule_task(FeedTask task) {
int slot = task.hour % SLOTS_NUM;
add_to_wheel(slot, task);
}
3.2 断网缓存机制
为解决网络不稳定问题,设计了三层缓存:
- 内存缓存:最近24小时的喂食计划
- SQLite持久化:关键任务备份
- 开发板EEPROM:最后生效的5条指令
当检测到网络中断时,系统会自动切换到本地缓存模式,并通过LED指示灯提醒用户。
4. 硬件适配要点
4.1 电机驱动电路
采用TB6612FNG驱动芯片,关键参数:
- 工作电压:2.5-13.5V
- 峰值电流:3.2A
- PWM频率:建议10kHz
接线示意图:
code复制[STM32] --> PWM --> [TB6612] --> [直流电机]
GPIO VMOT:12V
4.2 称重传感器校准
使用HX711模块实现称重,校准步骤:
- 空载时读取ADC值BASE
- 放置100g砝码读取ADC值REF
- 计算系数K=(REF-BASE)/100
- 保存到开发板Flash
5. 避坑指南
-
Flutter与原生通信:平台通道方法名必须完全匹配,建议统一命名规范如"feed/command"
-
定时任务冲突:OpenHarmony的定时器精度约±50ms,相邻任务建议间隔至少1分钟
-
电机干扰处理:在电源端并联1000μF电容,数据线加磁环
-
OTA升级:开发板存储分区建议按此划分:
- /system: 512MB
- /data: 256MB
- /cache: 64MB
实测数据显示,这套系统在连续工作30天的情况下,喂食时间误差不超过±2分钟,远超市售产品的±15分钟标准。整个项目最耗时的部分是电机扭矩调试,前后尝试了5种减速比方案才找到最适合宠物犬的3.5N·m输出。
对于想复现项目的开发者,建议先用面包板搭建测试电路,确认各模块工作正常后再设计PCB。我们在V1.0版本就曾因电源布局不合理导致WiFi频繁断连,这个教训值千金。
