【单片机毕业设计】【mcuclub

您所在的位置:网站首页 宠物自动喂食器设置 【单片机毕业设计】【mcuclub

【单片机毕业设计】【mcuclub

2024-07-10 15:39| 来源: 网络整理| 查看: 265

  最近设计了一个项目基于单片机的智能化的家养宠物喂食器设计,与大家分享一下: 一、基本介绍

项目名:宠物喂食器(实物+仿真)(mcuclub-jj-053) 项目编号:mcuclub-dz-348 单片机类型:STC89C52 具体功能: 1、通过DS1302获取时间 2、通过AT24C02存储设定的投喂时间 3、通过按键可修正实时时间、添加或删除投喂时间、查看投喂时间、手动开启关闭喂食,手动开启关闭喂水 4、当投喂时间到达时,蜂鸣器报警提醒(2s),并开启步进电机投喂,开启10s后,自动关闭 5、通过超声波测量水位,通过按键设置一个容器高度,测量容器顶端到水平面的高度,从而获取容器内的水位剩余量,当水位剩余量小于设置最小值,自动加水,直到大于设置最大值 6、通过LCD1602显示屏显示数据 7、仿真中使用串口模拟4G模块通信,发送水位值,投喂提醒

二、51实物图

单片机型号:STC89C52

板子为绿色PCB板,两层板,厚度1.2,上下覆铜接地。元器件基本上为插针式,个别降压芯片会使用贴片式。

供电接口:TYPE-C

三、仿真图

 四、原理图

软件版本:AD2013

电路连线方式:网络标号连线方式

注意:原理图只是画出了模块的引脚图,而并不是模块的内部结构原理图

 五、PCB图

由原理图导出,封装很大一部分都是作者自己绘制,不提供封装库,只提供连接好的源文件。中间有一个项目编号,隐藏在单片机底座下,插入单片机后不会看到。

两层板,上下覆铜接地。

六、系统框图

本设计以单片机为核心控制器,加上其他模块一起组成此次设计的整个系统,其中包括中控部分、输入部分和输出部分。中控部分采用了单片机控制器,其主要作用是获取输入部分的数据,经过内部处理,逻辑判断,最终控制输出部分。输入由四部分组成,第一部分是时钟检测模块,通过该模块检测当前时间;第二部分是超声波监测模块,通过该模块获取当前获取当前的水位;第三部分是按键模块,通过该模块可修正实时时间、添加或删除投喂时间、查看投喂时间、手动开启关闭喂食,手动开启关闭喂水;第四部分是供电模块,通过该模块可给整个系统进行供电。输出由四部分组成,第一部分是显示模块,通过该模块可以显示监测的数据;第二部分是步进电机模块,通过步进电机控制投喂;第三部分是继电器模块,通过两个继电器控制加水;第四部分是声光报警模块,投喂时间到达时,蜂鸣器报警提醒(2s)。除此之外,存储模块即作为输入也作为输出,将定时的时间等信息存储到存储模块中,当需要使用的时候,从存储模块中提取出来。具体系统框图如图3.1所示。

 七、软件设计流程

八、部分程序展示

软件版本:keil5

逻辑程序和驱动程序分开,分布于main.c和其他.c文件

*******处理函数 *****/ void Manage_function(void) {   uchar i = 0;     if(flag_display == 0)                  //测量界面     {         if(flag_manu == 0)         {             if(flag_time_feed == 0)             {                 for(i = 0; i < set_feed_count; i++)    //判断当前时间是否是投喂时间,如果是,开始投喂5S,且开启两秒蜂鸣器                 {                     if(p_feeddata[i].time_shi == ds1302_buf[4] && p_feeddata[i].time_fen == ds1302_buf[5] && ds1302_buf[6] == 0)                     {                         BEEP = 0;                         flag_bujin_foreward = 1;                         flag_timer_begin = 1;                         flag_time_feed = 1;                         break;                     }                 }             }             else             {                 if(flag_1s < 2)                 {                     if(time_num % 20 == 0)                         BEEP = ~BEEP;                 }                 else                 {                     BEEP = 1;                     if(flag_1s >= 10)                     {                         flag_timer_begin = 0;                         flag_time_feed = 0;                         flag_1s = 0;                         flag_bujin_reversal = 1;                     }                 }             }                          if(distance < water_min)          //自动控制加水                 RELAY_WS = 0;             else if(distance > water_max)                 RELAY_WS = 1;         }     }     else                                                             //设置界面     {         BEEP = 1;         flag_bujin_foreward = 0;         flag_bujin_reversal = 0;     } }



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3