Nr. 54 – NTC Temperatursensor

Inhaltsverzeichnis

Für dieses Projekt benötigst du

Der NTC Temperatursensor am Arduino UNO

In dieser Anleitung wollen wir mit Hilfe eines günstigen NTC Temperatursensors, bzw. Thermistors, die Temperatur messen.

Ein Thermistor ist ein Widerstandsthermometer, bzw. ein Widerstand, dessen Widerstandswert von der Temperatur abhängig ist. Der Begriff ist eine Kombination aus „Thermisch“ und „Resistor“, also aus „Temperatur“ und „Widerstand“. Es besteht aus Metalloxiden, die mit Stoffen wie Kunststoff, Epoxid oder Glas als Schutzschicht ummantelt werden.
Es gibt aus technischer Sicht zwei Arten von Thermistoren: negativer Temperaturkoeffizient (NTC) und positiver Temperaturkoeffizient (PTC).
Bei einem NTC-Thermistor nimmt der Widerstand ab, wenn die Temperatur ansteigt. Umgekehrt nimmt der Widerstand zu, wenn die Temperatur sinkt.
Bei einem PTC-Thermistor nimmt der Widerstand zu, wenn die Temperatur ansteigt. Umgekehrt nimmt der Widerstand ab, wenn die Temperatur sinkt. Diese Version wird jedoch sehr selten verwendet.
Thermistoren sind einfach zu verwenden und kommen daher auch sehr häufig in elektrischen Geräten des täglichen Bedarfs vor, wie z.B. in 3D-Druckern oder Robotern. Die Sensoren sind aufgrund ihrer einfachen Konstruktion sehr günstig und langlebig. Im vergleich zu teuren Temperatursensoren sind Sie allerdings auch anfällig für Abweichungen in den Messwerten wenn die Versorgungsspannung nicht stabil ist.

Der NTC Temperatursensor zur Verwendung mit Arduino

Wie auch bei anderen analogen Sensoren wird die Temperatur erst mit Hilfe eines Mikrocontrollers, wie z.B. einem Arduino UNO, MEGA oder NANO anhand des ausgelesenen Widerstandswerts berechnet. Bei einem NTC Temperatursensor ist die Auswertung der Messwerte jedoch etwas komplizierter, da die Widerstandsveränderung in Thermistoren nicht linear verläuft. Daher wird für die Umwandlung des Widerstandsmesswertes in einen Temperaturwert eine relativ aufwändige Formel benötigt. Diese Formel nennt man „Steinhart-Hart-Gleichung“.
Um sich etwas mehr Hintergrundwissen anzueignen bietet es sich an, diese Gleichung einmal zu studieren. In dieser Anleitung verzichten wir im Sinne einer didaktischen Reduktion auf die direkte Verwendung der Steinhart-Hart-Gleichung und greifen bei der Programmierung auf eine Programmbibliothek zurück, in der der Temperaturwert im Hintergrund berechnet wird.

Da es bei Thermistoren verschiedene Bauformen und Typen gibt, werden sie immer mit einigen technischen Informationen geliefert. Diese technischen Details sind unbedingt notwendig, damit aus den Messwerten die richtige Temperatur abgeleitet werden kann.

 

 

1) Thermistoren werden nach dem Widerstandswert kategorisiert, der bei 25°C gemessen wird.

2) Maximale und minimale Messtemperatur.

3) Notwendiger Vorwiderstand

4) B-Wert, dieser Wert ist im Datenblatt des Sensors zu finden

Im Versuchsaufbau wird der NTC-Sensor mit dem notwendigen Vorwiderstand in Reihe geschaltet. In unserem Versuch verwenden wir einen NTC-Sensor mit folgenden Daten:
Messbereich: -20C bis 105C
Widerstand: 10K Ohm
B-Wert: B3950

Der Schaltplan

Einbinden der Bibliothek

Der Programmcode

#include <Thermistor.h>
#include <NTC_Thermistor.h>
int Sensor_Pin = A0;
#define Referenzwiderstand   10000 // Widerstandswert des Widerstandes 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 der Temperatur am Seriellen Monitor - hier nur der Text "Temperatur; "
  Serial.print(celsius); // An dieser Stelle wird der Temperaturwert an den Seriellen Monitor gesendet.
  Serial.println(" °C"); // Hinter dem Temperaturwert wird am Seriellen Monitor nun noch die Einheit "C" angezeigt.
  delay(1000); // An dieser Stelle pausiert das Programm für eine Sekunde. Dadurch wird am Seriellen Monitor ein Temperaturwert pro Sekunde angezeigt.
}

Mehrere NTC-Temperatursensoren an einem Mikrocontroller verwenden

Nach dem gleichen Anschlussschema eines NTC-Temperatursensors können auch viele weitere Sensoren zeitgleich verwendet werden. Jeder Temperatursensor sollte dafür mit einem eigenen Widerstand versehen werden. 
In folgendem Beispiel haben wir einen zweiten Sensor an den analogen Pin A1 angeschlossen. Zusätzlich wurde im mittleren Teil des Programms eine Schleife eingerichtet, die 1000 Mal den Messwert vom Sensor ermittelt und zusammenrechnet. Im Anschluss wird dieser wieder durch 1000 geteilt. Dadurch ergibt sich ein Durchschnittswert, bzw. Mittelwert.

Der Programmcode - Mehrere NTC-Temperatursensoren an einem Mikrocontroller

#include <Thermistor.h>
#include <NTC_Thermistor.h>
int Sensor_Pin1 = A0;
int Sensor_Pin2 = A1;
#define Referenzwiderstand   10000 // Widerstandswert des Widerstandes 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;
for (int i=0; i<=999;i++)
{
  celsius1 = celsius1+thermistor1->readCelsius(); //Temperatur auslesen
  celsius2 = celsius2+thermistor2->readCelsius(); //Temperatur auslesen
 }
  celsius1 = celsius1/1000;
  celsius2 = celsius2/1000;

  Serial.print("Temperatur1: "); // Ausgabe der Temperatur des ersten Sensors am Seriellen Monitor - hier nur der Text "Temperatur; "
  Serial.print(celsius1); // An dieser Stelle wird der Temperaturwert an den Seriellen Monitor gesendet.
  Serial.print(" °C"); // Hinter dem Temperaturwert wird am Seriellen Monitor nun noch die Einheit "C" angezeigt.
  Serial.print("Temperatur2: "); // Ausgabe der Temperatur des zweiten Sensors am Seriellen Monitor - hier nur der Text "Temperatur; "
  Serial.print(celsius2); // An dieser Stelle wird der Temperaturwert an den Seriellen Monitor gesendet.
  Serial.println(" °C"); // Hinter dem Temperaturwert wird am Seriellen Monitor nun noch die Einheit "C" angezeigt.
  delay(100); // An dieser Stelle pausiert das Programm für eine zehntel Sekunde.
  }

Funduino - Dein Onlineshop für Mikroelektronik

  • Dauerhaft bis zu 10% Rabatt für Schüler, Studenten und Lehrkräfte
  • Mehr als 3.500 Artikel sofort verfügbar!
  • Über 8 Jahre Erfahrung mit Arduino, 3D-Druck und co.
SALE