Temperaturen mittels Thermistor und seriellen Plotter der Arduino IDE als Graph darstellen

Thermistoren sind einfache, preiswerte und genaue Komponenten, die es ermöglichen, Temperaturdaten zu messen. Entfernte Wetterstationen, Hausautomationssysteme, Steuer- und Schutzschaltungen für Geräte sind einige Anwendungen, bei denen Thermistoren verwendet werden. Sie sind analoge Sensoren, daher ist der Code relativ einfach im Vergleich zu digitalen Temperatursensoren, die spezielle Bibliotheken benötigen.

Wie funktioniert ein Thermistor?

Thermistoren sind variable Widerstände, die ihren Widerstand mit der Temperatur verändern. Sie werden nach der Art und Weise klassifiziert, wie ihr Widerstand auf Temperaturschwankungen reagiert. Bei Thermistoren mit negativem Temperaturkoeffizienten (NTC) nimmt der Widerstand mit steigender Temperatur ab. Bei Thermistoren mit positivem Temperaturkoeffizienten (PTC) steigt der Widerstand mit steigender Temperatur.

NTC-Thermistoren bestehen aus einem halbleitenden Material (z.B. Metalloxid oder Keramik), das erhitzt und zu einem temperaturempfindlichen leitenden Material verdichtet wurde.

Das leitende Material enthält Ladungsträger, die den Strom durchfließen lassen. Bei hohen Temperaturen setzt das Halbleitermaterial mehr Ladungsträger frei. In NTC-Thermistoren aus Eisenoxid sind Elektronen die Ladungsträger. Bei Nickeloxid-NTC-Thermistoren sind die Ladungsträger Elektronenlöcher.

Die Berechnungsgrundlagen:

Da der Thermistor ein variabler Widerstand ist, müssen wir den Widerstand messen, bevor wir die Temperatur berechnen können. Der Arduino kann jedoch nicht direkt den Widerstand messen, sondern nur die Spannung.

Der ADC des Arduinos misst die Spannung an einem Punkt zwischen dem Thermistor und einem bekannten Widerstand. Dies wird als Spannungsteiler bezeichnet. Die Gleichung für einen Spannungsteiler lautet:

V_{out}=V_{in}*(\frac{R_2}{R_1+R_2})

Bezogen auf den Spannungsteiler in einem Thermistorkreis sind die Variablen in der obigen Gleichung:

  • V_{out}: Spannung zwischen dem Thermistor und dem bekannten Widerstand bezogen auf GND
  • V_{in}: V_{cc} die Versorgungsspannung z.B. 5 V
  • R_1:  Bekannter Widerstandswert
  • R_2: Widerstand des Thermistors

Diese Gleichung kann umgestellt und vereinfacht werden, um für R_2 den Widerstand des Thermistors zu lösen:

R_2=R_1*(\frac{V_{in}}{V_{out}}-1)

Schließlich wird die Steinhart-Hart-Gleichung verwendet, um den Widerstand des Thermistors in eine Temperaturmessung umzurechnen.

Aufbau der Schaltung:

Bei dem hier verwendeten Thermistor handelt es sich um das KY-013 Modul, bei welchem der Spannungsteiler-Widerstand von 10 kΩ bereits integriert ist.

Schließen Sie den Thermistor und den Widerstand so an dem Arduino an:

Der Widerstand des Thermistors ist dem Datenblatt zu entnehmen oder kann mit einem Multimeter gemessen werden.

Code für die serielle Monitorausgabe der Temperaturwerte

Nachdem die obige Schaltung aufgebaut ist, laden Sie diesen Code auf Ihren Arduino, um die Temperaturwerte auf den seriellen Monitor in °C auszugeben:

#include <math.h>
 
const int sensorPin = A0;                              // Analoger Eingangspin, an welchem der Thermistor angeschlossen ist
const float ThermistorResistance = 10000;              // Thermistor Widerstand bei Raumtemperatur
const float NominalTemperature = 25;                   // Raumtemperatur
const float BCoefficient = 3950;                       // Beta-Wert des thermistors (aus dem Datenblatt)
const float Vsupply = 4.402;                           // Versorgungspannung des Spannungsteilers (Mit dem Multimeter messen)
const float Vref = 4.402;                              // Analogue Referenzspannung (Mit dem Multimeter messen)
const float Rtop = 10000;                              // Widerstand R1 des Spannungsteilers
  
float MeasureTemperature()
{
  int nRawThermistor = analogRead(sensorPin);         // Messwert aufnehmen 

  float Vout = (float)nRawThermistor * Vref/1023.0;   // Berechnung der Ausgangsspannung in Abhängigkeit von der Temperatur
  
  float Temp = Vout/Vsupply;                          // Berechnung des Thermisterwiderstands 
  float Rtherm = Rtop*Temp/(1-Temp);

                                                      // Umrechnung des Widerstandes des Thermistors in Temperatur über die Steinhart Gleichung
  float Temperature;                              
  Temperature = Rtherm / ThermistorResistance;         
  Temperature = log(Temperature);
  Temperature /= BCoefficient;
  Temperature += 1.0 / (NominalTemperature + 273.15);
  Temperature = 1.0 / Temperature;
  
  Temperature -= 273.15;                              // Umrechnung von Kelvin In Celsius 

  return Temperature;
}
 
void setup() {
 Serial.begin(9600);
}
 
void loop() {

 double temp =  MeasureTemperature();
 
 Serial.println(temp);  // display tempature
 
 delay(500);
}

Die Messwerte lassen sich nun sowohl über den seriellen Monitor ausgeben:

Oder als Graph über den “Seriellen Plotter” in der Arduino IDE darstellen: