NTC-temperatuursensor uitlezen met een Arduino

FunduinoLaatst bijgewerkt op

Temperatur mit einem Thermistor messen – mit einem Sensor und mit mehreren

Ein NTC-Temperatursensor, auch Thermistor genannt, ist einer der günstigsten Wege, mit dem Arduino eine Temperatur zu messen – er ist nämlich nichts weiter als ein Widerstand, dessen Wert sich mit der Temperatur ändert.

In dieser Anleitung baust du den Sensor mit einem Vorwiderstand zu einem Spannungsteiler auf, liest ihn über einen analogen Eingang aus und lässt eine Bibliothek die Umrechnung in Grad Celsius übernehmen. Zum Schluss erweiterst du den Aufbau um einen zweiten Sensor.

Schaltplan: NTC-Sensor mit Vorwiderstand am Arduino UNO
NTC-Sensor und 10-kOhm-Vorwiderstand bilden einen Spannungsteiler an A0

Was ein NTC-Thermistor ist

Ein Thermistor ist ein Widerstandsthermometer – ein Widerstand, dessen Wert von der Temperatur abhängt. Der Begriff setzt sich aus „thermisch“ und „Resistor“ zusammen. Er besteht aus Metalloxiden, die mit Kunststoff, Epoxid oder Glas als Schutzschicht ummantelt sind.

Technisch gibt es zwei Arten:

  • NTC (negativer Temperaturkoeffizient): Der Widerstand nimmt ab, wenn die Temperatur steigt – und zu, wenn sie sinkt.
  • PTC (positiver Temperaturkoeffizient): genau umgekehrt. Diese Version wird nur selten verwendet.

Thermistoren sind einfach zu verwenden und stecken deshalb in vielen Geräten des täglichen Bedarfs, zum Beispiel in 3D-Druckern oder Robotern. Durch ihren einfachen Aufbau sind sie günstig und langlebig. Im Vergleich zu teuren Temperatursensoren sind sie allerdings anfälliger für Messabweichungen, wenn die Versorgungsspannung nicht stabil ist.

Die Widerstandsänderung verläuft bei Thermistoren nicht linear. Für die Umrechnung in eine Temperatur braucht es deshalb eine aufwändige Formel, die Steinhart-Hart-Gleichung. In dieser Anleitung verzichten wir im Sinne einer didaktischen Reduktion darauf, sie selbst zu programmieren, und greifen auf eine Bibliothek zurück, die den Wert im Hintergrund berechnet.

Wasserfester NTC-Temperatursensor mit Metallhülse und Zuleitung
Der wasserfeste NTC-Temperatursensor mit 1 m Zuleitung

Diese technischen Daten brauchst du

Thermistoren gibt es in verschiedenen Bauformen und Typen, deshalb werden sie immer mit technischen Angaben geliefert. Ohne diese Angaben lässt sich aus dem Messwert keine richtige Temperatur ableiten. Du brauchst:

  • den Widerstandswert bei 25 °C – danach werden Thermistoren kategorisiert
  • die maximale und minimale Messtemperatur
  • den notwendigen Vorwiderstand
  • den B-Wert aus dem Datenblatt des Sensors

Der Sensor aus dieser Anleitung hat diese Daten:

  • Messbereich: −20 °C bis 105 °C
  • Widerstand bei 25 °C: 10 kOhm
  • B-Wert: B3950

Schaltung aufbauen

Der NTC-Sensor wird mit dem Vorwiderstand in Reihe geschaltet. Beide zusammen bilden einen Spannungsteiler, dessen Mittelpunkt du am analogen Eingang A0 ausliest. Für einen 10-kOhm-NTC nimmst du einen 10-kOhm-Widerstand.

Schaltplan: NTC-Sensor mit Vorwiderstand am Arduino UNO
NTC-Sensor und 10-kOhm-Vorwiderstand bilden einen Spannungsteiler an A0

Bibliothek einbinden

Suche in der Bibliotheksverwaltung der Arduino IDE nach NTC_Thermistor und installiere die Bibliothek. Sie übernimmt die Umrechnung vom Widerstandswert in die Temperatur.

Die Sketche in dieser Anleitung sind mit der Bibliothek „NTC_Thermistor“ in der Version 2.0.3 von Yurii Salimov entstanden.

Bibliotheksverwaltung der Arduino IDE mit der Bibliothek NTC_Thermistor
Die Bibliothek NTC_Thermistor in der Bibliotheksverwaltung

Temperatur auslesen

Im Sketch trägst du oben die vier Kennwerte deines Sensors ein: Referenzwiderstand, Nominalwiderstand, Nominaltemperatur und B-Wert. Danach genügt ein Aufruf von readCelsius(), um die Temperatur zu bekommen.

Öffne nach dem Hochladen den seriellen Monitor bei 9600 Baud. Dort erscheint jede Sekunde ein Temperaturwert.

Temperatur eines NTC-Sensors auslesen
#include <Thermistor.h>
#include <NTC_Thermistor.h>

int Sensor_Pin = A0;

#define Referenzwiderstand  10000  // Widerstandswert des Widerstands, der mit dem NTC in Reihe geschaltet wurde
#define Nominalwiderstand   10000  // Widerstand des NTC bei Normaltemperatur
#define Nominaltemperatur      25  // Temperatur, bei der der NTC den angegebenen Widerstand hat
#define BWert                3950  // Beta-Koeffizient (zu finden im Datenblatt des NTC)

Thermistor* thermistor;

void setup()
{
  Serial.begin(9600);
  // Nun wird der Sensor mit den spezifischen Daten initialisiert.
  thermistor = new NTC_Thermistor(Sensor_Pin, Referenzwiderstand, Nominalwiderstand, Nominaltemperatur, BWert);
}

void loop()
{
  const double celsius = thermistor->readCelsius();  // Temperatur auslesen

  Serial.print("Temperatur: ");  // Ausgabe am seriellen Monitor - hier nur der Text
  Serial.print(celsius);         // Hier wird der Temperaturwert gesendet
  Serial.println(" °C");         // Dahinter erscheint noch die Einheit

  delay(1000);  // Eine Sekunde Pause: ein Temperaturwert pro Sekunde
}

Mehrere Sensoren gleichzeitig verwenden

Nach demselben Anschlussschema kannst du weitere Sensoren gleichzeitig betreiben. Jeder Sensor braucht dabei seinen eigenen Vorwiderstand.

Im folgenden Beispiel hängt ein zweiter Sensor am analogen Pin A1. Zusätzlich misst eine Schleife 1000-mal hintereinander und addiert die Werte auf. Anschließend wird durch 1000 geteilt – das ergibt einen Mittelwert, der deutlich ruhiger ist als eine Einzelmessung.

Zwei NTC-Sensoren auslesen und mitteln
#include <Thermistor.h>
#include <NTC_Thermistor.h>

int Sensor_Pin1 = A0;
int Sensor_Pin2 = A1;

#define Referenzwiderstand  10000  // Widerstandswert des Widerstands, der mit dem NTC in Reihe geschaltet wurde
#define Nominalwiderstand   10000  // Widerstand des NTC bei Normaltemperatur
#define Nominaltemperatur      25  // Temperatur, bei der der NTC den angegebenen Widerstand hat
#define BWert                3950  // Beta-Koeffizient (zu finden im Datenblatt des NTC)

Thermistor* thermistor1;
Thermistor* thermistor2;

void setup()
{
  Serial.begin(9600);
  // Nun werden die beiden Sensoren mit den spezifischen Daten initialisiert.
  thermistor1 = new NTC_Thermistor(Sensor_Pin1, Referenzwiderstand, Nominalwiderstand, Nominaltemperatur, BWert);
  thermistor2 = new NTC_Thermistor(Sensor_Pin2, Referenzwiderstand, Nominalwiderstand, Nominaltemperatur, BWert);
}

void loop()
{
  double celsius1 = 0;
  double celsius2 = 0;

  // 1000 Messwerte aufaddieren ...
  for (int i = 0; i <= 999; i++)
  {
    celsius1 = celsius1 + thermistor1->readCelsius();
    celsius2 = celsius2 + thermistor2->readCelsius();
  }

  // ... und durch 1000 teilen: das ergibt den Mittelwert.
  celsius1 = celsius1 / 1000;
  celsius2 = celsius2 / 1000;

  Serial.print("Temperatur1: ");
  Serial.print(celsius1);
  Serial.print(" °C   ");
  Serial.print("Temperatur2: ");
  Serial.print(celsius2);
  Serial.println(" °C");

  delay(100);  // Eine zehntel Sekunde Pause
}
Handleiding beoordelen

Opmerkingen

Stel een vraag of deel je ervaring

Neem contact met ons op als iets niet werkt. Vermeld daarbij je board en de foutmelding.

We controleren elke reactie voordat deze wordt gepubliceerd. Je e-mailadres blijft bij ons.