thermal
11、热敏检测示例 示例功能:该热敏检测模块同时提供了数字和模拟接口,通过电位器可以调整热敏检测的灵敏度。在输出模拟值(在一定的范围内变化)的时候,温度越高,模拟值越小。该传感器集成了B值为3950的10K热敏电阻。 以下示例将使用串口同时输出热敏传感器检测的到的模拟值换算成实际温度。

板载一个电位器用于调整检测灵敏度。当温度到达设定阈值,指示灯亮。低于设定阈值,指示灯灭。 数字引脚输出热敏状态,电位器调节检测灵敏度,当温度过热,输出数字0,同时指示灯亮。温度低于阈值,数值数字1,指示灯灭。 硬件连接:热敏模块模拟引脚A——GPIO5 热敏模块数字引脚D——GPIO4

#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方程计算温度
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: %d\n", adcValue, t_celsius, digitalState);
delay(1000);
}