基于单片机的太阳能热水器智能控制器的设计
2014-11-27陈开开
陈开开
摘 要 太阳能热水器作为太阳能利用中最常见的一种装置,经济效益明显,正在迅速的推广应用。本课题根据太阳能热水器的功能特点以及对其控制器的要求,提出一种基于51单片机的太阳能热水器智能控制器的设计方法。该设计利用51单片机作为系统的主控制器,配合其他控制电路协调工作。利用温度传感器和水位测量传感器实现了对水温和水位的测量,并通过预定值,实时调节温度和水量,实现24小时不间断供应热水;同时,通过相关控制电路和软件程序的设计还实现了加热装置和上水装置的全自动运行,提高了热水器的自动化和智能化程度。
关键词 太阳能热水器;单片机;智能控制器
中图分类号:TP273 文献标识码:A 文章编号:1671-7597(2014)19-0009-02
1 系统硬件设计
1.1 概述
太阳能因其无污染、取自自然、费用低廉等特点而受到越来越多的人的关注。本设计应用范围很广、技术成熟的STC公司生产的89C51单片机为中央控制核心,将来自温度传感器的温度信号和水位检测传感器的水位信号经单片机处理后,由LCD1602液晶显示屏显示当前水箱中的水温和水量;并通过跟预设定值作比较,驱动辅助加热装置和上手装置的电磁开关的工作状态,自动实现温度控制和水量加载,同时根据软件程序的设定,实现低温/高温报警,水位低限/高限报警等过程。
1.2 总体硬件结构
依据设计任务和系统需要实现的功能,综合成本等考虑设计出如下的硬件结构框图,如图1所示。
图1 硬件结构框图
该控制系统以STC89C51单片机作为中央控制器,通过DS18B20温度传感器检测当前水温,通过单片机的处理在1602液晶显示屏上显示当前的温度值。另外一路是水位检测传感器测量储水箱中水位高低,并通过指示灯的变化显示水位档。系统工作时,单片机在内部通过比较设定的温度和当前温度:当前温度小于设定值时就会闭合继电器开关,开启加热装置。在自动上水控制方面,当水位低于低水档时会自动闭合上水装置的继电器开关,启动上水装置,水位到达高水位档时就会自动断开继电器开关,停止上水。
1.3 温度传感器选型与介绍
本系统所选用的温度传感器是美国达拉斯公司设计生产的DS18B20数字传感器,它以9位数字量的形式反映被测物的实际温度值。DS18B20通过一个单总线接口发送或接收数据,用于读写和温度转换的电源可以从数据线本身获得,无需外部提供电源[1]。
DS18B20在使用时,通常连接微控制器系统实现温度数据的采集。使用时只需将DS18B20信号线与单片机某位I/O接口相连,如果想实现多点、多地测温可以在改位I/O上挂接多个。
1.4 水位检测电路设计
本设计中的水位检测传感器利用的检测原理是水的导电性。此处将储水箱等分为三个区域,水位检测利用不同深度下的水位电极和水底公共电极直间的电势差的不同来完成;具体检测操作如下。
1)由单片机依次向各个水位的电极输出高电平。
2)由公共电极实现不同水位下的电位转换,即当水位达到对应的电极,则输出低电平,否则为高电平。
3)每进行一次循环检测便得到4个串行数据,分析这几个数据后便可得知当前的水位值,再由1602显示屏显示水位情况,以此达到水位检测的目的[3]。
1.5 电磁继电器电路及原理
水温和水位的控制需要在水温低限时进行加热,在水位低限时进行加水,这就要有一个相应水位和水温信号的开关,实现水温和水位的自动控制,这里用到的是电磁继电器,当其线圈接通,由于电磁感应就会在铁心上产生磁性,将开关弹片吸合,使外部电路导通。
控制电路工作原理:单片机输出电平信号,通过正向驱动器,得到稳定的低电平信号,使发光二极管上下导通,通过发出的光导通后面的电路,导通三极管,电磁继电器线圈得电,电磁继电器工作,弹片向下吸引,开关闭合,后面的电路开始工作。
1.6 液晶显示模块选型和介绍
LCD1602液晶显示屏能够同时显示16 x 2个字符,模块内部已经存储了包括阿拉伯数字0-9,英文字母A-Z、a-z、和日文假名等。模块工作时,只需把想要显示的字符对应的地址中的点阵字符图形显示出来,我们就能看到字母出现在显示屏上。同时,由于1602显示屏识别的是计算机系统的ASCII码,操作时也可以用ASCII码直接赋值。1602通过D0-D7的8位数据端传输数据和控制指令[4]。
同时,由于该LCD模块内部已经集成硬件驱动电路,因此为了方便与单片机的连接,模块给出的是总线接口。1602内部驱动模块提供八位或者四位数据总线连接方式,同时,模块外加一些电源接口和控制信号接口。各引脚编号及功能如表1
所示。
表1 1602引脚接口表
2 系统软件设计
2.1 软件总体流程
系统上电自动完成初始化设置,使各传感器及控制电路完成准备工作。初始化结束,程序开始温度及水位的测量,并将测量结果显示在液晶屏屏,供用户查看。当温度低于下限值时,自动闭合加热继电器开关,以提高水温,直至水温在合理范围,自动切断继电器开关。同时,系统设置了三个水位档,根据水位的高度,自动判断当前水位,并以相应指示灯提示水位情况。当水位低于最低限时,系统自动闭合上水继电器开关,直至水位达到最高档水位线,再切断该继电器开关。系统总体软件流程如图2所示,实现了水温和水位的自动调节,提高了热水器的智能化程度。
图2 系统总体流程图
2.2 温度采集设计流程
DS18B20温度采集程序流程是根据DS18B20通讯协议,单片机控制DS18B20时首先需对其初始化,完成各寄存器初始设置;随后启动温度转换功能,等待温度的获取;获取数值后,读取数据寄存器,获取高字节数据DH,和低字节数据DL;最后根据二进制规则换算出温度值,并用于显示。endprint
以下为温度采集函数的关键程序代码:
unsigned int ReadTemperature(void)//读取温度函数
{
unsigned char TL=0;
unsigned char TH=0;
unsigned int temp=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0x44); // 启动温度转换
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器
// Delay(200);
TL=ReadOneChar(); //读低8位
TH=ReadOneChar(); //读高8位
temp = TH;
temp <<=8;
temp = temp |TL;
tt=temp*0.0625;
temp= tt*10+0.5; //放大10倍输出并四舍五入
return(temp);
}
2.3 水位检测流程
本系统中的水位检测流程是通过判断三根水位线被水淹没的情况,实现水位的检测,并有相应的水位指示灯告知用户,即当前水位为高水位档时,绿灯亮;当前为中水位档时,黄灯亮;当前为低水位档时,红灯亮。
以下代码为水位检测控制程序:
if(temp) <= 20) //水温低于20度,启动加热
switch_hot = 1;
else if(temp >= 40) //水温高于40度,停止加热
switch_hot = 0;
else
switch_hot = 0;
if(low == 0) //水位为低水位时,红色指示灯亮
red = 1;
else
{
red = 0;
switch_water = 1; //水位 低于 低水位时,开启自动上水开关
}
if(middle == 0) //水位为中水位时,黄色指示灯亮
yellow = 1;
else
yellow = 0;
if(high == 0) //水位为高水位时,绿色指示灯亮
{
green = 1;
switch_water = 0;
}
else
green = 0;
3 系统测试
通过以上章节对系统软硬件的设计,为验证实际测试效果,焊接了硬件电路板,并向单片机中下载了本系统程序代码。该系统实现了如下功能。
1)水温显示:水温通过18B20传感器的测量,在4位LED上显示数值,且测温范围为0-90℃,精确到1度。实际测试中,发现该系统对水温的检测响应快速、测量准确,并能将温度值以数字形式显示在数码管上,观测方便。
2)水位显示:实际测试中,当水位高于低水位档导线时,系统的低水位指示灯(红色)亮起;当水位高于中水位档导线时,系统的中水位指示灯(黄色)亮起;当水位高于高水位档导线时,系统的高水位指示灯(绿色)亮起;此时,逐渐放水,会发现指示灯又依次熄灭,达到向用户观测水位和指示水位变化的作用。
3)系统水位/水温自动控制实现:当水位低于低水位档时,系统自动闭合上水装置的继电器开关,开始上水,直到超过高水位档时,自动断开上水开关;当水温低于设定的温度下限时,系统根据外部检测信号启动加热装置的继电器开关,辅助加热,直到温度达到高限值时,断开加热开关。
参考文献
[1]王俊杰.基于89C51单片机的太阳能热水器智能控制器的设计[J].郑州轻工业学院学报,2005,20(3):67-68.
[2]张振荣,晋明武,王毅平.MCS- 51单片机原理及实用技术[M].北京:人民邮电出版社,2000:64-120.
[3]张景文,王震宏.基于单片机的太阳能热水器智能控制系统[J].西华大学学报,2008,27(5):25-28.
[4]张学峰.基于单片机控制的太阳能热水器全自动电路[J].现代电子技术,2005,195(4):5-7.endprint
以下为温度采集函数的关键程序代码:
unsigned int ReadTemperature(void)//读取温度函数
{
unsigned char TL=0;
unsigned char TH=0;
unsigned int temp=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0x44); // 启动温度转换
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器
// Delay(200);
TL=ReadOneChar(); //读低8位
TH=ReadOneChar(); //读高8位
temp = TH;
temp <<=8;
temp = temp |TL;
tt=temp*0.0625;
temp= tt*10+0.5; //放大10倍输出并四舍五入
return(temp);
}
2.3 水位检测流程
本系统中的水位检测流程是通过判断三根水位线被水淹没的情况,实现水位的检测,并有相应的水位指示灯告知用户,即当前水位为高水位档时,绿灯亮;当前为中水位档时,黄灯亮;当前为低水位档时,红灯亮。
以下代码为水位检测控制程序:
if(temp) <= 20) //水温低于20度,启动加热
switch_hot = 1;
else if(temp >= 40) //水温高于40度,停止加热
switch_hot = 0;
else
switch_hot = 0;
if(low == 0) //水位为低水位时,红色指示灯亮
red = 1;
else
{
red = 0;
switch_water = 1; //水位 低于 低水位时,开启自动上水开关
}
if(middle == 0) //水位为中水位时,黄色指示灯亮
yellow = 1;
else
yellow = 0;
if(high == 0) //水位为高水位时,绿色指示灯亮
{
green = 1;
switch_water = 0;
}
else
green = 0;
3 系统测试
通过以上章节对系统软硬件的设计,为验证实际测试效果,焊接了硬件电路板,并向单片机中下载了本系统程序代码。该系统实现了如下功能。
1)水温显示:水温通过18B20传感器的测量,在4位LED上显示数值,且测温范围为0-90℃,精确到1度。实际测试中,发现该系统对水温的检测响应快速、测量准确,并能将温度值以数字形式显示在数码管上,观测方便。
2)水位显示:实际测试中,当水位高于低水位档导线时,系统的低水位指示灯(红色)亮起;当水位高于中水位档导线时,系统的中水位指示灯(黄色)亮起;当水位高于高水位档导线时,系统的高水位指示灯(绿色)亮起;此时,逐渐放水,会发现指示灯又依次熄灭,达到向用户观测水位和指示水位变化的作用。
3)系统水位/水温自动控制实现:当水位低于低水位档时,系统自动闭合上水装置的继电器开关,开始上水,直到超过高水位档时,自动断开上水开关;当水温低于设定的温度下限时,系统根据外部检测信号启动加热装置的继电器开关,辅助加热,直到温度达到高限值时,断开加热开关。
参考文献
[1]王俊杰.基于89C51单片机的太阳能热水器智能控制器的设计[J].郑州轻工业学院学报,2005,20(3):67-68.
[2]张振荣,晋明武,王毅平.MCS- 51单片机原理及实用技术[M].北京:人民邮电出版社,2000:64-120.
[3]张景文,王震宏.基于单片机的太阳能热水器智能控制系统[J].西华大学学报,2008,27(5):25-28.
[4]张学峰.基于单片机控制的太阳能热水器全自动电路[J].现代电子技术,2005,195(4):5-7.endprint
以下为温度采集函数的关键程序代码:
unsigned int ReadTemperature(void)//读取温度函数
{
unsigned char TL=0;
unsigned char TH=0;
unsigned int temp=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0x44); // 启动温度转换
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器
// Delay(200);
TL=ReadOneChar(); //读低8位
TH=ReadOneChar(); //读高8位
temp = TH;
temp <<=8;
temp = temp |TL;
tt=temp*0.0625;
temp= tt*10+0.5; //放大10倍输出并四舍五入
return(temp);
}
2.3 水位检测流程
本系统中的水位检测流程是通过判断三根水位线被水淹没的情况,实现水位的检测,并有相应的水位指示灯告知用户,即当前水位为高水位档时,绿灯亮;当前为中水位档时,黄灯亮;当前为低水位档时,红灯亮。
以下代码为水位检测控制程序:
if(temp) <= 20) //水温低于20度,启动加热
switch_hot = 1;
else if(temp >= 40) //水温高于40度,停止加热
switch_hot = 0;
else
switch_hot = 0;
if(low == 0) //水位为低水位时,红色指示灯亮
red = 1;
else
{
red = 0;
switch_water = 1; //水位 低于 低水位时,开启自动上水开关
}
if(middle == 0) //水位为中水位时,黄色指示灯亮
yellow = 1;
else
yellow = 0;
if(high == 0) //水位为高水位时,绿色指示灯亮
{
green = 1;
switch_water = 0;
}
else
green = 0;
3 系统测试
通过以上章节对系统软硬件的设计,为验证实际测试效果,焊接了硬件电路板,并向单片机中下载了本系统程序代码。该系统实现了如下功能。
1)水温显示:水温通过18B20传感器的测量,在4位LED上显示数值,且测温范围为0-90℃,精确到1度。实际测试中,发现该系统对水温的检测响应快速、测量准确,并能将温度值以数字形式显示在数码管上,观测方便。
2)水位显示:实际测试中,当水位高于低水位档导线时,系统的低水位指示灯(红色)亮起;当水位高于中水位档导线时,系统的中水位指示灯(黄色)亮起;当水位高于高水位档导线时,系统的高水位指示灯(绿色)亮起;此时,逐渐放水,会发现指示灯又依次熄灭,达到向用户观测水位和指示水位变化的作用。
3)系统水位/水温自动控制实现:当水位低于低水位档时,系统自动闭合上水装置的继电器开关,开始上水,直到超过高水位档时,自动断开上水开关;当水温低于设定的温度下限时,系统根据外部检测信号启动加热装置的继电器开关,辅助加热,直到温度达到高限值时,断开加热开关。
参考文献
[1]王俊杰.基于89C51单片机的太阳能热水器智能控制器的设计[J].郑州轻工业学院学报,2005,20(3):67-68.
[2]张振荣,晋明武,王毅平.MCS- 51单片机原理及实用技术[M].北京:人民邮电出版社,2000:64-120.
[3]张景文,王震宏.基于单片机的太阳能热水器智能控制系统[J].西华大学学报,2008,27(5):25-28.
[4]张学峰.基于单片机控制的太阳能热水器全自动电路[J].现代电子技术,2005,195(4):5-7.endprint