Der Widerstand $R_T$ des Sensors ist von der Temperatur abhängig. Der Widerstand wird in Reihe mit einem Hilfswiderstand $R_H=10 k\Omega$ angeschlossen.
Der Arduino misst die Spannung $U_T$ des Sensors und gibt ihn als einen Zahlenwert $X$ zwischen 0 und 1023 heraus.
Aus ${U_T \over 5} = {X \over 1023}$ folgt $U_T = {5 \over 1023} \cdot X$. Da über den analogen Port so gut wie kein Strom abfließt, gilt: $I = {U_T \over R_T} ={U_H \over R_H}$, wobei $U_H = 5 - U_T$ ist.
So erhält man den Widerstand des Sensors aus: $R_T = {U_T \over {5-U_T}}\cdot R_H$.
Die Zuordnung Widerstand zu Temperatur liest man aus dem Datenblatt heraus:
$R_T$ | 1510 | 1646 | 1790 | 1941 | 2020 |
---|---|---|---|---|---|
$T$ | -10 | 0 | 10 | 20 | 25 |
Zwischen zwei Werten wird ein linearer Verlauf angenommen.
Die Geradengleichung durch zwei Punkte stellt man mit Hilfe der Zwei-Punkte-Formel auf:
$m={ {\Delta y} \over {\Delta x}}= {{y_1 – y_0} \over {x_1-x_0}} = {{y – y_0} \over {x-x_0}}$. Es gilt also: $y = {{y_1 – y_0} \over {x_1-x_0}} \cdot{(x-x_0)} + y_0$
Liegt der berechnete Widerstand $R_T$ zwischen zwei Widerständen $R_1$ und $R_0$, so gilt für die Paare $(R_1 | T_1)$ und $(R_0 | T_0)$:
$T = {{(T_1-T_0)} \over {(R_1-R_0)}} \cdot (R_T-R_0) + T_0$
Die Gerade zwischen 20 C und 25 C lautet: $T(R)= {5 \over 79} \cdot (R-1941) + 20$
int X_T; float U_T, R_T, T_R; const int R_H = 10000; /* Zuordnung Widerstand zu Temperatur laut Datenblatt Seite 8 */ int R[] ={ 990,1040,1146,1260,1381,1510,1646,1790,1941,2020, 2100,2267,2441,2623,2812,3009,3214,3426,3643,3855, 3955,4048,4208,4323}; int T[] = {-55,-50,-40,-30,-20,-10,0,10,20,25, 30,40,50,60,70,80,90,100,110,120, 125,130,140,150}; void setup(){ Serial.begin(9600);; } void loop(){ X_T = analogRead(A0); U_T = (float(X_T)*5/1023); R_T = float(R_H)*U_T/(5-U_T); for(int i=0; i <= sizeof(R); i=i+1){ if(R_T<R[i]){ T_R = (R_T-R[i-1])*(T[i]-T[i-1])/(R[i]-R[i-1]) + T[i-1]; break; } } Serial.print(X_T); Serial.print(" Roh "); Serial.print(U_T); Serial.print(" V "); Serial.print(R_T); Serial.print(" Ohm "); Serial.print(T_R); Serial.println(" Celsius "); delay(500); }