ESP32S3读取NTC热敏电阻阻值计算出当前环境温度

电子说

1.4w人已加入

描述

热敏电阻模块简介

热敏电阻
热敏电阻模块对环境温度很敏感,一般用来检测周围环境的温度,采用NTC热敏电阻传感器,灵敏度好。该热敏检测模块同时提供了数字和模拟接口,数字引脚输出热敏状态,通过电位器可以调整热敏检测的阈值,当温度到达设定阈值,指示灯亮,输出数字0。低于设定阈值,指示灯灭,输出数字1。在输出模拟值(在一定的范围内变化)的时候,温度越高,模拟值越小。该传感器集成了B值为3950的10K热敏电阻。
热敏电阻
NTC特性:负温度系数热敏电阻(NTC)阻值随温度升高而降低,其阻值-温度关系由B值公式描述:
热敏电阻
分压电路:模块通过热敏电阻与参考电阻(10KΩ)组成分压电路,输出电压与温度成反比。
其中 R0为参考温度 T0(单位:开尔文)下的阻值,B值为材料常数。

ESP32开发板与热敏电阻模块接线

热敏电阻
连接说明:

热敏电阻模块ESP32S3开发板
GNDGND
VCC3V3
DOGPIO4
AOGPIO5

Arduino测试程序

以下示例将使用串口同时输出热敏传感器检测到的模拟值换算成实际温度和数字引脚输出的热敏状态。

#define THERMISTOR_PIN 5   // NTC热敏电阻连接的模拟引脚
#define DIGITAL_PIN    4   // 比较器输出连接的数字引脚
 
#define R_REF     10000.0  // 分压电阻10KΩ
#define R0        10000.0  // NTC在25°C时的阻值
#define B_VALUE   3950.0   // B参数
#define T0        298.15   // 25°C的Kelvin温度
 
void setup() {
  Serial.begin(115200);
  analogReadResolution(12); // 设置12位ADC(0-4095)
  pinMode(DIGITAL_PIN, INPUT); // 设置数字引脚为输入模式
}
 
void loop() {
  int adcValue = analogRead(THERMISTOR_PIN);
  float voltage = adcValue * (3.3 / 4095.0);
  
  // 计算NTC电阻(若NTC在下端)
  float r_ntc = (voltage * R_REF) / (3.3 - voltage);
  
  // 使用Steinhart-Hart方程将电阻值转换为温度,精度高于简单B值近似法。
  float t_kelvin = 1 / (log(r_ntc / R0) / B_VALUE + 1 / T0);
  float t_celsius = t_kelvin - 273.15;
  
  // 读取数字接口状态
  int digitalState = digitalRead(DIGITAL_PIN);
  
  Serial.printf("ADC: %4d | Temp: %.2f°C | Digital State: %dn", adcValue, t_celsius, digitalState);
  delay(1000);
}

热敏电阻

校准与精度提升
多点校准:在不同温度下测量实际阻值,修正B值和R0。
查表法:预存温度-ADC值对应表,减少实时计算量。

总结

通过以上实验,获知了如何通过分压测量热敏电阻的电压推算出阻值后进而计算出热敏电阻周围的温度值。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分