5.1 - Temperaturmessung mit einem 10kΩ NTC Wiederstand


NTC Widerstände, auch Thermistor genannt, ändern je nach Temperatur ihren Widerstandswert. Diese Änderung können wir nutzen um an einem Analogen Eingang des Arduinos die Spannung zu messen. Der Arduino wandelt die anliegende analoge Spannung von 0V - 5V in einen digitalen Wert zwischen 0 - 1023 um, mit dem wir dann arbeiten können. 10kΩ NTCs werden üblicherweise im Luft- und Wasserkühlunsbereich eingesetzt, allerdings sitzen sie hier in Metallgehäusen.
Der Vorteil von Thermistoren sind ihr niedriger Preis und die Genauigkeit reicht für normale Belange aus.
Der Vorteil von Thermistoren sind ihr niedriger Preis und die Genauigkeit reicht für normale Belange aus.
Teileliste
-
Arduino IDE (Tutorial wurde mit 1.6 erstellt)
-
Arduino Uno (oder ein anderes Modell)
- alternativ Wakü Tempsensor (das sind auch nur 10kΩ NTC-Wiederstände in einem Metallgehäuse)
Die Wiederstandsänderung des Thermistors, sieht je nach Typ in etwa so aus.
Da sich der NTC Widerstand nicht linear verhält, müssen wir zur Temperaturberechnung die Steinhart-Hart-Gleichung verwenden.

Anschlussplan
Code
// Konstanten const long interval = 1000; // Interval wie oft die Temperatur abgefragt wird (milliseunden) const int abfrageZahl = 5; // Je mehr abfragen, desto stabiler isr das Ergebnis, dauert aber länger const int ntc = A0; // Pin für den 10kO NTC Wiederstand const int ntcNominal = 10000; // Wiederstand des NTC bei Nominaltemperatur const int tempNominal = 25; // Temperatur bei der der NTC den angegebenen Wiederstand hat const int bCoefficient = 3977; // Beta Coefficient(B25 aus Datenblatt des NTC) const int serienWiederstand = 10000; // Wert des Wiederstands der mit dem NTC in Serie geschalten ist // Variablen int abfrage[abfrageZahl]; // Array Variable für das Mitteln der Temperatur float durchschnitt = 0; // Variable für das Mitteln der Temperatur float temp; // Variable für die Berechnung der temperatur nach Steinhart unsigned long letzteMillis = 0; // Speichert die letzte Zeit (millis) der Temperaturabfrage void setup() { Serial.begin(9600); // Setzt die Baudrate für die Ausgabe am Serial Monitor auf 9600 pinMode(ntc, INPUT); // Setzt den Pin des NTC Wiederstands als Eingang } void loop() { // Erfasst die aktuelle Zeit für den Abfrageinterval unsigned long aktuelleMillis = millis(); // Löst bei erreichen der Intervalzeit die Temperaturberechnung aus if(aktuelleMillis - letzteMillis >= interval) { // speichert die Zeit der letzten Abfrage letzteMillis = aktuelleMillis; // Startet die Temperaturerfassungsroutine temperaturberechnung(); } // Ausgabe an den Seriellen Monitor Serial.print("Temperatur "); Serial.print(temp); Serial.println(" *C"); } void temperaturberechnung() { // Nimmt N Abfragen in einer Reihe, mit einem kurzen delay for (int i=0; i < abfrageZahl; i++) { abfrage[i] = analogRead(ntc); delay(10); } // Mittelt alle Abfragen durchschnitt = 0; for (int i=0; i < abfrageZahl; i++) { durchschnitt += abfrage[i]; } durchschnitt /= abfrageZahl; // Umwandlung des Wertes in Wiederstand durchschnitt = 1023 / durchschnitt - 1; durchschnitt = serienWiederstand / durchschnitt; // Umrechnung aller Ergebnisse in die Temperatur mittels einer Steinhard Berechnung temp = durchschnitt / ntcNominal; // (R/Ro) temp = log(temp); // ln(R/Ro) temp /= bCoefficient; // 1/B * ln(R/Ro) temp += 1.0 / (tempNominal + 273.15); // + (1/To) temp = 1.0 / temp; // Invertieren temp -= 273.15; // Umwandeln in °C }
Fangen wir mit den Konstanten an. Hier haben wir diesmal ein paar für die Berechnung wichtige Werte, die ich jetzt erläutere.
- ntcNominal = 10000 - Damit ist der Widerstand des NTC bei Nominaltemperatur gemeint. Dieser Wert wird immer im Namen schon angegeben. Ein 10kΩ NTC hat einen Widerstand von 10000Ω.
- tempNominal = 25 - Das ist die Nominaltemperatur. Diese ist im Normalfall 25°.
- bCoefficient = 3977 - Der Beta Coefficient ist eine Materialkonstante und ist im Datenblatt des NTC zu finden und wird mit B25 bezeichnet.
- serienWiederstand = 10000 - Das ist der Wert in Ohm, des Widerstand, der zusammen mit dem NTC Widerstand verbaut wird. In unserem Fall auch ein 10kΩ Widerstand.
- abfrageZahl = 5
- abfrage[abfrageZahl]
abfrageZahl und abfrage hängen zusammen und bestimmen mit wie vielen Messwerten des NTC gemittelt wird. Je höher der Wert, desto weniger sprunghaft ist der Temperaturwert, allerdings dauert die Erfassung auch länger.
Der Code startet mit der Abfrage ob die im interval festgelegte Zeit (im Beispiel 1000 Millisekunden) erreicht ist. Wenn ja, startet die temberaturberechnung.
Hier wird als erstes der NTC so oft ausgelesen und dessen Werte gespeichert wie mit abfrageZahl festelegt ist.
Als nächstes werden die Werte zusammengezählt und durch abfrageZahl geteilt um den durchschnitt zu bilden.
Jetzt wird der durchschnitt in einen Widerstandswert umgerechnet. Ist das erledigt, wird die Temperatur mittels der Steinhart Formel berechnet.
Zurück im loop wird die Berechnete Temperatur in °C im Seriellen Monitor ausgegeben.
Der Code startet mit der Abfrage ob die im interval festgelegte Zeit (im Beispiel 1000 Millisekunden) erreicht ist. Wenn ja, startet die temberaturberechnung.
Hier wird als erstes der NTC so oft ausgelesen und dessen Werte gespeichert wie mit abfrageZahl festelegt ist.
Als nächstes werden die Werte zusammengezählt und durch abfrageZahl geteilt um den durchschnitt zu bilden.
Jetzt wird der durchschnitt in einen Widerstandswert umgerechnet. Ist das erledigt, wird die Temperatur mittels der Steinhart Formel berechnet.
Zurück im loop wird die Berechnete Temperatur in °C im Seriellen Monitor ausgegeben.
Das war es auch schon 

Einen Kommentar verfassen
Einloggen um Kommentare zu verfassen
Als Gast kommentieren