【单片机毕业设计】【hj-021】基于单片机的水温监测系统设计

一、基本介绍

项目名:
基于单片机的水温监测系统设计

项目名:水温控制 | 水温检测 | 温度检测 | 温度控制
项目编号:mcuclub-hj-021
单片机类型:STM32F103C8T6
具体功能:
1、通过防水式DS18B20测量水温,当温度不在设定的上下限值之内时,进行相应的加热(防水加热棒)或制冷(风扇),并进行声光报警
2、通过按键设置温度上下限值,可以手动控制加热制冷、切换模式
3、通过OLED显示屏显示数据
扩展功能:通过蓝牙模块将测量数据发送到手机端,并有异常提示信息,手机端可以远程控制加热制冷、切换模式
扩展功能:通过WIFI模块将测量数据发送到手机端并有异常提示信息,,手机端可以设置温度上下限,并可以远程控制加热制冷、切换模式

二、资料总览

实物资料

请添加图片描述

仿真资料

请添加图片描述

三、51单片机部分资料展示

1、实物图展示

单片机型号:STC89C52
供电接口:TYPE-C
板子类型:PCB集成板,厚度1.2,两层板(上下层覆铜接地)
器件类型:元器件基本上为插针式,个别降压芯片会使用贴片式。
在这里插入图片描述

2、仿真图展示

仿真软件版本:proteus8.9
电路连线方式:网络标号连线方式
注意:部分实物元器件仿真中没有,仿真中会用其他工作原理相似的元件代替,这样可能导致实物程序和仿真程序不一样
在这里插入图片描述

3、原理图展示

软件版本:AD2013
电路连线方式:网络标号连线方式
注意:原理图只是画出了模块的引脚图,而并不是模块的内部结构图
在这里插入图片描述

4、PCB图展示

由原理图导出,中间有一个项目编号,隐藏在单片机底座下,插入单片机后不会看到。
两层板,上下覆铜接地。
在这里插入图片描述

四、32单片机部分资料展示

1、实物图展示

单片机型号:STM32F103C8T6
供电接口:TYPE-C
板子类型:PCB集成板,厚度1.2,两层板(上下层覆铜接地)
器件类型:元器件基本上为插针式,个别降压芯片会使用贴片式。
在这里插入图片描述

2、原理图展示

软件版本:AD2013
电路连线方式:网络标号连线方式
注意:原理图只是画出了模块的引脚图,而并不是模块的内部结构原理图
在这里插入图片描述

3、PCB图展示

由原理图导出,中间有一个项目编号,隐藏在单片机底座下,插入单片机后不会看到。
两层板,上下覆铜接地。
在这里插入图片描述

五、系统框图

绘制软件:VISIO
在这里插入图片描述
本设计以单片机为核心控制器,加上其他模块一起组成此次设计的整个系统,其中包括中控部分、输入部分和输出部分。中控部分采用了单片机控制器,其主要作用是获取输入部分的数据,经过内部处理,逻辑判断,最终控制输出部分。输入由三部分组成,第一部分是温度检测模块,通过该模块检测当前水环境的温度;第二部分是按键模块,通过该模块可以切换界面、设置阈值、切换模式等;第三部分是供电模块,通过该模块可给整个系统进行供电。输出由三部分组成,第一部分是显示模块,通过该模块可以显示监测的数据以及设置的阈值;第二部分是继电器模块,通过两个继电器分别控制加热和制冷;第三部分是声光报警模块,当监测值不在设置的阈值内时进行声光报警。除此之外,蓝牙模块既作为输入又作为输出,蓝牙模块和手机进行连接,可以将监测的数据传输到用户手机端,用户也可以通过手机端发送指令控制继电器的工作及其模式的切换。具体系统框图如图3.1所示。

六、部分程序展示

软件版本:keil5
注意:逻辑程序和驱动程序分开,分布于main.c和其他.c文件

*******监测函数
*****/
void Monitor_function(void)
{
	if(time_num % 5 == 0)							//获取数据
	{
		temp_value = DS18B20_Get_Temp();	//获取温度值
	}
	
	if(time_num % 20 == 0)							//发送温度
	{
		sprintf(display_buf, "温度最大值:%dC\r\n",temp_max);
		UsartPrintf(USART1,display_buf);
		
		sprintf(display_buf, "温度最小值:%dC\r\n",temp_min);
		UsartPrintf(USART1,display_buf);
		
		if(temp_value > temp_max*10) 					
		{
			sprintf(display_buf,"温度值:%d.%dC  温度过高\r\n",temp_value/10,temp_value%10);
			UsartPrintf(USART1,display_buf);
		}
		else if(temp_value < temp_min*10) 					
		{
			sprintf(display_buf,"温度值:%d.%dC  温度过低\r\n",temp_value/10,temp_value%10);
			UsartPrintf(USART1,display_buf);	
		}
		else
		{
			sprintf(display_buf, "温度值:%d.%dC\r\n", temp_value/10,temp_value%10);
			UsartPrintf(USART1,display_buf);
		}
		
		if(flag_mode == 0)
		{
			UsartPrintf(USART1,"模式:自动\r\n");
		}
		else
		{
			UsartPrintf(USART1,"模式:手动\r\n");
		}
	}
	
	if(USART1_WaitRecive() == 0)			//如果接收到蓝牙数据
	{
		switch(usart1_buf[0])
		{
			case('A'):											//A:切换自动模式
				flag_ctrl++;								
				if(flag_ctrl >= 3)
					flag_ctrl = 0;
				
				switch(flag_ctrl)
				{
					case 0:
						RELAY_JR = 0;
						RELAY_FS = 0;
					break;
					
					case 1:
						RELAY_JR = 1;
						RELAY_FS = 0;
					break;
					
					case 2:												
						RELAY_JR = 0;
						RELAY_FS = 1;
					break;
					
					default:
					break;
				}
			
				flag_mode = 1;
			break;

			case('B'):									//B:切换到自动模式				
				flag_mode = 0;
				flag_ctrl = 0;
			break;
	
			default:		
			break;
		}
		USART1_Clear();
	}
}


/****
*******显示函数
*****/
void Display_function(void)
{
	switch(flag_display)									//根据不同的显示模式标志位,显示不同的界面
	{
		case 0:									      			//界面0:显示温度值,温度最大值,温度最小值
			Oled_ShowCHinese(1 ,0 ,"温度最大值:");
			sprintf(display_buf,"%dC ",temp_max);
			Oled_ShowString(1 ,12 ,display_buf);
				
			Oled_ShowCHinese(2 , 0 ,"温度最小值:");
			sprintf(display_buf,"%dC ",temp_min);	
			Oled_ShowString(2 ,12 ,display_buf);
		
			Oled_ShowCHinese(3 , 0 ,"温度值:");
			sprintf(display_buf,"%d.%dC ",temp_value/10,temp_value%10);
			Oled_ShowString(3, 8 ,display_buf);
		
			if(flag_mode == 0)
				Oled_ShowCHinese(4,0,"模式:自动");
			else
				Oled_ShowCHinese(4,0,"模式:手动");
		break;
		
		case 1:															//界面1:设置温度最大值
			Oled_ShowCHinese(1, 0,"设置温度最大值");
			if(time_num % 5 ==0)
			{
				sprintf(display_buf,"%d ",temp_max);
				Oled_ShowString(2 ,7,display_buf);
			}
			if(time_num % 10 == 0)
			{
				Oled_ShowString(2 ,7,"    ");
			}
		break;
		
		case 2:															//界面2:设置温度最小值
			Oled_ShowCHinese(1,0,"设置温度最小值");
			if(time_num % 5 == 0)
			{
				sprintf(display_buf,"%d ",temp_min);
				Oled_ShowString(2, 7, display_buf);
			}
			if(time_num % 10== 0)
			{
				Oled_ShowString(2, 7,"    ");
			}
		break;
		
		default:		
		break;
	}
}

/****
*******处理函数
*****/
void Manage_function(void)
{
	if(flag_display == 0)                  	//测量界面
	{
		if(flag_mode == 0)										//自动模式
		{
			if(temp_value < temp_min*10)        //温度小于设置最小值,声光报警,进行加热
			{
				if(time_num % 3 == 0)
				{
					LED = ~LED;
					BEEP = ~BEEP;
				}
				
				RELAY_JR = 1;
				RELAY_FS = 0;
			}
			else if(temp_value > temp_max*10)   //温度大于设置最大值,声光报警,进行制冷
			{
				if(time_num % 3 == 0)
				{
					LED = ~LED;                          
					BEEP = ~BEEP;
				}
				
				RELAY_JR = 0;
				RELAY_FS = 1;			
			}
			else                               //温度处于上下限值之间,关闭声光报警及加热制冷
			{
				LED = 1;
				BEEP = 0;
				RELAY_JR = 0;
				RELAY_FS = 0;
			}
		}
		else																//手动模式,关闭声光报警
		{
			LED = 1;
			BEEP = 0;
		}
	}
	else													        //设置界面,关闭声光报警及加热制冷
	{
		LED = 1;
    BEEP = 0; 
    RELAY_JR = 0;	
		RELAY_FS = 0;
	}
}


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
16.基于51单片机的数码录音放音系统设计 17.基于51单片机的语音采集系统设计 18.基于51单片机的智能加湿控制器设计 19.基于51单片机的视力保护仪设计 20.基于51单片机的简易电梯系统设计 33.基于51单片机的信号发生器设计 36.基于51单片机的酒精检测设计 37.基于51单片机的电子秤设计 38.基于51单片机的出租车计价器的设计 86.基于51单片机的红外遥控器设计 87.基于51单片机的万年历设计 93.基于单片机的北斗定位无人机救火系统 94.基于单片机的导盲拐杖设计 95.基于单片机的电子琴设计 96.基于单片机的语音小车设计 97.基于单片机的指纹门禁设计 99.基于51单片机的贪吃蛇设计 100.基于51单片机的倒车雷达的设计 101.基于51单片机的汽车倒车防撞报警系统 102.基于单片机的电压电流表设计 103.基于51单片机的贪吃蛇游戏设计 104.基于51单片机的多功能电子时钟设计 107.基于51单片机的酒精气体检测设计 117.基于51单片机的电子闹钟设计 118.基于51单片机的简易计算器设计 119.基于51单片机的震动报警设计 126.基于51单片机的1602显示带闹钟万年历设计 127.基于51单片机的热敏电阻数字温度计设计 131.基于51单片机的火灾报警系统设计 132.基于51单片机的计算器设计(带小数点) 133.基于51单片机的室内温湿度自动控制系统设计 134.基于单片机的粮仓远程监控系统设计 135.基于单片机的汽车防碰撞系统设计与实现 136.基于单片机的智能储存柜的设计 137.基于单片机的红外非接触人体测温仪阈值报警液晶显示设计 138.基于51单片机的智能鱼缸设计 139.基于51单片机的wifi自动校时时钟设计 140.基于51单片机水温(油温)可测液体温度的控制器设计 141.基于51单片机的红外报警器的设计与制作 142.基于单片机的简易烘手机设计 143.基于单片机的燃气报警器的设计 144.基于51单片机的智能台灯设计 145.基于51单片机的电机控制设计 146.基于51单片机智能可控洗衣机设计 147.基于51单片机的脉搏测量仪设计
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值