单片机毕设 STM32智能饮水机控制系统(源码+硬件+论文)


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();			//��ʼ��DS18B20
	  KEY_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

  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值