文章目录
- 0 前言
- 1 主要功能
- 1 设计方案
- 2 硬件设计
- 3 软件部分设计
- 4 关键代码
- 5 最后
0 前言
🔥
这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是
🚩 毕业设计 STM32的智能饮水机控制系统(源码+硬件+论文)
🥇学长这里给一个题目综合评分(每项满分5分)
- 难度系数:3分
- 工作量:3分
- 创新点:4分
🧿 项目分享:
https://gitee.com/sinonfin/sharing
1 主要功能
主要功能: 使用STM32为主控制器,LCD1602显示当前信息:水温、模式、设置水温。DS18b20检测当前饮水机水温,水位传感器检测是否有水,无水情况下蜂鸣器发出声光报警,且所有功能停止(防干烧)并显示:Water!(提醒加水)。
-
1.使用STM32F103C8T6单片机做主控制器。
-
2.使用LCD1602显示采集到的水温、模式、设置水温值。
-
3.使用DS18b20检测当前饮水机水温值。
-
4.使用水位传感器检测是否有水。
-
5.使用继电器控制加热片加热和水泵出水。
-
6.当无水的情况下,蜂鸣器进行声光报警提醒,并且停止所有的功能,直到检测到有水。
-
7.四个按键分别对应:加热、出水,温度加、温度减的功能。
-
Normal:常温模式
-
Water:缺水警告
-
Hot:加热模式
-
open:水泵出水
1 设计方案
(1)整体方案的设计
方案所选择的芯片,在便于操作的基础上,要能够实现控制设计任务的基本要求。本文设计的智能饮水机是采用STM32F103C8T6单片机作为主控芯片,通过、DS18B20温度传感器、Water Sensor水位传感器、继电器控制、LCD1602显示、蜂鸣器报警以等功能。
(2)设计方案原理
本设计的软件设计主要包括系统主程序以及液位采集子程序、温度设定子程序等设计。整个系统程序采用模块化结构设计,程序相对比较优化易修改,调试系统软件的开发是用C语言编程实现的。
通过软件编程使单片机通过控制不同的工作模块来控制饮用水的水温,利用LM3939传感器完成将水位数据传输入单片机,通过DS18B20温度传感器将水温信息输入单片机,输入的信息经过单片机的处理经LCD1602显示器直观的显示出来。工作的模式通过按键来控制,将按键产生的高低电平的变化输入单片机,发出相应的程序,进入相应的工作模式。通过Keil C编程将各模块衔接成整体并实现各模块之间的逻辑控制。
2 硬件设计
根据系统要求及上面几个硬件设计原则,确定系统硬件原理图。系统以单片机STM32F103C8T6为中央处理单元、蜂鸣器报警、LCD液晶显示、按键设置,LM393比较器判断、DS18B20温度采集、水位传感器、继电器控制原理图如3-1所示:下面对主要的电路设计做详细介绍。系统以单片微型计算机为核心外加多种接口电路组成如图所示
3 软件部分设计
软件部分的主要任务是完成对整个设计的流程进行处理。首先STM32单片机进行引脚的配置,配置各个模块使用的引脚后来进行初始化,首先 DS18B20温度传感器获取当前温度,液晶初始化完成后显示当前的信息和参数,最后程序开始判断,如果饮水机内无水蜂鸣器就会进行报警提醒,防干烧。有水的情况下进行判断是常温模式还是加热模式,如果是常温就直接控制继电器进行出水,如果是加热模式判断温度是否低于下限如果低于下限先加热在控制继电器进行出水基于上述分析,系统软件设计流程如图4-2所示。各功能的控制。系统主流图如图所示。
4 关键代码
#include "sys.h"
#include "delay.h"
#include "lcd1602.h"
#include "ds18b20.h"
#include "gpio.h"u8 mode=0;//ģʽ������0�dz���ģʽ��1�Ǽ���ģʽ
u8 setTemp=40;//���õ��¶�ֵ
u8 openFlag=0;//��ˮ��־void keyscan(void)
{if(KEY1 == 0)//ģʽ�л�����{delay_ms(10);//����if(KEY1 == 0){while(KEY1 == 0);//�ȴ������ɿ�mode=!mode;if(mode==0)LCD_Write_String(10,0,"Normal");else LCD_Write_String(10,0," Hot ");}}if(KEY2 == 0 && WATER_LEVEL)//��ˮ����{delay_ms(1);if(KEY2 == 0){RELAY2 = 1;if(openFlag==0){openFlag=1;LCD_Write_String(10,1," open ");//��ʾopen}}}else{if(openFlag==1){openFlag=0;LCD_Write_String(10,1," ");}RELAY2 = 0;}if(KEY3 == 0)//�Ӽ�{delay_ms(10);if(KEY3 == 0 ){while(KEY3 == 0);if(setTemp<99)setTemp++;LCD_Write_Char(4,1,setTemp/10+0x30);//��ʾ���õ��¶�LCD_Write_Char(5,1,setTemp%10+0x30);}}if(KEY4 == 0)//����{delay_ms(10);if(KEY4 == 0 ){while(KEY4 == 0);if(setTemp>0)setTemp--;LCD_Write_Char(4,1,setTemp/10+0x30);//��ʾ���õ��¶�LCD_Write_Char(5,1,setTemp%10+0x30);}}
}int main(void)
{ u16 timeCount=200;u16 temperature=0;u8 shanshuo=0;delay_init(); //��ʱ������ʼ�� delay_ms(500); //�ϵ�˲�����һ����ʱ�ڳ�ʼ��DS18B20_GPIO_Init(); //ds18b20���ų�ʼ��DS18B20_Init(); //��ʼ��DS18B20KEY_AND_RELAY_GPIO_Init();LCD_Init(); //��Ļ��ʼ��LCD_Write_String(0,0,"TEM:00 C Normal");//��ʾ�ַ���LCD_Write_String(0,1,"SET:00 C ");LCD_Write_Char(6,0,0xDF);LCD_Write_Char(6,1,0xDF);LCD_Write_Char(4,1,setTemp/10+0x30);//��ʾ���õ��¶�LCD_Write_Char(5,1,setTemp%10+0x30);while(1){ keyscan();//����ɨ��if(timeCount++>=300)//��ʱһ��ʱ�䣬��ʱ���300ms{timeCount=0;shanshuo = !shanshuo;temperature=ReadTemperature();//��ȡ�¶�LCD_Write_Char(4,0,temperature/10+0x30);//��ʾ�¶�LCD_Write_Char(5,0,temperature%10+0x30);if(!WATER_LEVEL && shanshuo)//ȱˮʱ���������εεε��죬Һ����˸��ʾ{LCD_Write_String(10,1,"Water!");BEEP = 1;}else{if(openFlag==0)LCD_Write_String(10,1," ");BEEP = 0;}if(WATER_LEVEL && mode==1 && temperature<setTemp)//����ˮ��״̬�²����Ǽ���ģʽ�¶ȵ�������ֵ������ִ�м���{RELAY1 = 1; }else{RELAY1 = 0; //����ر� }} delay_ms(1);}
}
5 最后
🧿 项目分享:
https://gitee.com/sinonfin/sharing