5.1 - Temperaturmessung mit einem 10kΩ NTC Wiederstand

 

ntcintro 5.1
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. 
 
 
 
 

Teileliste

 
 

 Die Wiederstandsänderung des Thermistors, sieht je nach Typ in etwa so aus.

10ko ntc kurve

 
 

Da sich der NTC Widerstand nicht linear verhält, müssen wir zur Temperaturberechnung die Steinhart-Hart-Gleichung verwenden.

Steinhart Hart Gleichung
 

 
 

Anschlussplan

 
Anschlussplan 5.1     Schaltplan 5.1
 
 
 
 

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.
 
 
Das war es auch schon  fertig
 
 
 
 
downloadbutton arduino
 
 
 
 
 

Seitennavigation
 
                            arrow button up               arrow button next

Einen Kommentar verfassen

Als Gast kommentieren

0
  • Keine Kommentare gefunden