张晨洋, 文欢, 李薇, 刘权志, 祁博
(新疆农业大学,计算机与信息工程学院,新疆,乌鲁木齐 830052)
随着社会发展和科技进步,人们对于物品储藏的需求更加多样化。不同的物品有着不同的储藏温度,例如,一些特殊药品需要在0~8 ℃恒温储藏,饭菜在60 ℃保温可防止细菌滋生,红酒需储藏在10~15 ℃的温度条件下,而香烟、茶叶则需低温储藏[1-2]。同时,在农业、医药、化学、物流等多领域对物品恒温储存方面都有着不同的需求,如农业生产种植过程中对和子的储存,医药领域常用于血液、药剂等物品的储藏,化学实验室药品的存放以及物流中对食品的冷链运输等[3-4]。因此,设计一款可以智能调节温度的储物柜显得至关重要。
本文基于AT89C51单片机设计一种智能恒温储物柜。当电源开启时,该恒温储物柜内温度检测模块开始实时检测温度数据,并通过液晶显示储物柜内温度及阈值,在实时温度超过阈值时声光报警。使用者无须一直关注储物柜内的温度,可在声光报警时查看当前结果,确定系统是否正常工作[5-7]。
本设计采用AT89C51单片机作为控制主体,DS18B20温度传感器模块实时检测储物柜内温度,并将测得的温度数据传送至单片机进行处理,单片机根据测得的温度数据通过继电器驱动对恒温控制模块进行智能控制,实现自动化的恒温控制功能。同时,将温度数值及阈值显示在LCD1602模块上,当温度超过阈值时,进行声光报警。恒温控制系统整体设计如图1所示。
图1 恒温控制系统整体设计框图
智能恒温储物柜包括温度检测模块、恒温控制模块、显示模块、报警模块及按键模块,其硬件电路设计如图2所示。
图2 智能恒温储物柜的整体电路原理图
温度传感器是温度检测模块的核心。采用AT89C51作为控制主体,当储物柜接通电源时,DS18B20温度传感器立刻将储物柜内测得的实时温度发送至单片机处理,单片机判断实时温度超出阈值范围后,继电器驱动相应负载进行工作,从而实现温度的恒温控制[8]。
DS18B20是一种体积小、精度高、抗干扰能力强的温度传感器。该传感器精度可达±0.5 ℃,可检测温度范围为-55~125 ℃。DS18B20有3个引脚,分别为电源引脚VCC和GND,以及1个数据引脚,用来读取温度数据[9]。温度检测模块电路如图3所示。
图3 温度检测模块电路图
恒温控制模块是储物柜实现恒温储藏的关键所在。恒温控制模块由继电器、制热模块和制冷模块构成,使智能恒温储物柜内温度在0~60 ℃的范围内进行调节。其中:继电器采用PNP型三极管驱动,低电平导通,同时与LED并联,通过LED灯的亮灭判断继电器是否正在工作;制热模块采用220 V加热片的加热方式;制冷模块采用半导体制冷片提供冷气来源,其外部接有2个风扇,分别达到散热和风冷的效果,这样不会使得阈值设置过低,从而发生恒温储物柜内起霜的现象。恒温控制模块具体电路如图4所示。
采用LCD1602作为液晶显示模块,LCD1602拥有16个引脚,16列2行,可显示32个字符。1脚VSS接地,2脚VDD接电源正极,3脚VEE控制液晶的清晰度,RS、RW、E为液晶控制引脚,D0~D7为8个数据接口[10]。显示模块具体电路如图5所示。
图5 显示模块电路图
报警模块由1个蜂鸣器、PNP型三极管和电源构成。它的作用是让使用者知道此时储物柜内的温度已经低于或高于所设置的阈值范围。通过按键手动设置阈值范围,从上到下3个按钮依次是:设置键、减数键、加数键。按下设置键后,首先调节的是阈值上限,通过减数键和加数键去调整阈值。若要调整阈值下限,再次按下设置键即可。报警模块及按键模块具体电路如图6所示。
图6 报警模块及按键模块电路图
判断实时温度是否超出阈值范围是软件设计的核心。本文软件设计用到功能模块化的设计方式,利用Keil uVi-sion 5进行编程,智能恒温储物柜的软件结构与硬件设计相对应。其主要分为主程序设计模块、温度检测模块、恒温控制模块、液晶显示模块、报警模块和按键模块6个部分。
当温度检测模块读取到温度并将温度数据发送至单片机后,显示模块将温度数据转换成温度数值,显示在LCD1602模块上,单片机判断温度是否超出阈值。若温度没有超出阈值,则再次读取实时温度数据;若温度超出阈值,则继电器驱动相应负载进行工作;温度超出上限则驱动制冷风扇;温度低于下限则驱动加热片进行工作。负载工作时与其并联的LED指示灯保存常亮,故障时蜂鸣器报警。软件设计流程如图7所示。
图7 软件设计流程图
3.1.1 温度检测模块及恒温控制模块
智能恒温储物柜接通电源后,DS18B20温度传感器开始检测储物柜内实时温度,读取温度数据。读取温度寄存器时,先读低8位数据,后读高8位数据,然后放大10倍输出。获得温度数值后,发送至单片机,与设置的阈值范围进行对比,驱动相应的负载进行工作,从而实现恒温控制。温度检测及恒温控制流程如图8所示。
图8 温度检测及恒温控制流程图
读取温度数据部分代码如下所示。
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0x44);
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0xBE);
a=ReadOneChar();
b=ReadOneChar();
3.1.2 报警模块
系统根据设定好的上限报警温度和下限报警温度,通过单片机的判断,若智能恒温储物柜实时温度超过上、下限报警温度,则启动蜂鸣器进行报警,提醒使用者检查恒温储物柜是否正常工作。报警流程如图9所示。
图9 报警流程图
报警模块部分代码如下所示。
if(x>=10){beep_st=~beep_st;x=0;}
if(Mode==0)
{
if((c/10)>=TH)
{
ALAM=0;
ALAM1=1;
if(beep_st==1)
BUZZ=0;
else
BUZZ=1;
}
else if((c/10) { ALAM1=0; ALAM=1; if(beep_st==1) BUZZ=0; else BUZZ=1; } else { BUZZ=1; ALAM=1; ALAM1=1; } } 3.1.3 液晶显示模块 液晶显示模块调用了液晶写入指令函数以及液晶写入数据函数。智能恒温储物柜利用1602液晶显示模块,调用液晶初始化函数进行工作模式的设置、光标移动、清除显示等操作。液晶显示的数据内容包括储物柜内实时温度、上限报警温度和下限报警温度。液晶显示流程如图10所示。 图10 液晶显示流程图 液晶显示模块部分代码如下所示。 void write_1602com(uchar com) { RS=0; rw=0; LCD1602=com; delay(1); EN=1; delay(1); EN=0; } void write_1602dat(uchar dat) { RS=1; rw=0; LCD1602=dat; delay(1); EN=1; delay(1); EN=0; } 3.1.4 设置模块 这个系统还定义设置键、减少键以及增加键用于设定上限报警温度和下限报警温度的数值。通过代码编写,设定当设置键按下时,可通过减少键和增加键进行数值的加减,通过设置键的多次按动,可实现上、下限报警温度数值的选择,当设置模块启动时,报警程序不执行,蜂鸣器不工作。温度阈值设置流程如图11所示。 图11 温度阈值设置流程图 设置模块部分代码如下所示。 if(ADD==0&&Mode==1) { BUZZ=0; delay(10); if(ADD==0) { TH++; if(TH>=99) TH=99; write_1602com(0x80+0x40+3); write_1602dat(TH/10+0x30); write_1602dat(TH%10+0x30); write_1602com(0x80+0x40+4); BUZZ=1; } while(ADD==0); } 智能恒温储物柜实物如图12所示。将恒温储物柜置于22 ℃的室温内进行测试,通过按键模块设置温度阈值为20~30 ℃,此时温度处于阈值范围内,无负载工作。当温度阈值设置为25~30 ℃时,此时室温低于温度阈值下限,红色LED指示灯亮起,继电器驱动负载加热片工作,提高储物柜内温度。当温度阈值设置为0~8 ℃时,此时室温高于温度阈值上限,黄色LED指示灯亮起,表示继电器驱动负载制冷风扇工作,降低储物柜内温度。实物运行结果如图13所示。实物测试结果如表1所示。 表1 实物测试结果 图12 实物图 图13 实物运行结果图 本文设计了一款基于AT89C51单片机智能恒温储物柜,主要阐述了恒温控制的实现方法。其中,硬件设计包括温度检测模块、恒温控制模块、显示模块、报警模块及按键模块5个模块。软件设计主要是单片机对温度传感器采集数据的处理和控制。通过对实物运行结果的分析,该储物柜已实现设计方案所预期的功能,可实现智能化、自动化的恒温储藏,具备安全性强、制冷制热效率高等特点,应用前景广泛。4 实物测试
5 总结