基于51单片机的智能热水器水温水位检测报警自动加热系统毕设课设

详见文末

在这里插入图片描述


功能效果演示

基于51单片机的智能热水器

基本实现功能

基于51单片机的智能热水器
由STC89C52单片机+水位检测传感器+DS18B20温度探头传感器+按键模块+继电器模块+报警及指示模块+LCD1602显示模块+电源构成。
具体功能:
1、LCD1602显示屏第一行显示温度及定时时间,第二行显示温度上限和下限值;
2、按键可以设置温度的上下限值及定时时间;定时时间到开始加热
3、用两个水位检测传感器检测水位:当水位下限传感器检测到有水时,继电器开始控制加水;当水位上限传感器检测到有水时,停止加水;
4、当温度低于设置的下限温度值时,继电器开始控制加热;当温度高于设置的上限温度值时,停止加热。


在这里插入图片描述


第1章 绪论

(篇幅有限,详见文末获取)

第2章 硬件系统设计

2.1 方案验证
本课题是基于STC89C51单片机的智能电热水器的控制器的设计,要达到的控制要求有:(1)用LCD1602液晶显示水温、设置上下限和定时时间,(2)水温检测显示范围为00~99℃,精度为±1℃。(3)温度预设范围为0~99℃,当检测温度低于预设温度时,开始加热;检测温度高于预设温度时,停止加热。(4)设置4个程序按键。分别问设置按键、加键、减键、确定。(5)可以红外遥控,通过红外一体接收探头接收遥控器信号,执行与主板按键同等功能。

方案一:以STC89C51单片机为控制中心的智能电热水器
STC89C51单片机具有结构简单、控制能力强、可靠性高、体积小、价格低等优点,在许多行业都得到了广泛的应用。以STC89C51单片机为核心,配以外围电路如时钟电路、复位电路、按键、显示器件即可构成交通灯系统,结构框图如图2.1:

在这里插入图片描述

方案二:PIC16C72单片机为控制器件的智能电热水器
以PIC16C72为控制芯片的电热水器,虽然功能很强大,但是存在一些很需要改进的地方:中断的现场保护是中断应用中一个很重要的部分由PIC16C72的指令系统中没有专门的PUSH(入栈)和POP(出栈)指令,所以要想实现这个功能需要用一段程序。在中断服务程序中对马达以及继电器进行控制1漏电检测,报警则在中断里给出,而每50ms进入一次中断,所以发生漏电时最多50ms便可以切断电源1入口→中断保护→控制马达→控制继电器如果用直流对电机进行控制,其转速太快,过调量太大,容易引起震荡。
通过以上两种设计方法的比较来看,实现电热水器的智能控制可以有很多种方法。可以采用可编程序控制器PLC,各种单片机来实现。但考虑到成本控制和软硬件实现难度,采用方案一的控制系统设计,可以进一步提高电热水器的智能作用,能够保证持续的热水供应,并可以满足人们日常生活的需要,提高了人们生活的质量。

时钟电路用来产生时钟信号供单片机工作,晶振采用12MHz,平衡电容采用30pF。复位电路在系统上电或运行过程中对单片机进行初始化操作。按键采用独立式热键,用来扩展系统功能。显示通过LCD1602液晶显示实时温度、上下限温度值和预约功能的定时时间。报警指示灯(黄):当热水器出现异常情况时,该指示灯被点亮。

依据设计要求,系统上电复位后按默认值开始运行,然后开始检测温度按键,若无按键,则按设定温度进行工作;若温度键已按下,则开始设定温度范围,并按新的设定值开始加热。接着继续检测温度按键,若无按键,则接着上一步的执行(以新的设定值开始工作)。若有按键,则重新设定温度范围,如此循环。

2.2 硬件系统设计
单片机应用系统的硬件电路设计包含两部分内容:一是系统扩展,即单片机内部的功能单元,如ROM、RAM、I/O、定时器/计数器、中断系统等不能满足应用系统的要求时,必须在片外进行扩展,选择适当的芯片,设计相应的电路。二是系统的配置,即按照系统功能要求配置外围设备。本设计中只用最小系统加上键盘、显示、ISP接口电路,单片机本身资源可以满足设计要求,所以不必对单片机进行扩展[2]。
系统的硬件系统以STC89C51单片机为核心,主要分两部分:直流稳压电源和智能电热水器控制电路[9],其原理图见附录二。直流稳压电源由变压器、整流桥、滤波电路、稳压电路组成。智能电热水器系统由时钟电路、复位电路、报警电路、键盘、温度检测电路和显示接口电路组成。
在这里插入图片描述

2.2.1 电源电路
电源电路按元件类型可分为电子管稳压电路、三极管稳压电路、可控硅稳压电路、集成稳压电路等。根据调整元件与连接方法,可分为并联型和串联型;根据调整元件工作状态不同,可分为线性和开关稳压电路。本设计中采用了线性工作状态的线性集成稳压电源。
直流稳压电源一般由三部分组成,分别是电源变压器、整流滤波电路及稳压电路设计框图:
在这里插入图片描述
各部分简介:(篇幅有限,详见文末)

2.2.2 按键电路
本毕业设计的按键使用的是独立式的按键,直接用I/O口线构成的单个按键电路,每个按键单独工作,不会影响其他按键的工作状态,按键之间的状态互不干扰。独立式按键的典型应用如下图2.5所示:
在这里插入图片描述
按键输入均为低电平“0”有效,此外,上拉电阻保证了按键断开时,I/O口线有确定的高电平。当I/O口线内部有上拉电阻时,外电路不可接上拉电阻。独立式按键的软件常采用查询式结构。先逐位查询每根I/O口线的输入状态,如某一根I/O口线输入为低电平,则可确认该I/O口线所对应的按键已按下,然后,再转向该键的功能处理程序,具体编程见程序清单。

2.2.3 报警电路(篇幅有限,详见文末)

2.2.4继电器驱动电路(篇幅有限,详见文末)

2.2.5温度检测电路
本文采用温度传感器DS18B20采集电热水器的实时温度, 提供给STC89C51的P2.2口作为数据输入。在本次设计中我们所控的对象为水温。其电路原理框图如下:
在这里插入图片描述
DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式;温度测量范围为0℃~99℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出,支持3V~5.5V的电压范围,使系统设计更灵活、方便[4]。如图2.8所示DS18B20的DQ为数字信号的输入/输出端;1脚GND为电源地;3脚VDD为外接供电电源输入端。
当传感器工作时,如果水温超过38℃,将温度传给单片机,蜂鸣器报警,并断电;如果水温低于22℃,热水器开始工作,加热指示灯亮。

2.2.6水位检测电路(篇幅有限,详见文末)

2.2.7 1602液晶模块(篇幅有限,详见文末)

2.2.8 红外一体接收模块(篇幅有限,详见文末)

2.2.9 STC89C51功能特点介绍(篇幅有限,详见文末)

2.3 硬件测试结果
现象一:
初始状态,即刚开启时的状态,此时tp显示的是当前所处环境的温度,默认温度范围为29~35℃。此时红灯和绿灯亮,黄灯不亮。
在这里插入图片描述
现象二:
通过按键手动设置温度的上限值和下限值,此时tp显示的是当前所处环境的温度,设置温度范围为22~38℃。此时红灯和绿灯亮,黄灯不亮,因为在没有水的情况下,是不会进行加热,否则会烧坏。

在这里插入图片描述
现象三:
将下水位传感器放入水中,此时检测到有水,开始加热、加水。表现为黄灯、绿灯亮,红灯不亮。
在这里插入图片描述
现象四五六(篇幅有限,详见文末)

第3章 软件系统设计

软件设计由主程序,键扫描子程序以及一些其他功能模块子程序三部分组成。其中主控制器子程序包括A/D转换子程序(水位、水温),键盘处理及显示子程序,温度控制子程序(使用输出比较功能),漏电保护子程序等组成。主程序要先对单片机的定时器、COP模块、A/D转换、端口、键中断等部分的工作模式参数进行初始化设定,之后系统的主程序循环可以调用各个功能模块的子程序,对相关事件的处理则是依靠标志位和判断标志位来实现。

3.1主程序流程图:
当程序开始运行时,1602LCD液晶显示器上会显示一个初始的默认值,此时通过按下按键来设定温度范围,若是没有按下则返回初始状态;若是设定了最低温度和最高温度值,则通过新设定的温度范围来运行;但是若是设定完毕之后没有按下确认键,则设定不成功,需返回重新设定温度范围,再次按下确认键。
在这里插入图片描述
3.2程序流程图
在这里插入图片描述

部分程序源码(完整详见文末)

/*
基于51单片机的智能热水器
*/
//程序头函数
#include <reg52.h>
//显示函数
#include <display.h>
//宏定义
#define uint unsigned int 
#define uchar unsigned char
 
//管脚声明
sbit jdq= P1^0;	//加热继电器
sbit shui=P1^3;//加水继电器
sbit Feng = P2^6; //蜂鸣器
//按键
sbit Key1=P1^4;	 //设置
sbit Key2=P1^5;	 //加
sbit Key3=P1^6;	 //减
sbit Key4=P1^7;	 //确定	  
sbit shang=P3^7;//上限
sbit xia=P3^6;//下限

sbit DQ=P2^2;     			//定义DS18B20总线I/O
signed char w,bj,bjx,bjd;     				//温度值全局变量
uchar c;				//温度值全局变量
bit bdata flag=0,flag_BJ,flag_off=1,que;
//时间计算
#define Imax 14000    //此处为晶振为11.0592时的取值, 
#define Imin 8000    //如用其它频率的晶振时,
#define Inum1 145    //要改变相应的取值。
#define Inum2 700 
#define Inum3 3000 
//解码变量
unsigned char Im[4]={0x00,0x00,0x00,0x00};

//全局变量
uchar f;
unsigned char m,Tc;
unsigned char IrOK;

//设置变量

uchar xx=29;
//下限
uchar sx=35;
//上限
int ds=0;
uchar Mode=0;

void delay(uint z)
{
	uint i,j;
	for(i=0;i<z;i++)
	for(j=0;j<121;j++);
}
/**************************************************************************************************
**************************温度工作程序*************************************************************
**************************************************************************************************/
/*****延时子程序*****/
void Delay_DS18B20(int num)
{
  while(num--) ;
}
/*****初始化DS18B20*****/
void Init_DS18B20(void)
{
  unsigned char x=0;
  DQ = 1;         //DQ复位
  Delay_DS18B20(8);    //稍做延时
  DQ = 0;         //单片机将DQ拉低
  Delay_DS18B20(8);   //精确延时,大于480us
  DQ = 1;         //拉高总线
  Delay_DS18B20(14);
  x = DQ;           //稍做延时后,如果x=0则初始化成功,x=1则初始化失败
  Delay_DS18B20(20);
}
/*****读一个字节*****/
unsigned char ReadOneChar(void)
{
  unsigned char i=0;
  unsigned char dat = 0;
  for (i=8;i>0;i--)
  {
    DQ = 0;     // 给脉冲信号
    dat>>=1;
    DQ = 1;     // 给脉冲信号
    if(DQ)
    dat|=0x80;
    Delay_DS18B20(4);
  }
  return(dat);
}
/*****写一个字节*****/
void WriteOneChar(unsigned char dat)
{
  unsigned char i=0;
  for (i=8; i>0; i--)
  {
    DQ = 1;
    DQ = dat&0x10;
    Delay_DS18B20(5);
    DQ = 0;
    dat>>=1;
  }
}
/*****读取温度*****/
unsigned int ReadTemperature(void)
{
  unsigned char a=0;
  unsigned char b=0;
  unsigned int t=0;
  float tt=0;
  Init_DS18B20();
  WriteOneChar(0xC1);  //跳过读序号列号的操作
  WriteOneChar(0x44);  //启动温度转换
  Init_DS18B20();
  WriteOneChar(0xC1);  //跳过读序号列号的操作
  WriteOneChar(0xBE);  //读取温度寄存器
  a=ReadOneChar();     //读低8位
  b=ReadOneChar();    //读高8位
  t=b;
  t<<=8;
  t=t|a;
  tt=t*0.00625;
  t= tt*10+0.5;     //放大10倍输出并四舍五入
  return(t);
}

原理图

在这里插入图片描述

仿真图

在这里插入图片描述

实物图

在这里插入图片描述


点击下方小卡片,那边发送“资源”两个字

获取论文报告+AD原理图源文件+Proteus仿真源文件+单片机源程序+配套视频讲解等全套资料

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶绿体不忘呼吸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值