前提概要
前次使用 使用熱敏電阻量測溫度 - 查表法... 測量熱敏電阻溫度,這次使用同樣的熱敏電阻及電路,使用 Steinhart–Hart equation (斯坦哈特-哈特公式) 計算熱敏電阻所得到的溫度。
Steinhart–Hart 是兩個人 ,John S. Steinhart 及 Stanley R. Hart。他們利用 NTC 測量海洋溫度時所提出的公式。等式為
1/T = A+Bln R+ C(ln R)^3
T 是溫度 ,單位是 kelvin
R 是電阻值
A,B,C 常數
要利用這個推導公式最少需要 3 組已知的電阻值,這在後面會提到。
詳細內容可參考 wiki (https://en.wikipedia.org/wiki/Steinhart-Hart_equation)
另位,會使用一個溫度單位 kelvin 。它是一種溫度的國際單位,表示符號為 K 。有些量測溫度功能的晶片也會使用這個國際單位。
詳細內容可參考 wiki (https://en.wikipedia.org/wiki/Kelvin)
同樣我們要拿出廠家提供的表格,找3個電阻值
RT0 : 常溫 25 度時的電阻值。
RT1 : 0 度時的電阻值。
RT2 : 105度時的電阻值。
所以,這次量測範圍是 0 ~ 105 度間。
同樣我們需要相對應的 K 值
T0 = 298.15 : 常溫 25度時的 Kelvin 值
T1 = 273.15 : 0度時的 Kelvin 值
T2 = 378.15 : 105度時的 Kelvin 值
這個可以利用 線上計算器 (https://www.rapidtables.com/convert/temperature/celsius-to-kelvin.html)
電路圖
一樣和使用查表法的電路相同
程式碼
#define THSourceVoltage 5.0
#define THRES 7500
#define RT0 10000 // 常溫 25度時的 NTC 電阻值
#define RT1 35563 // 0度時的 NTC 電阻值
#define RT2 596 // 105度時的 NTC 電阻值
#define T0 298.15 // 常溫 25度時的 Kelvin 值
#define T1 273.15 // 0度時的 Kelvin 值
#define T2 378.15 // 105度時的 Kelvin 值
const int analogPin = A0;
int value;
float VoltageOut;
float ROut;
float beta;
float Rx;
float KelvinValue;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
beta = (log(RT1/RT2))/((1/T1)-(1/T2));
Rx = RT0 * exp(-beta/T0);
}
void loop() {
// put your main code here, to run repeatedly:
value = analogRead(analogPin);
Serial.print("NTC Temp: ");
VoltageOut = (THSourceVoltage * value)/1023;
ROut = THRES * VoltageOut/ (THSourceVoltage - VoltageOut); //目前 NTC 電阻值
KelvinValue=(beta/log(ROut/Rx));
Serial.println(KelvinValue - 273.15); //Kelvin 轉 溫度C
Serial.println("");
delay(1000);
}
同樣,我用手指緊捏 NTC 的 顯示結果
結果和查表法一樣是 35 度,這個方式更接近物理特性。後面再用軟體過濾器,數值就會更穩定及精確。
原始碼連結
https://github.com/cold63/Arduino_Code/tree/main/NTCTemp_modfunc相關參考
使用熱敏電阻量測溫度-查表法
https://www.makdev.net/2021/11/arduino-analogread-lookup-table.html
analogRead 基礎
https://www.makdev.net/2020/12/arduino-analogread.html
Voltage Divider Calculator 電阻分壓計算
https://www.makdev.net/p/voltage-divider-calculator.html
0 comments:
發佈留言