一、项目概述
项目名称:喵非喵猫粮投喂器的设计与实现
项目编号:dz-855
核心控制器:STM32F103C8T6 单片机
本系统是一款基于单片机的智能宠物喂食设备,具备多种智能化功能,具体如下:
- 集成时钟模块,可设定定时投喂时间;当到达指定时间时,自动执行5秒投喂操作,并通过语音提示“过来吃饭了”;
- 搭载称重传感器,实时监测猫粮剩余量;当余量低于预设阈值时,手机端将接收到弹窗及震动提醒;
- 配备湿度检测单元,用于监控猫粮环境湿度;若湿度超过上限,系统启动通风机制,同时向手机发送报警信息;
- 内置摄像头模块,支持远程实时查看猫咪状态;
- 采用红外感应技术,当检测到猫在投喂区域停留超过30秒,自动触发一次投喂;
- 配置OLED显示屏,用于本地显示重量、温湿度、时间以及投喂和通风状态;
- 设有独立按键,可用于界面切换、参数设置及手动控制投喂与通风功能;
- 通过WiFi模块实现数据上传与远程交互,用户可在手机端设置各项阈值并远程操控投喂与通风。
二、系统架构设计
本设计以STM32F103C8T6为核心主控芯片,构建了一个集感知、处理与执行于一体的智能控制系统。整体结构划分为三大模块:输入模块、中控模块与输出模块。
中控模块:由STM32F103C8T6单片机构成,负责接收各输入信号,进行逻辑判断与处理,并协调控制输出设备运行。
输入模块包含以下七个部分:
- 称重模块:采集当前猫粮容器内的食物重量;
- 时钟模块:提供精确的时间信息,支撑定时任务的实现;
- 湿度检测模块:监测储粮区空气湿度,防止粮食受潮;
- 红外避障模块:感知是否有猫靠近投喂位置;
- 摄像头模块:实现对猫咪活动区域的实时图像采集;
- 独立按键模块:支持用户进行界面导航、参数调整及手动控制指令输入;
- 供电电路:为整个系统提供稳定电源支持。
输出模块主要包括三个部分:
- 显示单元:OLED屏幕显示当前重量、温湿度、时间、设备工作状态(如投喂/通风开关)等信息;
- 继电器控制模块:使用两个继电器分别控制投喂电机和通风风扇的启停;
- 语音播报模块:在特定事件发生时(如定时投喂开始),播放提示音“过来吃饭了”。
通信扩展模块(WiFi):兼具输入与输出双重功能。一方面接收来自手机端的配置指令(如设定时间、阈值、手动控制命令);另一方面将系统采集的数据上传至移动端,实现远程监控与交互。
三、硬件实物展示
主控芯片型号:STM32F103C8T6
PCB板特征:绿色双层板,厚度为1.2mm,上下层均覆铜并接地,提升抗干扰能力;
元器件封装:主要采用插针式元件,部分降压芯片使用贴片封装;
供电接口:采用TYPE-C接口,便于连接与供电。
四、电路原理图说明
设计软件:Altium Designer 2013(AD2013)版本
连线方式:采用网络标号方式进行电气连接,提高图纸可读性与布线效率;
注意事项:所提供的原理图为各功能模块的外部引脚连接图,并未展示模块内部详细电路结构。
五、PCB布局图说明
PCB图由原理图导入生成,大部分元器件封装由设计者自行绘制,不对外提供独立封装库文件,仅提供完整连接的源工程文件;
PCB为双层结构,顶层与底层均进行覆铜处理并接地,增强系统稳定性;
板上设有项目编号标识,位于单片机底座下方,安装完成后被芯片遮挡,外部不可见。
六、程序代码展示
开发环境:Keil uVision5(Keil5)
软件架构采用模块化设计思想,将逻辑控制代码与硬件驱动代码分离:
- main.c 文件:包含主程序逻辑,负责系统初始化、任务调度与状态管理;
- 其他 .c 文件:存放各外设模块的驱动程序,如LCD驱动、WiFi通信、传感器读取等。
/**********************************
函数名:处理函数
传参值:无
返回值:无
**********************************/
void Manage_Function(void)
{
if(display_num == 0) //测量界面
{
if((ds1302_buf[4] == time_hour_1 && ds1302_buf[5] == time_min_1 && ds1302_buf[6] == 0 && flag_time_1 == 1) ||
(ds1302_buf[4] == time_hour_2 && ds1302_buf[5] == time_min_2 && ds1302_buf[6] == 0 && flag_time_2 == 1) ||
(ds1302_buf[4] == time_hour_3 && ds1302_buf[5] == time_min_3 && ds1302_buf[6] == 0 && flag_time_3 == 1)) //达到定时时间
{
flag_tw = 1;
if(flag_bb == 0)
{
Huart2_Send_Str("过来吃饭了");
flag_bb = 1;
}
}
if(weight_value < weight_min) //当重量小于最小值重量标志位为打开弹窗
{
flag_zl = 1;
}
else //否则关闭弹窗
{
flag_zl = 0;
}
if(humi_value > humi_max) //湿度大于最大值打开通风和弹窗
{
RELAY_TF = 1;
humi_tc = 1;
flag_tf = 0;
}
else //否则关闭通风和弹窗
{
humi_tc = 0;
if(flag_tf == 0)
{
RELAY_TF = 0;
}
}
if(BZ == 0) //当避障检测30S打开投喂
{
flag_begin_30s = 1;
if(flag_finish_30s == 1)
{
flag_tw = 1;
}
}
else //否则关闭投喂
{
flag_begin_30s = 0;
flag_finish_30s = 0;
}
}
else //设置界面
{
flag_bb = 0;
flag_tw = 0;
RELAY_TW = 0;
RELAY_TF = 0;
}
if(flag_tw == 1) //当投喂标志位为1
{
RELAY_TW = 1;
flag_begin_5s_tw = 1; //五秒计时打开
if(flag_finish_5s_tw == 1) //当五秒到达标志位为1
{
flag_tw = 0;
}
}
else //否则关闭
{
RELAY_TW = 0;
flag_begin_5s_tw = 0;
flag_finish_5s_tw = 0;
}
if(flag_finish_5s == 1) //5秒上传一次数据
{
flag_begin_5s = 0;
Aliyun_Send_Data();
flag_begin_5s = 1;
}
}

雷达卡


京公网安备 11010802022788号







