步骤1:
我早期的设计采用NTC温度探头,采用表查找技术将电阻分压器的输入电压转换为温度。由于ESP32能够进行12位模拟输入,并且由于我的设计是为了提高精度,因此我决定在电压到温度转换的代码中实现“Steinhart-Hart”方程。
首先由John S. Steinhart和Stanley R. Hart于1968年发表,Steinhart-Hart方程式定义了NTC温度探头的温度关系阻力如下:
1/T = A +(B *(log(热敏电阻)))+(C * log(热敏电阻)* log(热敏电阻)* log(热敏电阻))
其中:
T是开氏度。
A,B,C是Steinhart-Hart系数(稍后会详细介绍)。
热敏电阻是当前温度下温度探头热敏电阻的电阻值。
为什么这个看似复杂的Steinhart-Hart方程对于简单的NTC温度探头来说是必不可少的数字温度计? “理想的”NTC温度探头将提供实际温度的线性电阻表示,因此涉及电压输入和缩放的简单线性方程将导致精确的温度呈现。但是,NTC温度探头不是线性的,当与几乎所有低成本单板处理器(如WiFi套件32)的非线性模拟输入结合时,会产生非线性模拟输入,从而产生不准确的温度读数。通过使用Steinhart-Hart等公式以及仔细校准,可以通过生成非常接近的实际温度来获得使用NTC温度探头和低成本单板处理器的高精度温度读数。
所以回到Steinhart-Hart方程式。该等式利用三个系数A,B和C来确定温度作为热敏电阻器的函数。这三个系数来自哪里?一些制造商使用NTC温度探头提供这些系数,而其他制造商则没有。此外,制造商提供的系数可能是也可能不是您可能购买的精确温度探头,并且很可能是代表他们在一段时间内制造的所有温度探头的大样本的系数。最后,我根本找不到本设计中使用的探针的系数。
没有所需的系数,我创建了Steinhart-Hart Spreadsheet,这是一个基于电子表格的计算器,可帮助生成NTC温度探测所需的系数(我丢失了链接到我多年前使用的类似网络计算器,所以我创造了这个)。为了确定温度探头的系数,我首先用数字欧姆表测量分压器中使用的33k电阻的值,然后将值输入标有“电阻器”的电子表格的黄色区域。接下来,我将温度探头放在三个环境中;第一个室温,第二个冰水和第三个沸水,以及一个已知的精确数字温度计,并允许温度计上的温度和WiFi套件32显示屏上出现的热敏电阻输入计数(稍后将详细介绍)稳定下来。当温度和热敏电阻输入计数稳定后,我将已知准确温度计指示的温度和WiFi套件32显示屏上显示的热敏电阻计数输入电子表格的黄色区域,标记为“温度计的度数F”和“AD分别来自三个环境中的WiFi套件32“。输入所有测量值后,电子表格的绿色区域将提供Steinhart-Hart方程所需的A,B和C系数,然后将其复制并粘贴到源代码中。
如前所述Steinhart-Hart方程的输出以开氏度为单位,此设计显示华氏度。从开尔文度到华氏度的转换如下:
首先,通过从Steinhart-Hart方程中减去273.15(开氏度)来将开尔文度转换为摄氏度:
度C =(A +(B *(log(热敏电阻)))+(C * log(热敏电阻)* log(热敏电阻)* log(热敏电阻))) - 273.15
第二,将摄氏度转换为华氏度,如下所示:
度数F =((度C * 9)/5)+ 32.
随着Steinhart-Hart方程和系数完成后,需要第二个方程来读取电阻分压器输出。本设计中使用的电阻分压器型号为:
vRef 《---热敏电阻《--- vOut 《---电阻《---接地
其中:
此设计中的vRef为3.3vdc。
热敏电阻是用于电阻分压器的NTC温度探头。
vOut是电阻分压器的电压输出。
电阻是电阻分压器中使用的33k电阻。
接地是好的。
v本设计中的电阻分压器连接到WiFi套件32模拟输入A0(引脚36),并且电阻分压器的电压输出计算如下:
vOut = vRef *电阻/(电阻+热敏电阻)
然而,正如Steinhart-Hart方程式中,热敏电阻的电阻值是为了获得温度所必需的,而不是电阻分压器的电压输出。因此,重新排列等式以输出热敏电阻值需要使用如下的小代数:
将两侧乘以“(电阻+热敏电阻)”,结果为:
vOut *(电阻+热敏电阻)= vRef *电阻
将两侧除以“vOut”,结果为:
电阻+热敏电阻=(vRef *电阻) )/vOut
从两侧减去“电阻”导致:
热敏电阻=(vRef *电阻/电压) - 电阻
最后,使用分配属性,简化:
热敏电阻=电阻*((vRef/vOut) - 1)
代入WiFi套件32 A0模拟输入计数为0通过4095表示vOut,并用4096的值代替vRef,提供Steinhart-Hart方程所需的热敏电阻电阻值的电阻分压器公式变为:
热敏电阻=电阻*((4096/模拟输入计数) - 1)
因此,在数学背后,让我们组装一些电子设备。
第2步:组装电子设备。
五条4英寸28awg电线(一条红色,一条黑色,一条黄色和两条绿色)。
One,Maverick“ET-72温度探头”探头
一个33k欧姆1%1/8瓦电阻器。
一个,压电蜂鸣器。如果选择一个不同的压电蜂鸣器确保它符合这个规格(方波驱动,《= ESP32的当前输出)。
为了组装其他组件,我执行了以下步骤:
完成所有布线后,我仔细检查了我的工作。
剥离并镀锡每个4“线长的末端,如图所示。
将黄线的一端和33k欧姆电阻的一端焊接到手机连接器的“Tip”引脚。
将黑线的一端焊接到33k欧姆电阻的自由端,并修掉多余的电阻线。
在导线和电阻上施加热缩管。
将红线的一端焊接到手机连接器上的“套管”引脚。
将黄色线的自由端焊接到WiFi套件32上的引脚36.
将黑线的自由端焊接到WiFi套件32上的GND引脚。
将红线的自由端焊接到WiFi套件32上的3V3引脚。
将一根绿线焊接到压电蜂鸣器的一根引线上。
将剩余的绿线焊接到压电蜂鸣器的剩余导线上
将其中一根绿色压电线的自由端焊接到WiFi套件32上的针脚32上。
将剩余的绿色压电线的自由端焊接到WiFi套件32上的GND引脚。
将温度探头插入电话连接器。
步骤3:安装软件。
文件“AnalogInput.ino”是一个包含设计软件的Arduino环境文件。除此文件外,您还需要WiFi Kit32 OLED显示屏的“U8g2lib”图形库(有关此库的更多信息,请参阅https://github.com/olikraus/u8g2/wiki)。
在Arduino目录中安装U8g2lib图形库,并将“AnalogInput.ino”加载到Arduino环境中,编译并将软件下载到WiFi套件32中。一旦下载并运行,将在WiFi上显示OLED显示屏的顶线套件32应显示“温度”,当前温度以大文本显示在显示屏中央。
触摸中央按钮(T5)显示“设置报警温度”显示。按照简介中的说明,按左按钮(T4)或右按钮(T6)调节报警温度。要测试警报,请将警报温度调整为等于或低于当前温度,并且应发出警报。完成设置报警温度后,触摸中心按钮返回温度显示。
软件中的值dProbeA,dProbeB,dProbeC和dResistor是我在探头校准过程中确定的值。这种设计应该产生精确到几度的温度读数。如果不是,或者如果需要更高的精度,则接下来进行校准。
步骤4:校准NTP温度探测器。
校准温度探头需要以下项目:
一个数字欧姆表。
一种已知的精确数字温度计,能够在0到250华氏度之间。
一杯冰水。
一壶开水(非常非常小心!)。
首先获得实际的33k电阻值:
断开WiFi Kit 32板的电源。
从手机连接器上取下温度探头(根据您的数字欧姆表,也可能需要从WiFi套件32中去除黑线。)
打开Steinhart-Hart电子表格。
使用数字欧姆表测量33k欧姆电阻的值,并将其输入电子表格中的黄色“电阻”框,并输入软件中的变量“dResistor”。虽然这看起来似乎过多,但是33k欧姆的1%电阻确实会影响温度显示的准确性。
将温度探头插入手机连接器。
接下来获取Steinhart-Hart系数:
打开已知的准确度数字温度计。
将USB电源插入WiFi套件32.
同时按住左(T4)和右(T6)按钮,直到出现“Thermistor Counts”显示。
允许数字温度计和热敏电阻计数显示稳定。
在“房间”行的黄色“温度计的度数F”和“ESP32的AD计数”列中输入温度和热敏电阻计数。
将数字温度计和热敏电阻探头插入冰水中,使两个显示器都稳定下来。
在“冷水”行中输入黄色的“温度计的度数F”和“ESP32的AD计数”列中的温度和热敏电阻计数。
将数字温度计和热敏电阻探头插入沸水中,使两个显示器都稳定下来。
在“沸水”行中输入黄色的“温度计的度数F”和“ESP32的AD计数”列中的温度和热敏电阻计数。
将绿色“A:”系数复制到源代码中的变量“dProbeA”中。
将绿色“B:”系数复制到源代码中的变量“dProbeB”中。
将绿色“C:”系数复制到源代码中的变量“dProbeC”。
编译并将软件下载到WiFi Kit 32中。
步骤5:3D打印案例和最终装配。
我打印了“Case,Top.stl”和“Case,Bottom.stl” .1mm层高,50%填充,没有支撑。
打开外壳后,我按如下方式组装了电子元件和外壳:
我从中拆除了电线三个孔塞,将孔塞压入“Case,Top.stl”中的位置,然后将导线重新焊接到孔塞上,小心地注意左(T4),中心(T5)和右(T6)导线和各个按钮。
使用附带的螺母将手机连接器固定到“Case,Bottom.stl”中的圆孔。
将压电蜂鸣器放在手机连接器旁边的机壳底部组件中,并用双面胶带固定到位。
将WiFi套件32滑入机箱底部组件的位置,确保WiFi套件32上的USB端口与机箱底部的椭圆形孔对齐(请勿按压OLED显示屏以定位在底部组件的WiFi套件32,相信我这一个,只是不要这样做!)。
将表壳顶部组件压在表壳底部组件上,并使用角落处的小点浓氰基丙烯酸酯胶固定到位。
步骤6:关于本软件。
文件“AnalogInput.ino”是对我以前的Instructable“https://”文件“Buttons.ino”的修改。 www.instructables.com/id/ESP32-Capacitive-Touch-Buttons/”。我修改了原来的三个代码段“setup()”,“loop()”和“InterruptService()”以包含探测和报警的软件,并且我添加了另外三个代码段“Analog()” ,“按钮()”和“显示()”清理“循环()”并添加必要的探针和报警软件。
“模拟()”包含读取所需的代码热敏电阻计入一个数组,平均计数数组,使用分压器生成热敏电阻值,最后使用Steinhart-Hart方程和温度转换方程生成华氏度。
“按钮() “包含处理按钮和编辑报警温度所需的代码。
”Display()“包含在OLED显示屏上显示信息所需的代码。
如果您对此代码或此Instructable的任何其他方面有任何疑问或意见,请随时提出,我会尽力回答。
我希望您喜欢它(和仍然清醒)!
第7步:“即将进行的项目”。
即将推出的项目“Intelligrill®Pro”是双温度探头吸烟器监测器,具有以下特点:
Steinhart-Hart温度探头计算(与“查找”表相对),以提高此Instructable中的精度。
探针1的预测完成时间,包括Steinhart-Hart计算得出的提高的准确度。
第二个探头,探头2,用于监测吸烟者的温度(限制在32到399度之间)。
电容式触摸输入控件(与之前的Instructable相同)。
基于WIFI的远程监控(使用固定的IP地址,可以在任何可以连接互联网的地方监控吸烟者的进度)。
扩展温度范围(32至399度)。
在Intelligrill®发射器和大多数支持WiFi的监控设备上发出声音完成警报。
温度显示为°F或°C。
时间格式为HH:MM:SS或HH:MM。电池显示为伏特或%充电。
基于螺旋钻的吸烟者的PID输出。
“Intelligrill®Pro”仍在测试,以成为最准确,功能最强大,最可靠的基于HTML的Intelligrill®我有设计的。它仍然在测试中,但是在测试过程中它正在协助准备,我已经获得了超过几磅。
-
温度计
+关注
关注
6文章
404浏览量
78470
发布评论请先 登录
相关推荐
评论