【毕业设计】基于单片机的智能鱼缸系统设计与实现 - 嵌入式 物联网 stm32 c51

201 篇文章 119 订阅
187 篇文章 117 订阅


1 简介

Hi,大家好,这里是丹成学长,今天向大家介绍一个 单片机项目, 大家可用于 课程设计 或 毕业设计

基于单片机的智能鱼缸系统设计与实现


单片机-嵌入式毕设选题大全及项目分享:

https://blog.csdn.net/m0_71572576/article/details/125409052


1 课题背景意义

近年以来,随着我国综合实力飞速飙升,人们对物质和精神生活质量的要求也不断提升,各式各样的智能家居不断问世并得到消费者的喜爱。因而各样的智能鱼缸作为装饰品和智能家居的合体应景入驻家庭、办公室、商场等场所。它不仅可以作为装饰品给我们带来视觉享受,缓解精神疲劳,而且将中国传统水文化引入日常生活,极大的丰富了人们的生活。但目前市面上各式鱼缸鱼龙混杂,格式各异,大多为非智能,需要手动操作实现温控,换水,充氧,投食等。这将造成诸多不便,浪费使用者的大量时间精力,且影响鱼缸的美观性。但现代社会生活节奏较快,人们没有足够的时间动手照顾鱼缸,导致鱼缸生物成活率低。因而,现阶段智能鱼缸具有一定的市场需求。

本课题设计的目的为实现鱼缸温控、换水、充氧、投食的一体化和智能化。 该设计具有科研和实用两重价值。

2 课题研究方法

本课题设计主要是利用单片机为主控芯片,结合嵌入式技术、传感器技术、C语言编程等技术设计出满足功能的智能鱼缸系统。总体上,我们首先要根据智能鱼缸的使用场合和工作环境明确我们所设计系统所需的总体功能。其次,我们构思出系统的总体框架,绘出硬件和软件流程框图,然后根据流程图着手设计。硬件方面考虑到市场现有的芯片、元器件种类繁多,我们需要斟酌选用满足系统功能且稳定实惠的元器件。系统软件编程我们采用模块化程序设计,先根据系统功能要求构思出出程序框图,再利用C语言对各个模块进行编程设计。最后利用KeiluVision5对源程序进行调试、查错和修改,最后导入硬件设备,总体运行系统,确保系统满足功能要求且能稳定的运行。

3 智能鱼缸系统功能要求

该智能鱼缸系统的设计是以日常生活中鱼缸的养护为背景, 根据当前市场上的需求, 智能鱼缸系统需要自动实现自动温控、 换水、 充氧、 投食等功能。

系统需要稳定运行尽可能避免发生故障, 且需要尽可能的降低成本, 具有实用价值。系统需要对鱼缸内部环境进行检测, 并保持环境参数保持在适宜鱼类生存的范围内。 首先是温度, 根据了解, 鱼类的适宜的生存环境一般都在 22~28℃, 当温度传感器检测到水温低于 22℃时, 系统启动加热器加热, 当温度达到 28℃时系统停止加热, 使温度在适宜鱼类生存的范围内波动。

其次是充氧, 目前生活中人们无法对充氧做到很好的把控, 长时间不充氧容易导致鱼类缺氧死亡, 而一直开启氧泵无疑是对资源的浪费, 因而, 利用定时控制氧泵开关,保证水中的一定的溶氧量将一定程度上解决上述问题。

鱼类的投食频率一般是 12 小时或者 24 小时, 最佳时间一般在中午这个时间段, 因而可以利用系统的时钟模块定时控制投食器。

水循环主要是为了除去水中的杂质, 改良水质, 可以利用利用系统定时模块定时开关水泵, 将水通过活性炭海绵等过滤完成净化, 为鱼类提供适宜生存的环境。

4 系统结构

鱼类生存的环境要素包含很多, 如光照、 水的温度、 营养物、杂质含量、 溶氧量、 PH 等等。 在此设计中, 我们主要考虑到鱼类生存的四大环境要素:水温、 水溶氧量、 水杂质含量、 营养物。 而各个要素对应的系统处理功能如下表所示

在这里插入图片描述

学长设计的智能鱼缸控制系统主要实现自动加热、 自动水循环、 自动充氧、 自动投食四个功能, 选用 STC89C52 单片机作为系统核心芯片, 控制温控模块、 时钟模块和其他一些模块。 温度控制模块中 DS18B20 温度传感器负责采集温度参数传送至主控芯片,利用继电器控制加热器以实现恒温。 时钟模块通过继电器控制氧泵、 水泵的开关, 实现定时充氧、 定时水循环。 而自动投食功能利用时钟模块控制步进电机来模拟。 系统结构框图如下图所示。

在这里插入图片描述

5 硬件模块

5.1 单片机最小系统

本设计采用的是STC89C52单片机芯片,…单片机最小系统电路如图所示。

在这里插入图片描述

(1)复位电路:复位电路的作用就是在程…。

(2)晶振电路:晶振电路为单片…

5.2 温度检测模块

此温度模块为DS18B20,主要组成部分由一个…。

该芯片通过引脚2同单片机P1.7口进行对接。…温度检测模块如图3-3所示。

在这里插入图片描述

5.3 继电器模块

在排水或者进行投食时均要启用电机装置,…继电器模块如图

在这里插入图片描述
继电器一共有6个引脚,…引脚功能如下

在这里插入图片描述

5.4 显示模块

电路中采用了LCD1602显示器。…LCD1602显示器如图所示。

在这里插入图片描述

6 实现效果

将各个硬件部分组装后得到最终实物图

在这里插入图片描述

其中, 1 是 USB 电源接口, 为系统提供 5V 的电源。 2 是按钮控制开关, 是系统的主开关。 3 是 LCD1602 显示器, 用于显示相关数据。 4 是 DS1302 时钟芯片。 5 是 24C02存储芯片。 6 是四个控制按键, 用于设置系统参数。 7 是 DS18B20 温度传感器, 与用于采集实时温度值。 8、 9、 10 依次是控制加热、 充氧、 水循环的三个继电器。 11 为用于模拟投食的步进电机。 12 为步进电机电源输入接口。

自动温控
在这里插入图片描述

学长在演示中用手握住温度传感器来模拟加热器工作水温上升, 温度上升超过上限值 31℃时, 继电器 1 灯灭, 表示模拟加热器断电, 加热结束, 如图所示。 加热结束后温度逐渐降低, 直至温度再次低于下限温度值时, 继电器再次通电, 启动加热, 以维持鱼缸温度在一定范围内波动。

在这里插入图片描述

自动投食

根据系统的需求, 投食频率大致为 24 小时一次, 通过定时开启投食器来实现。 但为了方便演示, 我们通过按键将 Feed Time 设置为系统时间的下一分钟, 当系统时间达到设定时间, 步进电机转动, 用于模拟投食。

在这里插入图片描述

自动充氧

自动充氧与投食相似, 我们可以设置固定的时间, 为了演示方便, 我们也可以设置在系统时间的下一分钟, 当系统时间达到设定时间后, 继电器 2 亮灯开启, 进行模拟充氧。

在这里插入图片描述

7 关键代码

#include"reg52.h"
#include "delay.h"
#include "typedef.h"
#include "1602.h"
#include "key.h"
#include "set.h"
#include "18b20.h"
#include "24c02.h"
#include "ds1302.h"
uchar PageNum=0; //0显示温湿度 1显示温度和报警数值2显示湿度和报警数值
float Temp_Data=0;
uchar AlarmTemp[]={32,20}; //高低温度
unsigned char FeedTime[3]={0}; //喂食时间
unsigned char O2Time[3]={0};  //充氧气时间
unsigned char LoopTime[3]={0}; //水循环时间
sbit RELAY1 = P2^2; //加水继电器
sbit RELAY2 = P2^1; //加热继电器
sbit RELAY3 = P2^0; //放水继电器
sbit ENA=P3^2;
sbit ENB=P3^3;
void TimerInit(void);
void GetTemp(void);
void PageInit(void);
void PageDisplay(void);
void DataLoad(void); //数据加载
void TempInit(void); //
void HeatControl(void); //加热自动控制
void Timer1_Init(void);  //50毫秒@11.0592MHz
void IncO2Control(void);
void FeedControl(void);
void LoopControl(void);
unsigned char FeedSecond=0;
unsigned char O2Second=0;
unsigned int LoopSecond=0;
unsigned char CountTime[3]={0}; //水循环时间计时
void main(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);
} 
}
void Timer0_Serve(void) interrupt 1
{ 
TH0 = (65535-20000)/256; //20MS定时
TL0 = (65535-20000)%256;
LCD_Refresh(); //LCD刷新
KEY_Scan();
}
void Timer1_Serve(void) interrupt 3 //50ms定时
{ 
 static unsigned char T50MS=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--;
 }
 }
}
void HeatControl(void) //加热控制
{
/*------------------低于下限开始加热---------------------*/
 if(Temp_Data<AlarmTemp[1])
 {
RELAY1=0;
 }
/*------------------高于上限停止加热---------------------*/
if(Temp_Data>AlarmTemp[0])
 {
 RELAY1=1;
 }
}
void TimerInit(void)
{
 TMOD &= 0xF0;
 TMOD |= 0X01; //T1工作在定时模式, T0 工作在8位自动重载计数
 TL0 = (65535-20000) % 256; //T0工作在定时模式 50ms定时
TH0 = (65535-20000)  / 256;
 ET0 = 1;
 TR0 = 1;
 EA = 1;
}
void PageDisplay(void)
{
/*---------------------------------------------------------*/
if(KeyVal=='E')
{
KeyVal=0;
 PageNum++;
 if(PageNum>4)
{
 PageNum=0;
 }
 PageInit();
}
/*-------------------------------------------------------*/
switch(PageNum)
{
/*-------------------------------------------------------*/
case 0: //显示和设置实时时间
{
  LCD_DisplayDate(0,Date);
  LCD_DisplayTime(16,Time);
  if(KeyVal=='S')
  {
  KeyVal = 0;
  SetRTC();
 }
}break;
/*-------------------------------------------------------*/
case 1: //显示实时温度和上下限值
 {
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;
/*-------------------------------------------------------*/
 case 2:
 {
 LCD_DisplayTime(16,FeedTime);
  if(KeyVal=='S')
  {
  KeyVal=0;
  SetClockTime(FeedTime);
 WrToROM(FeedTime,20,3);
  } 
 }break;
/*-------------------------------------------------------*/
case 3:
{
 LCD_DisplayTime(16,O2Time);
  if(KeyVal=='S')
  {
  KeyVal=0;
  SetClockTime(O2Time);
 WrToROM(O2Time,25,3);
  } 
}break;
/*-------------------------------------------------------*/
case 4:
{
 LCD_DisplayTime(16,LoopTime);
  if(KeyVal=='S')
{
  KeyVal=0;
  SetClockTime(LoopTime);
  WrToROM(LoopTime,30,3);
  }
}break;
default: { PageNum=0; PageInit(); }break;
}
/*-------------------------------------------------------*/
}
void IncO2Control(void)
{
 if(1==CompareClock(O2Time,Time))
 {
 O2Second=60;
 }
 if(O2Second>0)
 RELAY2=0;
 else
 RELAY2=1;
}
void FeedControl(void)
{
 if(1==CompareClock(FeedTime,Time))
 {
FeedSecond=10;
 }
 if(FeedSecond>0)
 {
 ENA=0;
 ENB=1;
 }
 else
 {
 ENA=1;
 ENB=1; 
 }
}
void LoopControl(void)
{
 if(1==CompareClock(LoopTime,CountTime))
 {
 CountTime[0]=CountTime[1]=CountTime[2]=0;
 LoopSecond=60;
 }
 if(LoopSecond>0)
 {
 RELAY3=0;
 }
 else
{
 RELAY3=1;
 }
}



单片机-嵌入式毕设选题大全及项目分享:

https://blog.csdn.net/m0_71572576/article/details/125409052


8 最后

  • 24
    点赞
  • 249
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
基于单片机智能鱼缸设计实现毕业设计 目 录 摘 要 I Abstract II 1 绪论 1 1.1课题背景 1 1.2国内外研究现状 1 1.3研究目的 2 2 开发技术与原理简介 4 2.1嵌入式技术 4 2.2传感器技术 4 2.3 Android技术 4 2.3.1 Android智能手机平台概述 4 2.3.2 Android手机平台的特点 5 2.3.3 Android系统软件架构 5 3 需求分析 6 3.1功能需求 6 3.1.1系统的特点及功能描述 6 3.1.2系统流程分析 6 3.2用例分析 7 3.3 开发工具 11 3.3.1 底层硬件电路开发工具 11 3.3.2底层系统开发工具 12 3.3.3 Android客户端开发工具 12 4 概要设计 13 4.1系统总体方案与功能 13 4.1.1系统功能组成 13 4.1.2系统控制参数 14 4.2系统的硬件结构 14 4.3系统的软件设计 15 5 详细设计 17 5.1单片机系统设计 17 5.1.1单片机选型 17 5.1.2单片机最小系统设计 18 5.1.3详细说明 21 5.2温度传感器模块设计 22 5.2.1温度传感器选型 22 5.2.2温度传感器电路设计 23 5.3蓝牙串口模块设计 23 5.3.1串口技术 23 5.3.2蓝牙串口电路设计 25 5.3.3系统通讯协议设计 25 5.3.4系统通讯详细说明 26 5.4时钟模块设计 27 5.4.1时钟芯片选型 27 5.4.2时钟模块电路设计 27 5.5 Android客户端设计 28 5.5.1 Android蓝牙通信设计 28 5.5.2 Android界面设计 29 6 系统实现 31 6.1 底层设备软件实现 31 6.1.1系统软件流程图 31 6.1.2底层系统算法设计 32 6.2手机端软件实现 35 6.2.1手机端软件流程图 35 6.2.2底手机端软件算法设计 36 6.3软硬件设备实物图 38 6.3.1硬件设备实物图 38 6.3.2手机端软件截图 40 7 系统测试 41 7.1LED灯光变换测试 41 7.2检测温度测试 42 7.3水循环控制系统测试 42 7.4充氧模块测试 43 结束语 44 致 谢 45 参 考 文 献 46 摘 要 近年来嵌入式发展迅速,智能家居也进入了人们的生活。智能鱼缸却没有快速发展。我 根据市场上相关设备现状的分析和研究,从系统集成角度进行设计和开发,提出了一套 多功能的智能观赏鱼缸控制系统设计方案。 该控制系统以STC12C5A60S2单片机为控制核心,结合传感器技术,集多种控制功能于一 体,包括检测温度、自动充氧、自动换水、灯光变换和自动喂食等,同时在系统设计 一个蓝牙通信模块,可实现鱼缸的远程控制和管理。整个系统分为两个部分:第一部 分是以STC12C5A60S2为核心的控制部分,实现对各种控制参数的设置、存储、和处理。 第二部分是手机安卓部分,通过手机端APP可以对鱼缸进行实时控制、参数设置等,实现 人机交互。两个部分之间采用蓝牙通讯技术,将数据信息在上位机与下位机之间交互传 输。 该系统根据当前市场上的需求进行设计和开发,形成了一套自动充氧、自动换水、灯光 变换和自动喂食等功能为一体的集成控制系统。同时该系统设计灵活、成本低廉,便于 量产,可广泛用于家庭和宾馆等安装观赏鱼缸的场所。 关键词:鱼缸,自动控制,单片机,蓝牙通讯,APP Abstract In recent years, with the development of embedded, intelligent household also entered people's lives. The intelligent aquarium is not development. I according to the current market analysis and research status quo of related equipment, system integration from the perspective of design and development, a set of multi-functional intelligent fish tank control system design. The control system STC12C5A60S2 microcontroller core. Combined with sensor technology. Set a variety of control functions. Including temperature detection, a

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值