


NTC(温度)热敏电阻使用Arduino IDE进行模拟读取
来源:本站 更新时间:2019-01-17 16:49:25 查看次数:
在本文中,我们将向您展示使用esp8266和ntc(热敏电阻)传感器读取温度。
注意:
您需要具有ADC引脚的ESP板。只有ESP8266 - 07和ESP8266 - 12板具有ADC引脚。
我们使用:
-ESP8266 - 07
-10k NTC -150k
欧姆电阻器。
我们将使用非常简单和基本的电阻 - ntc电路。电路如图1所示。

通常,如果您在互联网上搜索,您将看到使用10k ntc和10k电阻的电路。在我们的电路上使用150k电阻。
在图2中,有一个图表说明了ntc传感器的电阻和温度。
该传感器表示NTC电阻器的高值约为18-20k,而室温为3-4k。

如果我们使用10k NTC的10k电阻,
假设:
NTC最大电阻= 18kohm
NTC最小电阻= 3k欧姆
VCC = 3.3V

这意味着您的模拟电压最高值必须为1V。因此,出于这个原因,我将使用150k电阻和最大150k电阻,最小模拟值低于。

您可以使用较低的电阻来获得更高的温度分辨率。在我的项目中,温度恢复并不是很重要。
ESP8266每伏特模拟分辨率:
1V = 1024
1/1024 = 0.00097 V分辨率。
0.3535 V / 0.00097 V = 364
0.0647 V / 0.00097 V = 66
这意味着,我们有298个不同的温度值。现在我们已经解决了硬件问题。但是使用这个解决方案,我们遇到了软件问题。您可以在互联网上找到的功能是10k ntc和10k电阻,但没有足够的解释。
首先,
我们需要找到NTC的顽固抵抗。您可以在Arduino IDE上将ESP8266 ADC引脚用作A0。
简单的模拟读取代码:
int RawData = analogRead(A0);
过滤的模拟读取代码:
int AnalogRead(){
int val = 0;
for(int i = 0; i <20; i ++){
val + = analogRead(A0);
延迟(1);
}
val = val / 20;
返回;
}
在我的项目我使用过滤模拟读码。这非常有效且更稳定。我们在NTC上读取了模拟电压。现在我们将计算NTC的不稳定阻值。
void loop(){
double Vcc = 3.3V;
unsigned int Rs = 150000;
double V_NTC =(double)AnalogRead()
double R_NTC =(Rs * V_NTC)/(Vcc-V_NTC);
Serial.println(R_NTC);
}
我们已成功完成第一步。我们计算了NTC的阻值。您可以使用万用表检查参数,但现在需要触摸ntc传感器时,ntc电阻会立即改变。
第二步是利用ntc的瞬时阻力来计算温度。
所述斯坦哈特-Hart公式是在不同温度下的半导体的电阻的模型。等式是:
-
Ť
-
是温度(以开尔文为单位) -
[R 是阻值 Ť (欧姆) -
一个 , 乙 ,和C 是Steinhart-Hart系数 ,它们根据热敏电阻的类型和型号以及感兴趣的温度范围而变化。(应用方程的最一般形式包含a(恩(R ))2 - 术语,但这经常被忽略,因为它通常比其他系数小得多,因此上面没有显示。)
A = 0.001129148
B = 0.000234125
C = 0.0000000876741
现在我们已准备好计算温度。
其中:
Rs = 150000; // 150k欧姆电阻
Vcc = 3.3;
double Thermister(int val){
double V_NTC =(double)val / 1024;
double R_NTC =(Rs * V_NTC)/(Vcc-V_NTC);
R_NTC = log(R_NTC);
double Temp = 1 /(0.001129148 +(0.000234125 +(0.0000000876741 * R_NTC * R_NTC))* R_NTC);
温度=温度 - 273.15;
返回温度; }
#include <math.h>
unsigned int Rs = 150000;
double Vcc = 3.3;
void setup(){
//将您的设置代码放在这里,运行一次:
Serial.begin(115200);
}
void loop(){
//将你的主代码放在这里,重复运行:
Serial.println(Thermister(AnalogRead()));
延迟(1000);
}
int AnalogRead(){
int val = 0;
for(int i = 0; i <20; i ++){
val + = analogRead(A0);
延迟(1);
}
val = val / 20;
返回;
}
double Thermister(int val){
double V_NTC =(double)val / 1024;
double R_NTC =(Rs * V_NTC)/(Vcc-V_NTC);
R_NTC = log(R_NTC);
double Temp = 1 /(0.001129148 +(0.000234125 +(0.0000000876741 * R_NTC * R_NTC))* R_NTC);
温度=温度 - 273.15;
返回温度;
}
注意(重要!):NTC(温度)热敏电阻使用Arduino IDE进行模拟读取,如果要使用不同的R,请确保您的实时模拟输入电压值低于1V。






