Arduino Tutorial: Der Temperatursensor

Den Temperatursensor kann man heutzutage sowohl digital als auch analog auslesen. In diesem Arduino Tutorial wirst du einen analog auslesbaren Temperatursensor mit dem Arduino Uno verwenden um die Umgebungstemperatur zu messen. Dazu schauen wir uns den sogenannten Thermistor an.

Thermistoren sind Halbleiter- Widerstände. Ihr Widerstand hängt von der Umgebungstemperatur ab. Dabei unterscheidet man unter Heißleiter (NTC) und Kaltleiter (PTC). NTCs haben einen niedrigeren Widerstand bei hohen Temperaturen, während PTCs einen niedrigeren Widerstand bei niedrigen Temperaturen besitzen. Nach diesem Tutorial wirst du in der Lage sein, jeden NTC richtig auszulesen und deren Widerstand eine Temperatur zuzuordnen. Wir benutzen hier einen NTC mit den B-Wert 3950 Kelvin und einen Nennwiderstand von 100 KOhm bei einer Umgebungstemperatur von 25 °C. Um die Temperatur zu erhalten sind nur diese beiden Werte wichtig.

Der NTC

Wie gesagt ist der NTC ein Heißleiter und sein Widerstand sinkt, je höher die Umgebungstemperatur ist.

Viele Hersteller bieten einen Datenblatt an, wo man im bestimmten Abständen den Widerstand einer bestimmten Temperatur zuordnen kann. Man kann natürlich auch den NTC in einem gewissen Temperaturbereich kalibrieren. Aufgrund der Halbleitereigenschaften des NTCs kann man auch die Temperatur errechnen. Die Temperatur zu errechnen ist aber etwas ungenauer und stellt auch einen Rechenaufwand für den Arduino dar. Da wir aber nicht auf die Kommastelle genau sein wollen, geben wir uns mit der Formel zufrieden.

RT = Gleich der ermittelte Widerstand abhängig von der Temperatur

RN = Der Widerstand bei Nenntemperatur (hier 100kOhm)

B = der angegebene B-Wert vom Hersteller (hier 3950Kelvin)

TN = Die Nenntemperatur in Kelvin ( = 273,15 Kelvin + 25°C = 298,15Kelvin)

T = Die gemessene Temperatur ( den Wert wollen wir haben)

Wir kennen jeden Wert außer Rt. Der ist von der Temperatur abhängig und den müssen wir mit unserem Arduino messen. Aber wie kriegt man das hin?

Der Spannungsteiler

Der NTC hat bei der Nenntemperatur von 25°C einen Nennwiderstand von 100 Kiloohm.  Um nun den NTC Widerstand ermitteln zu können müssen wir deswegen den Nennwiderstand RN, also einen 100 Kiloohm Widerstand, in Reihe zu dem NTC zuschalten um einen Spannungsteiler zu erzeugen.

Die gesamte Spannung Uges teilt sich nun auf den NTC und den 100 Kiloohm- Widerstand auf. Mit der Spannungsteilerregel können wir anschließend RT berechnen.

Die Spannungsteilerregel sagt, dass in einer Reihenschaltung das Verhältnis zwischen Gesamtspannung Uges und  Gesamtwiderstand Rges genauso groß ist, wie das Verhältnis zwischen der Spannung UNTC, der an einem Widerstand (hier der NTC) abfällt und sein Widerstandswert RT. Der Gesamtwiderstand Rges ergibt sich aus den 100 Kiloohm- Widerstand, addiert mit dem Widerstandswert vom NTC- Widerstand RT. Die Spannung UNTC, die über dem NTC abfällt, kann man mit dem A0- Pin am Arduino messen.

Diese Formel kann man wieder nach RT umstellen, sodass man RT ausrechnen kann:

Der Arduino gibt über Pin A0 nicht die Spannung direkt aus. Der Arduino gibt den Bitwert der gemessenen Spannung aus. Das heißt man muss den Bitwert einer Spannung zuordnen. Der Arduino kann seine Betriebsspannung von 5V mit einer Auflösung von 10 Bit darstellen. Das heißt der Bitwert springt , sobald die Spannung um 5V/1024=4,87mV steigt. 0V entspricht also dem Bitwert 0, 4,8mV entspricht dem Bitwert 1, 9,74mV entspricht dem Bitwert 2 bis zu 5 V entspricht den Bitwert 1024. Wegen dieser zuweisung kann man auch UNTC/Uges mit BitwertNTC/1024 ersetzen. Wenn du mehr dazu erfahren möchtest, dann such im Internet mal nach dem AD- Wandler.

BitwertNTC wird am Arduinopin A0 gemessen.

Nun haben wir alles um die Temperatur zu berechnen.

 

Weiter unten findest du eine Schaltung und einen Beispielsketch mit den man alle wichtigen Werte für den NTC auf den seriellen Monitor darstellen kann.

Was benötigst du?

  • 1x Arduino
  • 1x Steckbrett
  • 1x Widerstand (100kOhm)
  • 1x NTC(Nennwiderstand100kOhm und B-Wert 3950Kelvin)
  • Jumperkabel (männlich)

Wie sieht der Schaltplan aus?

Der Code

int sensorPin = A0;
int bitwertNTC = 0;
long widerstand1=100000;                   //Ohm
int bWert =3950;                           // B- Wert vom NTC
double widerstandNTC =0;
double kelvintemp = 273.15;                // 0°Celsius in Kelvin
double Tn=kelvintemp + 25;                 //Nenntemperatur in Kelvin
double TKelvin = 0;                        //Die errechnete Isttemperatur
double T = 0;                              //Die errechnete Isttemperatur

void setup() {

  Serial.begin(9600);
}

void loop() {
     if (Serial.available()>0)             // Wenn serielle Kommunikation vorhanden
  {  
  Serial.println("Sensormessung:  ");
  bitwertNTC = analogRead(sensorPin);      // lese Analogwert an A0 aus
  widerstandNTC = widerstand1*(((double)bitwertNTC/1024)/(1-((double)bitwertNTC/1024)));

                                           // berechne den Widerstandswert vom NTC
  TKelvin = 1/((1/Tn)+((double)1/bWert)*log((double)widerstandNTC/widerstand1));

                                           // ermittle die Temperatur in Kelvin
  T=TKelvin-kelvintemp;                    // ermittle die Temperatur in °C

  Serial.println("Analog: ");              //
  Serial.println(bitwertNTC);              //
  Serial.println("NTC- Widerstand: ");     //Gebe die ermittelten Werte aus

  Serial.println(widerstandNTC);           //
  Serial.println("Temperatur: ");          //Gebe die ermittelten Werte aus
  Serial.println(T);                       //
 
delay(1000);                               // Warte eine Sekunde und mache alles nochmal
  }
}

 

 

Den Sketch kannst du auch hier herunterladen.

 

 

Code- Review

 

widerstandNTC = widerstand1*(((double)bitwertNTC/1024)/(1-((double)bitwertNTC/1024)));

 

Hier wird der NTC- Widerstandswert ermittelt. Diese Zeile entspricht folgender Gleichung von oben.

TKelvin = 1/((1/Tn)+((double)1/bWert)*log((double)widerstandNTC/widerstand1));

 

Hier wird die Temperatur in Kelvin berechnet. Diese Zeile entspricht dieser Formel:

Nun bist du in der Lage mit NTCs die Temperatur zu ermitteln!

Kommentar schreiben

Kommentare: 3
  • #1

    p-boy (Freitag, 10 August 2018 19:34)

    Hi

    Ein NTC ist ein HEISS-Leiter, da bei steigender Temperatur der Widerstandswert sinkt.
    Je heißer, desto niedriger der Widerstand.

    https://de.wikipedia.org/wiki/Hei%C3%9Fleiter
    (auf Wikipedia nach 'Heißleiter' suchen und NTC auswählen)

    Ein jedes Metall ist ein PTC (oder KALT-Leiter) - je wärmer ein Metall wird, desto stärker 'zittern' darin die Atome umher und prallen immer wieder mit den freien Elektronen zusammen, Die für den Stromfluß zuständig sind.
    Je wärmer, desto mehr stören die Atome den Stromfluß - unterm Strich steigt also der elektrische Widerstand.

    Sonst haben mir bis jetzt die Tutorials sehr gut gefallen, angenehm und verständlich geschrieben.
    Aber hier kam ich einfach nicht drüber ;)

    Danke für's Einstellen!

  • #2

    Thomas (Dienstag, 21 August 2018 15:21)

    Hallo p-boy,
    danke für deinen Kommentar. Da habe ich wohl einen kleinen aber erheblichen Fehler gemacht. War wohl zu schnell beim posten. Ich hoffe, dass dieser Fehler jetzt behoben ist.
    Danke nochmal. ;)

    Gruß,

    Thomas

  • #3

    Johnboy (Montag, 22 Oktober 2018)

    Hallo, nach einiger Sucherei mein Hinweis:

    Widerstand 1 und Widerstand NTC bei 25°C sollten annäherend gleich sein!!

    Danke für Deine Tutorials!

    Gruß,

    Johnboy