李琦 施艳红
摘要:热敏电阻的阻值会随温度的变化而变化,它是接触式温度传感器的核心元件。能否准确得到阻值与温度的关系直接影响到温度传感器测量值是否准确。但是阻值与温度的关系并非简单的线性关系,本文讨论了基于实验数据采集与多项式回归的方法建立热敏电阻阻值与温度关系数学模型,并得到对应解析表达式的过程。
关键词:热敏电阻;掌控板;数据
中图分类号:G434 文献标识码:A 论文编号:1674-2117(2021)08-0077-04
热敏电阻一般由电阻温度系数(TCR)较大的材料制成,根据其电阻与温度变化关系,可以分为正温度系数(PTC)热敏电阻和负温度系数(NTC)热敏电阻。接触式温度传感器一般以热敏电阻作为核心元件,通过如图1所示的电路得到随温度变化的电压信号。
其中,VCC接电源正极,GND接电源负极,RT为热敏电阻,R为对温度变化不敏感的定值电阻。RT与R形成分压电路,根据欧姆定律,此时OUT端与GND之间的电压U与电源电压Vcc、热敏电阻阻值Rt、定值电阻阻值Rs之间存在如下关系:
将上式整理后可得到:
Vcc、Rs可以看作是定值,因此通过测量U的值可以计算得到热敏电阻当前阻值Rt。若该热敏电阻的温度-阻值变化规律已知,则可以进一步计算得到对应的温度。为了得到某热敏电阻其温度-阻值变化关系,可以通过实验采集数据,并通过分析数据来开展探究。
● 设计实验,采集数据
一般地,开源硬件中的模拟输入口是一个模-数转换器,并且默认会以Vcc作为基准电压,如掌控板的P0口就支持12位模-数转换,且基准电压为3.3V。若P0口读取到的模拟值为2047,则表示当前P0口的电压为≈1.65V。
准备掌控板、1KΩ定值电阻、烧杯、玻璃温度计、待测热敏电阻以及若干导线,其中待测热敏电阻的金属引脚需要用绝缘材料进行包裹,以避免金属引脚与水接触造成测量不准确。根据图2所示电路将各部分进行连接,为了导线连接方便,本案例实验装置使用了掌控扩展板。实验装置实物如下页图3所示。
为了让掌控板记录数据,在掌控板中上传如图4所示的代码。
实验时,先打开掌控板,将热敏电阻和玻璃温度计放置到烧杯内,在烧杯内倒入开水直至浸没热敏电阻和温度计,等待玻璃温度计读数上升到80℃以上后按下掌控板A键。时刻观察玻璃温度计读数,每次玻璃温度计到达掌控板上显示的目标温度,就按下B键。
实验结束后,在mpython软件中连接掌控板,并在控制台中输入rec,便可以得到记录的数据,如图5所示。
● 数据整理与分析
有许多软件支持数据整理与分析。相比之下,使用Python编程进行数据整理与分析可以更加灵活、深入,利用Python的pandas模块、numpy模块和matplotlib模块可以方便、高效地开展数据处理与分析。Jupyter Notebook是一个交互式笔记本程序,它支持Python程序的分段编写与运行,并实时显示输出结果,因此非常适合应用在数据分析领域。
1.实验数据读取与整理
将mpython软件切换到Jupyter模式,并新建一个Jupyter项目。运行如图6所示的代码可以将实验数据保存到data对象中。其中rec字符串的值可以从图5所示的mpython控制台中复制得到。
data是一个DataFrame对象,温度值记录在data对象的temp列中,对应的模拟值记录在vot列中。根据模拟值计算阻值,并将结果保存到resis列中。此外,为了方便查看数据,还需要根据温度值对数据进行升序排序。具体代码如图7所示。
2.绘制散点图,观察数据规律
为了直观地看到数据的分布规律,以data中的温度值作为横坐标数据,对应的电阻值作为纵坐标数据,利用matplotlib模块绘制散点图。参考代码与运行结果如图8所示。
从散点图中可以看出,該热敏电阻阻值随温度增加而增加,属于正温度系数热敏电阻(PTC),且阻值与温度存在非线性关系。
● 建立多项式回归数学模型
为了得到热敏电阻阻值与温度的数学关系,需要通过回归分析的方法得出电阻关于温度变化的函数表达式。回归分析的方法有很多,其中研究一个因变量与一个或多个自变量之间多项式的回归分析方法,称为多项式回归(Polynomial Regression),当自变量只有一个时,称为一元多项式回归。一元多次多项式的回归方程为:
其中y为因变量,x为自变量,b_i为回归系数。多项式回归方程可以通过增加自变量x的高次项来逼近,因此在某个确定的定义域范围内,任意连续可导函数都可以用多项式来拟合。
在本案例热敏电阻的阻值与温度的关系中,热敏电阻的阻值可以看作自变量,温度则作为因变量。因此,可通过一元多项式来进行回归。一元多项式回归的核心,就是找到合适的回归系数b0...bi,使得阻值样本数据R下通过一元多项式计算得到的温度预测值Tp与样本数据中真实温度值Tr的均方误差(MSE)最小。从图像上看,就是让回归方程的图像尽可能地逼近所有的样本数据点。
利用numpy模块的polyfit方法可以快速地进行一元多项式回归。在图9所示的代码中,利用温度值作为x值、电阻值作为y值进行了最高次为2次多项式回归。
多项式回归的系数保存在coef列表中,具体的系数采用了科学记数法。根据coef参数值,回归方程为:
可以通过如图10所示的代码定义predict函数,以方便回归方程的计算。
为了直观地了解回归结果,可以利用predict函数预测20~100℃时热敏电阻的阻值,并将图像与观测数据一起绘制到同一张图表中,代码与运行结果如图11所示。
● 模型评估与修正
得到数学模型后还需要对模型进行评估与修正。从图11中可以看出,该多项式回归模型与观测数据的拟合程度并不是很好,特别是低温段。除了观察图表,还可以通过均方误差来评价模型。如图12所示的代码定义了rmse函数并计算预测值与观测数据的均方误差。
尝试在图9所示的代码中修改polyfit函数的参数,逐个增加多项式的高次项,当最高次为3次时,模型图像与均方误差如图13所示,无论是图像表现还是均方误差都有改观。
逐步增加高次项可以进一步提高模型的拟合程度,本案例中最高次与均方误差的关系如下表所示。
但是,多项式最高次数并非越大越好,随着次数的增加,多项式回归模型容易出现“过拟合”现象,所谓的过拟合是指回归模型与观测数据的拟合程度很好,但预测数据的表现很差。如图14所示的是多项式最高次数为8时的函数图像,可以明显看出模型在高温段失效。
因此,本案例中的热敏电阻阻值R与温度T的关系可以通过一个7次多项式方程来表示:
R=(4.89005432e-11)+(1.21358405e-07)*T-(3.49422507e-05)*T2+(3.98052301e-03)*T3-(2.31129452e-01)*T4+(7.36089221e+00)*T5-(1.22738958e+02)*T6+(1.53919756e+03)*T7
事實上,多项式回归模型也有其局限性,它在观测数据范围内表现较好,而在观测数据范围之外则容易失效。例如,上述方程在定义域[0,100]的函数图像如图15所示。可以看到利用该回归模型并不能准确预测低于20℃时的热敏电阻阻值。
与传统教学方式相比,项目式教学更有助于培养学生的动手能力、创新能力和探究精神,可以让学生更深入地掌握、理解、应用学科知识。但项目活动的开展往往涉及多学科的知识,利用开源硬件采集实验数据并结合数学建模与Python编程,可以开展许多学科实验探究活动。本案例涉及信息技术、数学、物理等学科内容,体现了信息技术学科计算思维、数字化学习与创新,数学学科数学建模,物理学科实验探究等学科核心素养。希望通过本案例能给大家带来更多的启发。
参考文献:
[1]史丽萍,孙宝元,于浩洋.多项式回归分析在传感器测试中的应用[J].河北工业大学学报,2003,32(03):41-44.
[2]伊德里斯.Python数据分析基础教程:NumPy学习指南:第2版[M].北京:人民邮电出版社,2014,1.