首页 分享 基于STM32的定时定量智能宠物投食器原理图PCB

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

来源:萌宠菠菠乐园 时间:2024-10-16 04:14

功能介绍:
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],最高是64MH HSI_SetSysClock(RCC_PLLMul_2); //使用内部8MHz晶振,并设置PLL输出为8MHz // 端口初始化 GENERAL_TIM_Init(); GPIO_Config(); DS1302_Init(); USART_Config(); DelayMs(1000);printf("AT+CIPMUX=1rn"); //打开多连接DelayMs(1000);printf("AT+CIPSERVER=1,8080rn"); //建立服务 端口号为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; //喂食总量加5g totalFeedTime[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**********************/

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179

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

相关知识

基于STM32的智能宠物看护喂养系统(程序源码+原理图+PCB+Boom表+实物操作说明)
STM32宠物智能项圈(原理图+PCB+源程序+视频演示+bom表)
基于单片机智能无线蓝牙定时器宠物喂食器、药盒系统设计
基于STM32的宠物远程投喂和监测系统设计
基于STM32的宠物远程投喂和监测系统设计 Design of Embedded Pet Remote Feeding and Monitoringsystem Based on STM32
小米小顽智能宠物定时定量喂食器自动投食器(新品发售) 399元
智能猫咪 多尼斯宠物 粮盆mini投食机 用品定时定量猫 自动喂食器 狗狗
基于STM32设计的宠物投喂器
【stm32项目】基于stm32智能宠物喂养(完整工程资料源码)
智能喂食器的研究背景及意义

网址: 基于STM32的定时定量智能宠物投食器原理图PCB https://www.mcbbbk.com/newsview390288.html

所属分类:萌宠日常
上一篇: 卷毛蜜波利金丝熊活多久
下一篇: 全谱系战魔 昆特小动物简单打法【

推荐分享