目录
[2.1 硬件清单:](#2.1 硬件清单:)
[2.2 功能介绍:](#2.2 功能介绍:)
[资料获取 查看主页介绍:兆龙电子单片机设计](#资料获取 查看主页介绍:兆龙电子单片机设计)
一、设计背景和意义
1.1设计背景:
在日常家庭宠物科学喂养、独居宠物无人照料监护、多宠物家庭定量投喂管理、上班族远程喂养控制及宠物店规模化喂养场景的背景下,投喂精准定量、喂养时间智能管控、宠物进食状态监测、多场景便捷适配成为宠物喂养类产品的核心需求。传统宠物喂养方式存在明显局限:一方面,高端智能宠物喂养系统(如定制化宠物健康管理中控平台、工业级精准投喂控制网关、品牌成套商用宠物喂养设备)功能虽全但成本高昂,部署复杂且需专业人员上门调试与后期维护,难以普及到普通家庭、小户型住宅、租房群体及小型宠物店等日常场景,且系统生态封闭性强,不同品牌、不同协议的喂养设备与监测终端兼容性差,无法与个人移动终端、家庭智能设备、宠物店管理平台灵活联动,更换或升级成本高,无法满足不同人群(如普通宠物主人、上班族、宠物店经营者、独居老人养宠群体)的便捷宠物喂养与健康管理需求;另一方面,普通简易宠物喂养装置(如传统手动食盆、单一功能定时投喂器、基础款大容量储粮桶)虽操作简单、价格低廉,但功能单一,仅能实现基础的食物盛放或固定时间投喂,缺乏多维度喂养状态监测、投喂量智能调节、喂养记录存储、远程投喂控制及设备故障状态提醒(如粮桶缺粮、投喂卡滞、设备断电)等功能,无法满足现代化养宠场景下对全面覆盖、智能响应、便捷高效的宠物喂养与健康管控需求。
现有关宠物喂养方案还存在功能割裂与集成度低的问题:部分高端智能宠物喂养系统虽具备多维度喂养管控与健康监测功能,但依赖复杂的软硬件架构与专属生态维护,后期使用成本高,难以覆盖预算有限的普通养宠家庭、上班族养宠群体或小型宠物店的喂养场景;而低成本宠物喂养装置又在功能完整性与智能化上存在欠缺,无法实现喂养数据与移动 APP、家庭智能终端、宠物店管理平台的实时联动,导致投喂响应延迟、定量投喂误差偏大、个性化需求(如宠物少食多餐定时投喂、远程查看进食状态、缺粮自动提醒)无法满足等问题,无法为用户科学喂养宠物(如精准把控投喂量与投喂时间)及便捷管理宠物健康(如追溯进食规律、监测异常进食状态)提供可靠支撑。基于此,本设计以 STM32 单片机为核心,融合高精度投喂控制与辅助模块(如 RTC 定时模块、重量感应模块、投喂执行模块、语音提醒模块)、LCD 显示模块、数据存储模块及蓝牙通信与异常提醒模块,构建低成本、高集成度的 STM32 单片机智能宠物喂养系统,以解决传统宠物喂养方式操作繁琐、智能化程度低、功能单一及宠物喂养管控效率低的问题。
1.2设计意义:
从使用体验与时间日程精细化管理效率角度,该系统突破了传统时间管理与显示方式的局限:一是实现了多维度时间信息呈现与全场景日程联动(如支持实时时间显示、日期节日精准呈现、星期历法自动换算、计时倒计时功能,联动蓝牙通信模块、异常声光提醒模块、日程智能播报执行模块),无需用户手动核对时间、设置简易闹钟或记录重要日程,减少时间管理的繁琐性与日程提醒的延迟性;二是配备 OLED 实时显示模块,直观呈现当前精准时间 / 日期 / 星期、节日节气提示、系统运行状态(正常 / 异常)及日程提醒类型,同时支持数据自动存储(可通过蓝牙传输至移动 APP / 个人日程管理平台 / 小型办公统筹平台),方便用户与办公管理员长期追溯历史日程记录、时间校准记录与设备运行记录,也为优化个人作息规划方案、排查设备故障隐患及办公日程高效统筹提供完整数据支撑;三是新增个性化日程预警与自动提醒执行功能,当监测到预设时间节点(如起床提醒、用药定时、办公会议、学生上课、商铺营业 / 打烊、重要纪念日),系统根据日程类型自动触发对应执行动作(同时通过声光提醒模块反馈提醒信息与系统当前工作状态,蓝牙同步推送至关联移动终端),并联动语音播报模块执行智能提醒操作(如联动 "老人用药提醒",自动播报用药时间、用药剂量、完成状态记录,同步更新日程完成台账),无需人工手动干预即可实现时间与日程的智能化精细化管控,大幅提升了时间管理的便捷性与日程统筹的高效性。
从技术实践与成本控制角度,本设计以 STM32 单片机为核心,充分利用其低功耗、高性价比的优势,搭配低成本的高精度时间采集模块及通用外围模块,在保证计时精度(核心时间参数准确率可控制在 98% 以上,日程提醒与响应时间可控制在 0.5 秒以内)的前提下,有效降低了系统整体成本,相比同功能的高端智能时间管理系统成本降低 40%-60%,更易普及到普通家庭、学生宿舍、小型办公场所、个体商铺及老人居家照料等场景。同时,系统支持模块化扩展(如后续可新增方言语音播报功能、多人个性化日程权限管理功能、远程校时与日程同步更新功能),为后续功能升级预留了空间,具备良好的灵活性与可扩展性。
**二、**实物展示
下方为实物演示视频
下方为实物展示图片

三、硬件功能介绍
2.1 硬件清单:
-
STM32F103C8T6
-
LCD1602显示
-
HX711称重模块
-
DS1302时钟模块
-
DHT11温湿度传感器
-
ULN2003步进电机驱动
-
WIFI模块
2.2 功能介绍:
(1)DHT11 模块测温湿度,数据显在 LCD1602 屏
(2)HX711 模块测储料仓余料重量,数据显在屏
(3)DS1302 模块确保 LCD 屏显示准确年月日时分
(4)按键电路识别 4 个按键的操作指令
(5)监测喂食开关状态,状态显在 LCD 屏
(6)步进电机(配 ULN2003 驱动)执行自动投食,按按键 4 设喂食时间
(7)凭 HX711 传感器反馈,控制步进电机正反转调投食量
(8)按按键 2/3,控制步进电机(配 ULN2003 驱动)开 / 关手动投食
(9)LCD1602 屏显示时间、温湿度、食物重量、喂食状态
(10)按按键 1 设时间、按键 4 设喂食时间 / 重量,参数存好显在屏
(11)APP 同步显示温湿度、余料重量、时间、喂食状态
(12)APP 有 "手动喂食开 / 关" 按钮,点了指令控步进电机
(13)可在 APP 设单个 / 多个喂食时间,同步到 DS1302 模块执行
四、软件设计流程图

五、硬件PCB展示

六、软件主函序展示
void get_weight(void) //获得称重
{
volatile unsigned long cur_adc_value = 0;
cur_adc_value = ReadCount();//读取HX711的AD值
if (cur_adc_value <= FullScale)
{
weight = 0;
}
else
{
cur_adc_value = cur_adc_value - FullScale;//获取净重
///最终目的是把cur_adc_value最后两位取整
if (cur_adc_value > 55)//55只是一个微动值的判定,因为HX711是一款24位高精度的AD芯片,一般很微小的值也能感应到
{
if (cur_adc_value % 100 >= 55)//余数大于55
{
//////////把cur_adc_value值以55为基准进行取舍,假如cur_adc_value=257,则这里我们取整为300。再假如cur_adc_value=240,则我们取整200
cur_adc_value = cur_adc_value + (100 - (cur_adc_value % 100));
}
else
{
//////////把cur_adc_value值以55为基准进行取舍,假如cur_adc_value=89,则这里我们取整为100。再假如cur_adc_value=40,则我们取整0
cur_adc_value = cur_adc_value - (cur_adc_value % 100);
}
}
else
{
cur_adc_value = 0;
}
weight = cur_adc_value * RATIO;//乘上RATIO系数,得到正确的重量值
}
}
int main(void)
{
u8 temperature=0;
u8 humidity=0;
u8 flag1=0;
delay_init(); //延时函数初始化
KEY_GPIO_Init(); //按键初始化
HX711_GPIO_Init(); //hx711引脚初始化
To_Zero();
DS1302_Init(&SysDate);
LCD_Init(); //屏幕初始化
MOTOR_GPIO_Init();//步进电机初始化
DS1302_DateRead(&SysDate);//读取时间
delay_ms(100);
while(DHT11_Init()==1)
{
LCD_Write_String(0,0," DHT11 Init! ");
}
LCD_Write_String(0,0," ");
LCD_Write_String(0,0,"W: . kg T: C");//第一行显示的内容
LCD_Write_String(0,1," : : H: %");//第二行显示的内容
while(1)
{
if (setn==0 && chakan==0)
{
DS1302_DateRead(&SysDate);//读取时间
Display_Time();//显示时间
//称重,得到重量值weight,单位为g
get_weight();
//显示重量值
Display_Weight();
DHT11_Read_Data(&temperature,&humidity);//读取温湿度
LCD_Write_Char(13,0,temperature/10+0x30);
LCD_Write_Char(14,0,temperature%10+0x30);
LCD_Write_Char(13,1,humidity/10+0x30);
LCD_Write_Char(14,1,humidity%10+0x30);
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;//开启
}
if(openFlag == 1 && shoudong_guan==0)//喂食时间到,自动打开电机
{
if(weight < food_weight && flag1==0)
{
count_ss++;
if(count_ss <= 100)MotorCW();//正转一段时间
else {MotorStop();count_ss = 100;}//停止一段时间
}
else
{
if(flag1 == 0)
{
flag1 = 1;
}
}
}
}
keyscan();//按键扫描
}
}
七、单片机实物资料
