当前位置: 首页 > news >正文

毕设 stm32智能鱼缸监控投喂系统(源码+硬件+论文)

文章目录

  • 0 前言
  • 1 主要功能
  • 2 硬件设计(原理图)
  • 3 核心软件设计
  • 4 实现效果
  • 5 最后

0 前言

🔥
这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩毕业设计 stm32智能鱼缸监控投喂系统(源码+硬件+论文)

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:4分

🧿项目分享:见文末!

实物演示效果

毕业设计 stm32智能鱼缸监控投喂系统 - 单片机 嵌入式 物联网

1 主要功能

题设计的目的为实现鱼缸换水、投食、远程监控,实时数据显示、远程操控的一体化和智能化。该设计具有科研和实用两重价值。

  • 1 自动加水,当水位过低时自动启动水泵,向鱼缸内自动加水

  • 2 自动放水,当水位过低时启动放水阀(用继电器模拟),当水位达到标准时停止防水

  • 3 换水启动,当监测到水质过于浑浊,自动开始防水,并触发自动加水逻辑

  • 4 自动投食,每日固定时间投食(用继电器模拟)

  • 5 状态显示,传感器数据实时显示于OLED屏上

  • 6 远程交互,传感器数据通过wifi模块远程上传到上位机客户端上

  • 7 远程控制,上位机可通过wifi模块,向单片机发送远程指令,控制其换水,投食

2 硬件设计(原理图)

3 核心软件设计

对于本次智能鱼缸的系统设计,如果需要实现其理想的功能,需要对温度采集模块、OLED显示模块、继电器控制模块、按键控制模块、WIFI模块等进行模块化编程,最后通过主程序的系统结合,实现智能鱼缸的主要功能需求。其主程序控制流程如下图

上位机部加粗样式分设计

上位机界面通过Python程序语言进行开发,通过无线传输数据的方式即可实现无线监控。当用户输入正确的IP地址以及指定端口登录后,后台系统开始运行。

应用界面设计主要由Python应用程序完成,以连接STM32和ESP8266模块,使用适合的GUI框架,例如Tkinter,PyQt等。再设计主窗口的大小、标题、背景颜色等基本属性,并使用Tkinter提供的组件,诸如Frame、Label、Entry、Button等组件来构建界面,同时为相应的组件设置属性。在这个应用程序中,Label组件可以用于添加提示语句,Entry组件可以接受用户输入的串口号、波特率等参数,Button组件在设计时应该能够实现连接和断开操作等。

在代码中,需要使用pySerial模块实现串口通信,来连接STM32和ESP8266模块。首先,需要导入pySerial模块,并通过串口的设定创建Serial对象,设置好相关参数,然后使用open()方法打开串口。构建和设置基本属性,通过pySerial模块实现串口通信的过程,连接STM32和ESP8266模块,并保证良好的用户交互和异常处理机制。连接通讯流程图如图

篇幅有限,不过多复述详细设计细节,详细的设计分享在论文中。。。

关键代码

#include"stm32.h"uchar PageNum=0;//0显示温湿度 1显示温度和报警数值2显示湿度和报警数值floatTemp_Data=0;uchar AlarmTemp[]={32,20};//高低温度unsignedcharFeedTime[3]={0};//喂食时间unsignedcharO2Time[3]={0};//充氧气时间unsignedcharLoopTime[3]={0};//水循环时间sbit RELAY1=P2^2;//加水继电器sbit RELAY2=P2^1;//加热继电器sbit RELAY3=P2^0;//放水继电器sbit ENA=P3^2;sbit ENB=P3^3;voidTimerInit(void);voidGetTemp(void);voidPageInit(void);voidPageDisplay(void);voidDataLoad(void);//数据加载voidTempInit(void);//voidHeatControl(void);//加热自动控制voidTimer1_Init(void);//50毫秒@11.0592MHzvoidIncO2Control(void);voidFeedControl(void);voidLoopControl(void);unsignedcharFeedSecond=0;unsignedcharO2Second=0;unsignedintLoopSecond=0;unsignedcharCountTime[3]={0};//水循环时间计时voidmain(void){Delay_1ms(100);LCD_Init();TimerInit();PageInit();DataLoad();TempInit();Timer1_Init();while(1){GetTemp();DS1302_Read();FeedControl();HeatControl();IncO2Control();PageDisplay();LoopControl();Delay_1ms(50);}}voidTimer0_Serve(void)interrupt1{TH0=(65535-20000)/256;//20MS定时TL0=(65535-20000)%256;LCD_Refresh();//LCD刷新KEY_Scan();}voidTimer1_Serve(void)interrupt3//50ms定时{staticunsignedcharT50MS=0;TL1=0x00;//设置定时初值TH1=0x4C;//设置定时初值T50MS++;if(T50MS>=20){T50MS=0;CountTime[2]++;if(CountTime[2]>=60){CountTime[2]=0;CountTime[1]++;if(CountTime[1]>=60){CountTime[1]=0;CountTime[0]++;if(CountTime[0]>23)CountTime[0]=0;}}if(FeedSecond>0)FeedSecond--;if(O2Second>0)O2Second--;if(LoopSecond>0){LoopSecond--;}}}voidHeatControl(void)//加热控制{/*------------------低于下限开始加热---------------------*/if(Temp_Data<AlarmTemp[1]){RELAY1=0;}/*------------------高于上限停止加热---------------------*/if(Temp_Data>AlarmTemp[0]){RELAY1=1;}}voidTimerInit(void){TMOD&=0xF0;TMOD|=0X01;//T1工作在定时模式, T0 工作在8位自动重载计数TL0=(65535-20000)%256;//T0工作在定时模式 50ms定时TH0=(65535-20000)/256;ET0=1;TR0=1;EA=1;}voidPageDisplay(void){/*---------------------------------------------------------*/if(KeyVal=='E'){KeyVal=0;PageNum++;if(PageNum>4){PageNum=0;}PageInit();}/*-------------------------------------------------------*/switch(PageNum){/*-------------------------------------------------------*/case0://显示和设置实时时间{LCD_DisplayDate(0,Date);LCD_DisplayTime(16,Time);if(KeyVal=='S'){KeyVal=0;SetRTC();}}break;/*-------------------------------------------------------*/case1://显示实时温度和上下限值{TempDisplay(5,Temp_Data);DisplayU8(18,AlarmTemp[0]);//DisplayU8(26,AlarmTemp[1]);//if(KeyVal=='S'){KeyVal=0;SetTempHigLow(AlarmTemp);WrToROM(AlarmTemp,5,2);//温度存储地址0}}break;/*-------------------------------------------------------*/case2:{LCD_DisplayTime(16,FeedTime);if(KeyVal=='S'){KeyVal=0;SetClockTime(FeedTime);WrToROM(FeedTime,20,3);}}break;/*-------------------------------------------------------*/case3:{LCD_DisplayTime(16,O2Time);if(KeyVal=='S'){KeyVal=0;SetClockTime(O2Time);WrToROM(O2Time,25,3);}}break;/*-------------------------------------------------------*/case4:{LCD_DisplayTime(16,LoopTime);if(KeyVal=='S'){KeyVal=0;SetClockTime(LoopTime);WrToROM(LoopTime,30,3);}}break;default:{PageNum=0;PageInit();}break;}/*-------------------------------------------------------*/}voidIncO2Control(void){if(1==CompareClock(O2Time,Time)){O2Second=60;}if(O2Second>0)RELAY2=0;elseRELAY2=1;}voidFeedControl(void){if(1==CompareClock(FeedTime,Time)){FeedSecond=10;}if(FeedSecond>0){ENA=0;ENB=1;}else{ENA=1;ENB=1;}}voidLoopControl(void){if(1==CompareClock(LoopTime,CountTime)){CountTime[0]=CountTime[1]=CountTime[2]=0;LoopSecond=60;}if(LoopSecond>0){RELAY3=0;}else{RELAY3=1;}}

4 实现效果

下位机

上位机实现效果

实物演示效果

毕业设计 stm32智能鱼缸监控投喂系统 - 单片机 嵌入式 物联网

5 最后

包含内容


配套详细设计论文

🧿项目分享:见文末!

http://www.cnnetsun.cn/news/103388.html

相关文章:

  • EmotiVoice能否用于外语学习跟读训练?发音准确性评估
  • 从零开始的编程冒险:游戏化学习如何让你爱上写代码
  • NocoDB云原生部署实战:构建企业级低代码数据平台
  • drawio-libs:重新定义专业图表绘制的智能图标生态
  • Vue-CodeMirror6 完整配置与最佳实践指南
  • 基于Springboot3+Vue3微信小程序校园学生兼职系统(包部署+代码指导+万字论文)
  • 终极双语翻译插件完整指南:轻松实现跨语言无障碍阅读
  • 手机端AIDE安卓2进制计算器软件代码
  • NetBox拓扑视图插件终极指南:3分钟实现网络架构可视化
  • RustDesk隐私模式:企业级远程协助的安全革命
  • 如何快速实现Ubuntu全自动部署:终极无人值守安装指南
  • AI绘画控制技术深度解析:ControlNet如何实现精准构图控制
  • 网易云音乐脚本:3大隐藏功能解锁你的音乐自由
  • IDM激活脚本技术深度解析:兼容性重构与性能优化完整指南
  • Minecraft Bedrock启动器技术实现与优化指南
  • MegSpot开源项目完整教程:从入门到精通
  • XposedRimetHelper位置服务功能深度解析:提升钉钉使用体验
  • 深度解锁Windows隐藏功能:ViVeTool GUI使用全攻略
  • 如何快速配置Jellyfin Bangumi插件:新手3分钟上手教程
  • KOReader终极完整指南:免费打造专业级电子书阅读体验
  • VMD-Python分子可视化工具深度解析与实战指南
  • 零基础掌握X-AnyLabeling:GeCO模型目标计数实战全解析
  • Windows界面美化终极指南:DWMBlurGlass实现透明效果全解析
  • 掌握Tianshou:PyTorch强化学习框架从入门到实战
  • 百度网盘秒传链接高效使用指南:从零基础到精通
  • QQ截图独立版:解锁Windows屏幕捕捉新体验的完整手册
  • Emby界面美化完全手册:3种方法打造专属影音中心
  • EmotiVoice语音能量调节功能改善发音力度
  • uvm32一款极简、无依赖的虚拟机沙盒,支持动态加载APP,仅需3KB Flash/1KB RAM
  • Blender版本管理革命:智能化工具如何重塑3D创作工作流