【毕业设计】往届案例分享 智能鱼缸监测控制系统

系列文章目录



0 前言

🔥近几年随着人工智能等新技术的不断火热,带动了嵌入式等的传统行业的进一步发展。最近带过的几届同学反馈:以往的毕设题目缺乏创新性和亮点,不能满足学校的答辩要求。为了方便毕业生们顺利、省心、高效的通过毕设,这里分享一些优质的低投入高产出毕业设计。

今天给大家分享一个比较实用且有一定创新力的题目

🚩智能鱼缸监测控制系统

🥇首先对这道题目给出一个量化的评价(每项满分5⭐):

  • 难度:⭐⭐⭐
  • 工作量:⭐⭐⭐
  • 创新性:⭐⭐⭐

1 题目

在这里插入图片描述

2 方案设计

2.1 方案框图

分析题目功能点,结合开发经验,构思整体方案,形成整体方案框图

2.2 器件选型

主控:采用 STM32F103 系列嵌入式芯片,具体型号/规格暂定 STM32F103C8T6 最小系统板,系统主频 72 MHz;
水浑浊度传感器:检测水中的泥沙、有机物、微生物等悬浮物质造成的浑浊程度,模拟量输出,型号暂定 TS-300B;
人体红外热释电传感器:检测是否有人靠近水族缸,避免无人靠近时控制系统发出无意义、会干扰用户的提示,通过IO与主控连接,市面常见款,无特定型号;
语音播放模块:CN-TTS 中文串口语音合成模块,通过串口与主控通信;
时钟芯片:获取实时时间,与主控通过芯片自定义协议通信,型号 DS1302;
水位传感器:检测水族缸内的水位,模拟量输出,无特定型号;
水温度传感器:检测水的温度,通过单总线协议通信,型号 DS18B20;
液晶显示屏:显示控制系统的必要信息,通过I2C协议通信,型号 OLED 液晶屏;
系统采用5V供电。

2.3 小结-设计要点、难点解析

1、各类传感器的原理、使用方法与通信协议;
2、传感器数据的解析、去噪和拟合;
3、系统软件应具备高效的传感器数据采集顺序和逻辑,提升传感器响应速度;
4、语音合成模组的原理、使用方法和通信协议;
5、液晶显示屏的驱动原理、通信协议;
6、时钟芯片中的数据格式、读写原理和通信协议;
7、具备良好的人机工程学,能有效提示用户,又能避免对用户产生干扰;
8、系统软件总体流程设计,能够准确快速的响应用户操作;
9、系统需具备高鲁棒性,提升设备可靠性。

3 硬件设计——原理图及PCB

使用 Altium Designer 软件进行硬件原理图和PCB绘制

请添加图片描述
请添加图片描述

4 软件设计——软件模块划分及主程序源码

使用 Keil-MDK ARM建立工程

工程文件树
请添加图片描述

主程序部分源码展示:

/************************************************************
 * @file main.c
 * Description:	
 * $Revision: #1 $
 * $Date: 2021/1101 $
 * $Author:
 * $Change: $
 * $Warning: This file must save and open as encoding 'ANSI' or 'GBK' which is only support by TTS-module
 * 主控MCU STM32F103C8T6 外部晶振8MHz RCC函数设置主频72MHz
 *
 *
 ***********************************************************/




#include "sys.h"
#include <stdio.h>
#include "basic_type_redef.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "oled0561.h"
#include "digital_io_device.h"
#include "adc.h"
#include "ds1302.h"
#include "ds18b20.h"


#if 0
#define MSG_MSG(fmt, ...)   USART1_printf("[MSG] -I-:" fmt, ##__VA_ARGS__)
#define MSG_INF(fmt, ...)   USART1_printf("[MSG] -I-:" fmt, ##__VA_ARGS__)
#define MSG_DBG(fmt, ...)   USART1_printf("[MSG] -D-:" fmt, ##__VA_ARGS__)
#define MSG_WRN(fmt, ...)   USART1_printf("[MSG] -W-:" fmt, ##__VA_ARGS__)

#define UART_LOG(_level, _mod, _fmt, ...)  USART1_printf(_fmt, ##__VA_ARGS__)

#define LOG_MSG(fmt, ...)   UART_LOG(INFO,  mod, fmt, ##__VA_ARGS__)
#endif

/* 全局变量声明 */

#define WATER_LINE_LOW      3400    // 水位下限ADC值
#define WATER_REPLENISH_THR 1800    // 加水上限ADC值
#define WATER_TURBID_THR    3800    // 水浑浊度ADC阈值
#define MIN_SPEAK_TIME      30      // 最小播放时间间隔 单位:分钟
#define SPK_TIME            6000    // 语音播放时长 6000ms
#define HUMAN_DETECT_CNT    200     // 人体检测重复次数

#define HUMAN_DETECT_THR    30      // 此值为实测推算,每HUMAN_DETECT_CNT次有HUMAN_DETECT_THR次检测到人体,则认定有人体
#define WATER_CHANGE_TIME   30      // 换水时长 30天

/* 系统状态 */
uint8_t SYS_STATE;          // 系统主状态标志位,不可直接修改,修改务必调用接口
uint8_t LAMP_LIGHT_TIME;    // 路灯点亮的时长
uint8_t LAMP_LIGHT_CNT;     // 路灯点亮的次数
uint8_t LAST_TIME_STAMP[2]; // 上一次感应到人体并播放的时间戳数组 时、分
uint8_t CUR_TIME_STAMP[2];  // 当前时间戳
uint8_t WATER_CHANGE_STAMP[2];// 上次换水时间戳 月日
uint8_t HUMAN_CONBINE_TIME; // 人体检测及时钟标志位


//uint8_t uart_rx_data;   // 串口接收到的数据

extern vu16 ADC_DMA_IN[2]; //声明外部变量
extern DS18B20_MEASURE DS18B20_Measure;

/* 系统工作状态 */
typedef enum
{
    SYS_STATE_NONE = 0,
    SYS_STATE_READY,
    SYS_STATE_RESPONSE,
    SYS_STATE_WATER_REPLENISH,
    SYS_STATE_CNT
}SYSTEM_STATE_E;


typedef struct
{
    uint16_t enum_idx;
    uint8_t* str;
}enum_str_t;


enum_str_t const sys_state_str[SYS_STATE_CNT] = 
{
    {SYS_STATE_NONE,            (uint8_t *)"NONE"},
    {SYS_STATE_READY,           (uint8_t *)"REDY"},
    {SYS_STATE_RESPONSE,        (uint8_t *)"RSPS"},
    {SYS_STATE_WATER_REPLENISH, (uint8_t *)"RPLS"},
};





uint8_t *sys_state2str(SYSTEM_STATE_E const state);
uint16_t mean_filter(uint16_t value);
uint16_t mean_filter4water_turbidity(uint16_t value);


/* 状态转换 */
void state_update(uint8_t current_state)
{
    if (current_state != SYS_STATE)
    {
        //OLED_DISPLAY_CLEAR();

        if (SYS_STATE_READY == current_state)
        {
            OLED_DISPLAY_CLEAR();
            MSG_DBG("STATE from [ %s ] to [ %s ] \r", sys_state2str(SYS_STATE), sys_state2str(current_state));
            OLED_DISPLAY_8x16_BUFFER(0, "------REDY------"); // 显示字符串
            OLED_DISPLAY_8x16_BUFFER(2, "TBDT:     ");
            OLED_DISPLAY_8x16_BUFFER(4, "LINE:     ");
        }
        #if 10
        else if (SYS_STATE_RESPONSE == current_state)
        {
            MSG_DBG("STATE from [ %s ] to [ %s ] \r", sys_state2str(SYS_STATE), sys_state2str(current_state));
            OLED_DISPLAY_8x16_BUFFER(0, "------RSPS------");
            //OLED_DISPLAY_8x16_BUFFER(2, "LUMI:");
            //OLED_DISPLAY_8x16_BUFFER(4, "TIME:   CNT:");
        }
        else if (SYS_STATE_WATER_REPLENISH == current_state)
        {
            OLED_DISPLAY_CLEAR();
            MSG_DBG("STATE from [ %s ] to [ %s ] \r", sys_state2str(SYS_STATE), sys_state2str(current_state));
            OLED_DISPLAY_8x16_BUFFER(0, "------RPLS------");
            //OLED_DISPLAY_8x16_BUFFER(2, "LUMI:");
        }
        #endif
        else if (SYS_STATE_NONE == current_state || SYS_STATE_CNT == current_state)
        {
            MSG_DBG("STATE from [ %s ] to [ %s ] \r", sys_state2str(SYS_STATE), sys_state2str(current_state));
            OLED_DISPLAY_8x16_BUFFER(0, "!!!FATALERROR!!!");
        }
            
        SYS_STATE = current_state;
    }
}


5 成果——实现效果展示

在这里插入图片描述

在这里插入图片描述

6 最后总结——项目资料获取

想获取设计方案、器件资料、原理图、PCB、程序源码获取、其他毕设题目解答,欢迎私信。
或关注微信公众号“电子设计万事屋”,敬请关注

  • 22
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值