基于单片机和DS18B20的温度采集和分析系统
扫描二维码
随时随地手机看文章
传统的温度检测大多以热敏电阻为温度传感器,但热敏电阻的可靠性较差、测量温度准确率低,且还必须经专门的接口电路转换为数字信号后才能由单片机进行处理。不仅如此,大部分温度系统都缺少对温度的采样存储,无法对温度进一步分析。本文介绍了一套以个人电脑及80C51单片机为核心,使用DS18B20温度传感器进行温度采样,数据库进行温度存储,Matlab进行温度分析的系统。该系统可对其所处环境的温度进行实时监控,同时进行温度的采样、存储和分析,实现对特定环境下温度的了解。
1 系统总体组成
系统硬件部分主要用于温度的测量和存储。PC端则用于测温事件的建立与存储、测量参数的设置、温度数据的存储及温度数据的分析。整体而言,系统核心部分分为温度监测模块、温度存储模块和温度分析模块3部分。
温度监测模块用于温度的监测及采样,首先利用PC端程序进行测温事件的建立及采样开始时间(时分秒)、采样结束时间(时分秒)、采样间隔(秒)和传输方式8个采样相关参数的设置,传输方式包括直接传输和间接传输,对应温度的永久存储和临时存储,相关参数通过串口传给单片机。然后利用80C51单片机和DS18B20温度传感器来获取当前温度,并按要求对温度进行采样,同时利用其他器件将温度及当前时间显示到LED屏上。
温度存储模块分为临时存储模块和永久存储模块,临时存储模块用于将所测量的温度数据通过I2C总线临时存储于AT24C02芯片中,永久存储模块则将AT24C02芯片中的数据或当前测量的温度数据通过串行口传给PC端,然后PC端程序将其存储于SQL Server数据库中。
温度分析模块利用Matlab对所获数据进行处理。通过将数据库中的数据导入Excel表,然后调用Matlab的m文件读取Excel表中的数据,并对其分析,完成数据处理。
系统的总体设计如图1所示。
2 系统硬件设计
系统硬件原理如图2所示,硬件电路图如图3所示。整个系统通过STC89C52RC单片机进行控制,8051系列单片机为1980年Intel公司推出的MCS-51系列8为高档单片机微机,而该型号单片机为8051内核芯片,内含Flash E2PROM存储器,内部程序存储空间的大小为4 kB,内部RAM为512 Byte,价格较低,能较好地满足系统要求。DS18B20温度传感器通过单总线与单片机P1.7连接,单总线数字温度传感器将地址线、数据线、控制线合为1根信号线,硬件开销小,为保证系统稳定性,将DS18B20的VCC端与外部电源相连。1602液晶为5 V电压驱动,可显示两行,每行16个字符,内置含128个字符的ASCII字符集字库,可满足系统信息输出的要求,1602占用单片机的P0及P2.3、P2.4、P2.5。AT24C02为E2PROM存储器,使用了快速、高效、精准的I2C接口设计技术与单片机进行通信,时钟线与单片机P2.0相连,信号线与P2.1相连。DS1302为时间芯片,能自动产生年、月、日、时、分、秒等时间信息,可实现系统温度与测量时间的对应传输,并方便系统控制。MAX232为RS232/TTL电平转换芯片,实现下位机与PC端上位机的串口通信,其与单片机的RXD(P3.0)和TxD(P3.1)相连。
3 系统软件设计
3.1 单片机程序设计
图3为程序的程序总体设计图,application为整个单片机程序的全局变量,用以区分系统核心部分和应用部分,当按下与P3.2相连的按键时,触发外部中断0,application自加1。
系统核心部分又分为空闲模式和工作模式。系统处于空闲模式时,读取DS1302的时间信息和DS18B20的温度信息,在液晶显示屏上显示当前的日期、时间和温度,同时利用按键可校准日期和时间;处于工作模式时,硬件电路与PC端配合工作,完成温度的采样、存储和传输。
应用部分,单片机通过串口获得温度阈值和函数式,利用下文将叙述的公式完成相应功能。另外,单片机进行温度采样的时间由定时器0进行精确控制。定时器1用于波特率的产生。当PC端传递数据给单片机时,将导致串口中断,参数数据传送至单片机的SBUF寄存器,然后再将数据存储于char型二维数组Parameter中,因为所需传输的参数数据共有8个,且每个参数的位数均为2位,故包括‘\0’在内共需3个char。型存储空间,从而完成采样参数设置。当单片机向PC端传递温度数据时,先传递温度的整数部分传给SBUF寄存器,再将温度的小数部分传给SBUF,从而传给PC端,此时先用强制转换将float型的温度数据转换为int型变量,传递其整数部分,然后将float型变量乘以100并减去其整数部分,得到小数部分。
3.2 PC端程序设计
图4为数据库设计的E—R图。系统数据库中包括事件表、数据表和处理结果表。事件表存储各种事件信息,数据表存储对应时间的温度数据及时间数据,处理结果表存储处理结果。
Matlab分析模块的主要步骤为:从Excel表中获取时间;利用datenum()函数将三维的时分秒转换成一维的实数;利用polyfit()函数拟合时间温度的一阶函数式;利用polyv al()函数计算已知各点拟合曲线的温度值;利用plot画出原始各点和拟合曲线。
PC端可是化程序主要使用Visual C++6.0编写而成,通过串口与单片机进行数据交换,并于数据库和Matlab进行通信,完成测温事件的建立、采样参数的设置以及数据的存储与分析。
PC端可视化程序使用到了Microsoft CommunicationsControl控件(MSComm控件)实现了串口通信和数据接收,利用微软提供的一种面向对象、与语言无关的数据访问应用编程接口 ADO组件实现与SQL Server数据库的通信,通过Matlab引擎调用Matlab的m文件,实现数据的分析,Matlab引擎是一组Matlab提供的接口函数(ICngine API函数),其采用客户机/服务器计算模式,此时C++作为客户端出现,负责用户接口和提出数据请求,Matlab则属于服务器端,向客户端提供数据服务。通过以上接口及MFC函数库完成PC端的可视化程序设计。
4 系统测试及应用
系统测试采用额定功率为1 500 W的电热壶烧水进行实验测试。利用系统对1 200 ml的自来水在电热壶中的温度进行采样,获得相关数据并进行分析,从而得到温度与时间的函数式,然后用该函数式来计算到达某一温度阈值的所需时间,完成应用。
由于电热壶的功率恒定且过大,故加热时因各种原因散失的温度可忽略不计,故水所吸收的热量在单位时间内是恒定的,通过比热容公式Q=Cm△T(其中Q为热量的变化,C为比热容,m为质量,△T为温度变化)及Q=p△t(p为功率,△t为所用时间)可得
由于水的比热容为4.2×103J/(kg·℃),电热壶功率为1 500 W,水的质量约为1.2kg,代入数据可得△T=0.297△t。
可见水温与时间应该是线性的,其系数约为0.297,即T=at+T0,其中a=0.297,T0为初始温度。
通过以上分析,可得式(2),该公式用于应用部分计算水到达某一温度剩余时间的函数式
t=(T-T1)÷a (2)
其中,t为所需的时间;T1为阈值温度;T为当前温度;a为分析所得函数的一次项系数。
系统测试结果如图6与图7所示,由图6可知,温度与时间呈较好的线性,与上述分析结果一致,由图7可知,拟合曲线的系数为0.264.53,与理论值的相对误差为-10.9%,这可能与电热壶的老化等因素有关。但由实验结果可知,系统可较好地对温度进行采样、存储和分析。
图8为针对系统分析的数据进行的一个应用测试,通过式(2)可知电热壶水温至100℃还需要的时间,从图8中可看出,当前水温为23℃,距水烧开还需380 s。
5 结束语
经过实验测试,本系统可完成温度的采集、存储和分析功能。通过该系统,可测得某一时段内固定时间间隔的温度值,并可将其存储于PC端的数据库中,当测得规定时间内的数据后,通过系统的分析模块,可对所测的温度数据进行一定程度的分析,获得温度变化的走势曲线图,在热功率恒定的条件下,通过Q=Cm△t函数可获得温度与时间的一次函数,从而对其他时段相同环境下的数据进行提前分析。同时,该系统功能较强,操作简便,系统较稳定,有一定的实际应用价值。