功能介绍:
0.本系统采用STM32F103ZET6作为单片机
1.四个功能按键可设置投喂实物和水等时间和投喂等级,等级越高表示投喂实物越多
2.时钟芯片采用DS1302芯片
3.到达投喂时间蜂鸣器会响起,直到投喂结束
4.采用ESP8266 WiFi模块可与手机进行数据通信

原理图:

PCB:

主程序:

#define __MIAN_C
#include "main.h"// 局部变量,用于保存转换计算后的电压值
CreatByte Flag;
enum _MODE_DF_ dispMode;char dis[16];
u8 volatile setIndex = 0;
u8 volatile feedTime[2] = {18, 0}; //投喂时间18:00
u16 volatile totalFeedTime[3] = {0, 0}; //总投喂时间
u8 volatile feedLevel = 1; //投喂量等级
u16 volatile amountOfFeed = 0; //总投喂量
u16 volatile feedDelay = 0; //喂食延迟
char command = NULL;int main(void)
{// 使用HSI,SYSCLK = 4M * RCC_PLLMul_x, x:[2,3,...16],最高是64MHHSI_SetSysClock(RCC_PLLMul_2); //使用内部8MHz晶振,并设置PLL输出为8MHz// 端口初始化GENERAL_TIM_Init();GPIO_Config();DS1302_Init();USART_Config();DelayMs(1000);printf("AT+CIPMUX=1\r\n"); //打开多连接DelayMs(1000);printf("AT+CIPSERVER=1,8080\r\n"); //建立服务 端口号为8080DelayMs(1000);Key_GPIO_Config();DelayMs(200);LCD_GPIO_Init();LCD_Init();LCD_Clear();DelayMs(200);while (1){if (refreshFlag == 1){refreshFlag = 0;if (dispMode == NORMAL){DispNormal();}if (timeBufDec[4] == feedTime[0] && timeBufDec[5] == feedTime[1] && timeBufDec[6] == 0) //到达喂食时间{feedDelay = feedLevel * 5; //feedLevel * 1s * 5}if (feedDelay > 0) //启动喂食{feedDelay--;amountOfFeed = amountOfFeed + 5; //喂食总量加5gtotalFeedTime[2]++; //秒钟加if (totalFeedTime[2] == 60){totalFeedTime[2] = 0;totalFeedTime[1]++;if (totalFeedTime[1] == 60){totalFeedTime[1] = 0;totalFeedTime[0]++;}}RELAY_FOOD_ON;RELAY_WATER_ON;BUZZER_ON;}else{RELAY_FOOD_OFF;RELAY_WATER_OFF;BUZZER_OFF;}}KeyProcess();}
}void DispNormal(void)
{DS1302_ReadTime();sprintf(dis, "%02d/%02d/%02d", (int)timeBufDec[1], (int)timeBufDec[2], (int)timeBufDec[3]);// sprintf(dis, "%02d/%02d/%02d", timeBufDec[1], timeBufDec[2], timeBufDec[3]);LCD_DispStr(0, 0, dis);switch (timeBufDec[7]){case 0: LCD_DispStr(10, 0, " Sun."); break;case 1: LCD_DispStr(10, 0, " Sun."); break;case 2: LCD_DispStr(10, 0, " Mon."); break;case 3: LCD_DispStr(10, 0, " Tue."); break;case 4: LCD_DispStr(10, 0, " Wed."); break;case 5: LCD_DispStr(10, 0, "Thur."); break;case 6: LCD_DispStr(10, 0, " Fri."); break;case 7: LCD_DispStr(10, 0, " Sat."); break;default: break;}sprintf(dis, "%02d:%02d Feed:%02d:%02d", (int)timeBufDec[4], (int)timeBufDec[5], (int)feedTime[0], (unsigned int)feedTime[1]);// sprintf(dis, "%02d:%02d Feed:%02d:%02d",timeBufDec[4], timeBufDec[5], feedTime[0], feedTime[1]);LCD_DispStr(0, 1, dis);
}void DispSetRealTime(u8 setIndex)
{sprintf(dis, "%02d/%02d/%02d", (unsigned int)timeBufDec[1], (unsigned int)timeBufDec[2], (unsigned int)timeBufDec[3]);LCD_DispStr(0, 0, dis);switch (timeBufDec[7]){case 0: LCD_DispStr(10, 0, " Sun."); break;case 1: LCD_DispStr(10, 0, " Sun."); break;case 2: LCD_DispStr(10, 0, " Mon."); break;case 3: LCD_DispStr(10, 0, " Tue."); break;case 4: LCD_DispStr(10, 0, " Wed."); break;case 5: LCD_DispStr(10, 0, "Thur."); break;case 6: LCD_DispStr(10, 0, " Fri."); break;case 7: LCD_DispStr(10, 0, " Sat."); break;default: break;}sprintf(dis, "    %02d:%02d:%02d    ", (unsigned int)timeBufDec[4], (unsigned int)timeBufDec[5], (unsigned int)timeBufDec[6]);LCD_DispStr(0, 1, dis);switch (setIndex){case 1: LCD_SetCursor(1, 0, 1); break;case 2: LCD_SetCursor(4, 0, 1); break;case 3: LCD_SetCursor(7, 0, 1); break;case 4: LCD_SetCursor(14, 0, 1); break;case 5: LCD_SetCursor(5, 1, 1); break;case 6: LCD_SetCursor(8, 1, 1); break;case 7: LCD_SetCursor(11, 1, 1); break;default:break;}
}void DispSetFeed(u8 setIndex)
{sprintf(dis, "FeedTime: %02d:%02d ", (unsigned int)feedTime[0], (unsigned int)feedTime[1]);LCD_DispStr(0, 0, dis);sprintf(dis, "FeedLevel: %2d   ", (unsigned int)feedLevel);LCD_DispStr(0, 1, dis);switch (setIndex){case 1: LCD_SetCursor(11, 0, 1); break;case 2: LCD_SetCursor(14, 0, 1); break;case 3: LCD_SetCursor(12, 1, 1); break;default:break;}
}void DispSetTotalFeed(u8 setIndex)
{sprintf(dis, "Total:  %02d:%02d:%02d", (unsigned int)totalFeedTime[0], (unsigned int)totalFeedTime[1], (unsigned int)totalFeedTime[2]);LCD_DispStr(0, 0, dis);sprintf(dis, "TotalFeed: %4dg", (unsigned int)amountOfFeed);LCD_DispStr(0, 1, dis);switch (setIndex){case 1: LCD_SetCursor(15, 0, 1); break;case 2: LCD_SetCursor(14, 1, 1); break;default: break;}
}/*********************************************END OF FILE**********************/

实物演示视频:
https://www.bilibili.com/video/BV1234y177hy/

基于STM32的定时定量智能宠物投食器原理图PCB相关推荐

  1. 基于STM32单片机的跑步机心率检测proteus仿真原理图PCB

    功能: 0.本系统采用STM32F103RCT6作为单片机 1.系统采用LCD1602液晶实时显示转速 心率以及跑步时间等情况 2.系统设计有三个功能按键可以控制电机的启停以及复位跑步时间 3.心率检 ...

  2. 基于51单片机手势控制智能台灯(程序+原理图+PCB)

    功能介绍: 1.采用手势传感器PAJ7620U2来检测当前的手势动作: 2.可以通过手势动作来控制灯的开关: 3.可以通过手势动作来控制LED灯的亮度: 4.LCD1602显示亮度等级: 5.可以通过 ...

  3. STM32单片机紫外线强度检测仪器蜂鸣器报警(程序+原理图+PCB)

    本设计: 基于STM32单片机紫外线强度检测仪器蜂鸣器报警(程序+原理图+PCB) 原理图:Altium Designer 程序编译器:keil 5 编程语言:C语言 编号C0023 完整下载链接: ...

  4. 最简单DIY基于STM32单片机的WIFI智能小车设计方案

    STM32库函数开发系列文章目录 第一篇:STM32F103ZET6单片机双串口互发程序设计与实现 第二篇:最简单DIY基于STM32单片机的蓝牙智能小车设计方案 第三篇:最简单DIY基于STM32F ...

  5. 最简单DIY基于STM32单片机的蓝牙智能小车设计方案

    STM32库函数开发系列文章目录 第一篇:STM32F103ZET6单片机双串口互发程序设计与实现 第二篇:最简单DIY基于STM32单片机的蓝牙智能小车设计方案 文章目录 STM32库函数开发系列文 ...

  6. 基于STM32的指纹识别智能锁设计

    本设计是基于stm32的指纹识别智能锁设计,主要实现以下功能: 1,OLED显示输入锁的状态,解锁状态,开锁成功,开锁失败,确定,清除 2,通过矩阵键盘输入开门密码.修改密码.确认密码等操作: 3,可 ...

  7. (毕业设计资料)基于STM32的物联网WiFi智能家居控制系统

    092[电路方案]基于STM32的物联网WiFi智能家居控制系统 功能: 1.可以检测环境中温湿度,气压,一氧化碳,空气质量,烟雾浓度和光照强度. 2.将测量的值显示在屏幕上,数据上报机智云平台可以通 ...

  8. 基于STM32的语言控制智能家居系统

    承接单片机定做 文章目录 前言 一.设计目标及内容: 二.框架思路 三.实现 喜欢请点赞哦! 前言 基于STM32的语言控制智能家居系统,主控使用STM32F103(正点原子战舰板子) 一.设计目标及 ...

  9. 基于STM32F103C8T6的充电桩计费系统(程序+原理图+PCB+论文)

    本设计: 基于STM32F103C8T6的充电桩计费系统(程序+原理图+PCB+论文) 原理图:Altium Designer 程序编译器:keil 5 编程语言:C语言 编号C0019 下载链接 [ ...

最新文章

  1. leetcode--无重复字符的最长子串--python
  2. vue 时间安排表
  3. Java并发工具类(闭锁CountDownLatch)
  4. grunt前端构建工具使用教程
  5. 将 vCenter Server vSphere 软件从 VMware vSphere 6.5 升级到 6.7
  6. 垃圾收集器分类与GC性能指标
  7. 致敬学习者丨黑马2020年度TOP榜视频教程,一键领!
  8. SPSS篇—卡方检验
  9. 不同安卓模拟器连接appium的端口
  10. python制作万年历
  11. 借助 PrivateLink 与 EMQX Cloud 建立安全可靠的连接
  12. kali Linux 常用软件
  13. 2022年重新启航规划
  14. 跨域 万金油解决方法 非原理向
  15. 【SVM】支持向量机数学公式
  16. android 性格测试 csdn,华为加密状态码查询脚本
  17. 触觉智能分享-SSD20X Ubuntu 20.04 文件系统的移植
  18. gold matlab 编解码_JPEG编码解码(Matlab)
  19. 安卓设置EditText回车不换行
  20. 优美抒情钢琴曲《kiss the rain》

热门文章

  1. 远程连接IBM MQ报错AMQ4036解决方法
  2. 专业人脸识别研究计算机的配置,联想电脑win10系统人脸识别登录的设置方法
  3. centos7手工配置ip地址
  4. python自定义类求解一元二次方程_Python实现求解一元二次方程的方法示例
  5. [附源码]Python计算机毕业设计Django贷款申请审核管理系统论文
  6. python换行符是什么?
  7. 最新jfrog artifactory搭建Android本地仓库教程
  8. Kettle构建Hadoop ETL实践(八-1):维度表技术
  9. oracle数据库数据字典应用
  10. shapelet论文相关