In diesem Tutorial lernst du, wie man RTD-Sensoren mit dem MAX31865 und Arduino verwendet. RTD-Sensoren sind hochpräzise, robuste Temperatursensoren, und der MAX31865 ist ein Widerstands-zu-Digital-
Wandler, der es einfach macht, RTD-Sensoren mit einem Mikrocontroller wie dem Arduino zu verbinden.
In den folgenden Abschnitten erfährst du mehr über verschiedene Arten von RTD-Sensoren, wie sie funktionieren und wie man sie an ein MAX31865-Board anschließt. Wir schauen uns auch die Funktion des MAX31865 an und wie man Temperaturdaten mit der Adafruit_MAX31865 Bibliothek ausliest.
Lass uns mit den benötigten Teilen beginnen.
Benötigte Teile
Ich habe für dieses Projekt einen Arduino Uno verwendet, aber jedes andere Arduino-Board oder ein ESP8266/ESP32-Board funktioniert ebenfalls. Beachte, dass ich den gängigen Pt100-Sensor und das passende MAX31865-Board ausgewählt habe. Wenn du einen Pt1000 bevorzugst, solltest du ein passendes Board kaufen, sonst musst du den Referenzwiderstand auf dem MAX31865-Board ändern. Mehr Details findest du in den späteren Abschnitten.

MAX31865

RTD Pt100 Sensor

Arduino Uno

Dupont-Kabelsatz

USB-Kabel für Arduino UNO
Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.
RTD-Sensor
RTDsteht für „Resistance Temperature Detector“. Ein RTD-Sensor ist im Grunde ein temperaturabhängiger Widerstand, der seinen Widerstand ändert, wenn sich die Temperatur ändert.
RTD-Sensoren sind sehr genau, stabil und wiederholbar. Sie liefern über einen weiten Temperaturbereich eine weitgehend lineare Ausgabe und sind normalerweise in einem Schutzkabel untergebracht, was sie sehr robust macht. Allerdings sind sie teurer als Thermoelemente und Thermistoren und reagieren langsamer.

Die gebräuchlichsten RTDs sind drahtgewickelte Platin-RTDs. Sie bestehen aus einem Platindraht, der um einen Keramikkern gewickelt ist. Die Länge dieses Platindrahts wird so gewählt, dass bei 0°C ein bestimmter Widerstand erreicht wird. Dies nennt man den R0-Widerstand. Für den Pt100-Sensor beträgt der R0 Widerstand 100 Ω und für den Pt1000 beispielsweise 1000 Ω. Und Ptweist darauf hin, dass der Sensor aus Platin besteht.
Temperaturverhalten von RTDs
RTDs sind sehr genau, aber ihr Temperaturverhalten ist nicht vollständig linear. Das folgende Diagramm zeigt die Widerstandsänderung eines Pt100-Sensors in Abhängigkeit von der Temperatur im Vergleich zu einer vollkommen linearen Reaktion.

Callendar-Van Dusen-Gleichung
Man sieht, dass es bei höheren Temperaturen eine Abweichung von der idealen Linie gibt. Diese Abweichung oder Krümmung kann durch die sogenannte „Callendar Van Dusen“ Gleichung beschrieben werden:

Für genaue Temperaturmessungen bei höheren Temperaturen müsste man diese Gleichung implementieren. Glücklicherweise ist die Adafruit_MAX31865 Bibliothek bereits mit dieser Kompensation ausgestattet, sodass wir uns darum nicht kümmern müssen.
Es gibt viele weitere RTD-Typen, die unterschiedliche Materialien mit verschiedenen Widerstandswerten verwenden, aber in diesem Tutorial konzentrieren wir uns auf den gängigen Pt100 RTD. Für mehr Informationen zu anderen RTD-Typen siehe diesen Artikel: RTDs – the key to accurate industrial temperature measurements.
Verdrahtungskonfigurationen von RTDs
RTDs gibt es in 2-, 3- oder 4-Draht-Konfigurationen, wobei die 3-Draht-Konfiguration am gebräuchlichsten ist.

Zwei Drähte verbinden das interne temperaturabhängige Widerstandselement des RTD. Die Drähte selbst haben jedoch auch einen Widerstand. Um diesen messen und kompensieren zu können, werden bei 3- und 4-Draht RTDs ein oder zwei zusätzliche Drähte angeschlossen, wie oben gezeigt.
2-Draht RTDwird typischerweise für Anwendungen gewählt, bei denen Genauigkeit nicht kritisch ist und die Drähte kurz sind. Sie sind einfach zu verwenden, aber weniger genau, da keine Kompensation für den Drahtwiderstand möglich ist.
3-Draht RTDist die gebräuchlichste Konfiguration, die den durch die Drähte hinzugefügten Widerstand kompensiert und so bessere Genauigkeit und längere Drähte ermöglicht. Dabei macht der Controller zwei Messungen: Die erste misst den Gesamtwiderstand von Sensor und Anschlussdrähten, die zweite den Widerstand der Kompensationsschleife. Durch Subtraktion des Kompensationswiderstands vom Gesamtwiderstand kann der reine Sensorwiderstand berechnet werden.

4-Draht RTDfügt im Wesentlichen eine zweite Kompensationsschleife für noch bessere Drahtwiderstandskompensation und höhere Genauigkeit hinzu. Diese Konfiguration wird für Präzisionsmessungen in Laboren und anderen Anwendungen mit höchsten Genauigkeitsanforderungen verwendet.
In diesem Tutorial verwenden wir speziell den 3-Draht Pt100 RTD, dessen Spezifikationen im nächsten Abschnitt aufgeführt sind.
Technische Spezifikationen des Pt100 RTD
Der Pt100 ist ein 3-Draht RTD mit einem Nennwiderstand von 100Ω bei 0°C. Der Widerstandsdraht besteht aus Platin, das Gehäuse der Sonde und die Kabelummantelung aus Edelstahl. Sensor und Kabel sind wasserdicht. Der Sensor hat einen Temperaturbereich von -50 bis 200℃ mit einer Genauigkeit von ±0,15 °C.

Teste deinen Pt100 RTD
Du kannst die korrekte Funktion deines Pt100 RTD mit einem Multimeter testen. Identifiziere zuerst die zwei Drähte mit sehr niedrigem Widerstand von etwa 2Ω. Der genaue Wert hängt von der Kabellänge ab. Typischerweise haben diese zwei Drähte die gleiche Farbkennzeichnung – bei mir blau – aber das ist nicht immer so.

Miss dann den Widerstand zwischen einem der blauen Drähte und dem roten Draht. Bei Raumtemperatur sollte er etwa 110Ω betragen. Wenn du den Sensor dann in ein Eisbad (0°C) legst, sollte der Widerstand auf 100Ω sinken. Für den Pt1000 wäre der Widerstand bei 0°C 1000Ω.
Im nächsten Abschnitt verbinden wir den Pt100 RTD mit dem MAX31865-Board.
MAX31865 Board
Der MAX31865 ist ein präziser analoger Front-End-IC für Platin-RTD-Temperatursensoren. Er misst den Widerstand des RTD-Sensors und wandelt ihn mit einem eingebauten Analog-Digital-Wandler (ADC) in einen digitalen Wert um. Unten das Blockdiagramm des MAX31865 IC.

Man sieht die Eingänge für den RTD links (RTDIN+, RTDIN-, FORCE), den 15-Bit ADC in der Mitte und die SPI-Schnittstelle (SCLK, SDO, SDO, CS) rechts. Der RTD-Sensor wird an RTDIN+ und RTDIN- angeschlossen, während die FORCE-Pins zur Messung des Drahtwiderstands dienen. Die folgende Tabelle beschreibt alle Pins und ihre Funktionen.

Der MAX31865 kann PT100- oder PT1000-Sensoren in 2-, 3- oder 4-Draht-Konfigurationen verarbeiten. Dank des 15-Bit ADC ist er sehr genau mit einer Auflösung von 0,03125°C und einer schnellen Umwandlungszeit von 21 ms. Außerdem verfügt er über eine eingebaute Fehlererkennung für Fehler wie offenen RTD-Element, kurzgeschlossenes RTD,
Außerhalb des Spannungsbereichs oder Kurzschluss am RTD-Element. Für weitere Informationen siehe das Datenblatt.
Breakout-Board für MAX31865
Normalerweise verwendet man den MAX31865 IC nicht direkt, sondern als Breakout-Board. Es gibt verschiedene Versionen, ich konzentriere mich hier auf das in den benötigten Teilen aufgeführte. Das Bild unten zeigt die Ober- und Unterseite des MAX31865 Breakout-Boards.

Man sieht die Eingänge für die SPI-Schnittstelle und den RTD-Sensor markiert. Das Board läuft mit 5V oder 3,3V und funktioniert daher gut mit Arduino- oder ESP32-Mikrocontrollern.
Beim Kauf eines MAX31865 Breakout-Boards musst du darauf achten, dass es zu deinem RTD-Sensor passt. Die Boards unterscheiden sich im vorinstallierten Rref-Widerstand. Für einen Pt100 RTD möchtest du ein Board mit Rref = 430Ω (beschriftet als 4300). Für einen Pt1000 sollte Rref 4300Ω (beschriftet als 4301) sein:

Du kannst den Rref-Widerstand aber auch austauschen, wenn nötig, da die Boards ansonsten identisch sind.
Anschluss des RTD-Sensors an den MAX31865
Beim Anschluss des RTD-Sensors an den MAX31865 passieren leicht Fehler, die zu Fehlermeldungen führen. Bitte lies die folgenden Abschnitte sorgfältig!
Wir beginnen mit der Beschreibung der Verdrahtung und Board-Einrichtung für den 3-Draht RTD, da dies die gebräuchlichste Konfiguration ist.
3-Draht RTD
Bevor du die RTD-Drähte an das Board anschließt, musst du das Board für die 3-Draht-Konfiguration vorbereiten. Konkret sind folgende dreiSchritte nötig:
- Löte die beiden Pads mit der Beschriftung „2/3 Wire“ zusammen.
- Löte die beiden rechten Pads des Bereichs mit der Beschriftung „24 3“ zusammen.
- Schneide die dünne Leiterbahn zwischen den beiden linken Pads des Bereichs mit der Beschriftung „24 3“ durch.
Das Bild unten zeigt die relevanten Stellen auf dem Breakout-Board (gelb markiert)

Leiterbahn durchtrennen
Beachte, dass die zu durchtrennende Leiterbahn sehr dünn und schwer zu sehen ist. Du benötigst ein kleines, scharfes Messer zum Schneiden. Achte darauf, keine anderen Leiterbahnen versehentlich zu beschädigen. Das folgende Bild zeigt eine Nahaufnahme der zu schneidenden Leiterbahn.

Bei manchen Boards ist diese kleine Leiterbahn sogar farblich überdeckt und fast unsichtbar. Nach dem Schneiden überprüfe mit einem Multimeter, dass keine Verbindung mehr zwischen dem linken und rechten Pad besteht. Ich habe sogar ein Mikroskopbild (nach dem Löten) gemacht, um sicherzugehen, dass der Schnitt sauber ist.

Unten eine weitere Nahaufnahme des Boards, die zeigt, wie die drei Pad-Bereiche nach dem Löten und Schneiden aussehen sollten.

Anschluss der 3 Drähte
Zum Schluss müssen wir die drei Drähte des Pt100 RTD anschließen. Du wirst feststellen, dass die Endkontakte nicht direkt in die Klemmen passen. Du musst sie mit einer Zange biegen, damit sie klein genug sind. Das Bild unten zeigt die Kontakte vor und nach dem Biegen.

Jetzt kannst du sie in die Klemmen stecken. Die zwei Drähte mit gleicher Farbe (Niedrigwiderstandsschleife) kommen in die rechte Klemme (die nahe am „2 Wire“-Pad). Der Draht mit der anderen Farbe kommt in die linke Klemme. Siehe Bild unten.

Welchen Anschluss der linken Klemme du für den roten Draht verwendest, ist egal. Der Lötpunkt am „2/3 Wire“-Pad verbindet diese beiden Anschlüsse kurz.
Wenn du dir das Datasheet MAX31865 ansiehst, siehst du, dass wir folgende Verbindungen zwischen MAX31865 und 3-Draht RTD herstellen:

4-Draht RTD
Für die 4-Draht-Konfiguration musst du nichts tun. Lass das Board so, wie es ist, ohne Pads zu löten oder Leiterbahnen zu schneiden.

Bei einem 4-Draht RTD kommen die Drähte mit gleicher Farbe typischerweise in dieselbe Klemme (links oder rechts). Die Reihenfolge der Drähte innerhalb der Klemme ist egal.

Zur Sicherheit kannst du mit einem Multimeter prüfen, dass die Drähte, die in dieselbe Klemme gehen, einen niedrigen Widerstand (2Ω) haben.
2-Draht RTD
Für die 2-Draht-Konfiguration musst du das „2/3 Wire“-Pad und das „2 Wire“-Pad löten, aber du darfst nichtdie dünne Leiterbahn im Bereich „24 3“ durchtrennen.

Der Anschluss des 2-Draht RTD ist sehr einfach. Jeder der zwei Kabel muss in eine andere Klemme (links oder rechts). Die Reihenfolge der Kabel spielt keine Rolle.

Anschluss des MAX31865 an Arduino
Nachdem du das MAX31865-Board vorbereitet und den RTD-Sensor angeschlossen hast, können wir den MAX31865 mit dem Arduino verbinden. Das folgende Schaltbild zeigt die Verbindungen. Beachte, dass der RDY-Ausgang des MAX31865-Boards nicht verwendet wird.

Die folgende Tabelle listet auch die Verbindungen zwischen Arduino und MAX31865-Board auf.
| Arduino | MAX31865 |
|---|---|
| 10 | CS |
| 11 | SDI |
| 12 | SDO |
| 13 | CLK |
| – | RDY |
| 5V | VIN |
| GND | GND |
Auslesen der RTD-Temperaturdaten vom MAX31865
Nachdem alles verbunden ist, können wir etwas Code schreiben. Falls du die Adafruit_MAX31865 Bibliothek noch nicht installiert hast, ist jetzt der richtige Zeitpunkt. Gehe zu Tools > Manage Libraries ...und öffne den LIBRARY MANAGER. Suche nach „Adafruit_MAX31865“ und klicke auf Installieren. Nach der Installation sollte es so aussehen.

Code-Beispiel
Damit erledigt, hier ein minimales Beispiel, wie man Temperaturdaten vom MAX31865 ausliest. Schau dir den Code zuerst kurz an, dann besprechen wir die Details.
#include "Adafruit_MAX31865.h"
Adafruit_MAX31865 thermo = Adafruit_MAX31865(10, 11, 12, 13);
#define RREF 430.0
#define RNOMINAL 100.0
void setup() {
Serial.begin(9600);
thermo.begin(MAX31865_3WIRE); // 2WIRE, 3WIRE, 4WIRE
}
void loop() {
uint8_t fault = thermo.readFault();
if (fault) {
Serial.print("Fault 0x");
Serial.println(fault, HEX);
thermo.clearFault();
} else {
float temp = thermo.temperature(RNOMINAL, RREF);
Serial.print("Temp:");
Serial.println(temp);
}
delay(1000);
}
Der Code beginnt mit dem Einbinden der Adafruit_MAX31865Bibliothek und der Erstellung des Thermometer-Objekts thermo. Beim Erstellen des Objekts müssen die Arduino-Pins angegeben werden, die für die SPI-Kommunikation mit dem MAX31865 verwendet werden. In unserem Fall sind das CS=10, DI=11, DO=12, CLK=13.
#include "Adafruit_MAX31865.h" Adafruit_MAX31865 thermo = Adafruit_MAX31865(10, 11, 12, 13);
Als nächstes definieren wir die Konstanten für den RTD-Sensor. Beim Pt100 RTD haben wir einen Referenzwiderstand von 430Ω und einen Nennwiderstand bei 0 Grad von 100Ω.
#define RREF 430.0 #define RNOMINAL 100.0
Wenn du einen Pt1000 RTD oder einen anderen RTD verwendest, würdest du RREF=4300.0und RNOMINAL=1000.0verwenden.
In der setup-Funktion starten wir die serielle Kommunikation und auch die Kommunikation mit dem MAX31865. Beachte, dass wir einen 3-Draht RTD (MAX31865_3WIRE) angeben. Ändere diesen Parameter, wenn du einen 2-Draht (MAX31865_2WIRE) oder 4-Draht (MAX31865_4WIRE) RTD angeschlossen hast.
void setup() {
Serial.begin(9600);
thermo.begin(MAX31865_3WIRE);
}
Schließlich prüfen wir in der loop-Funktion zuerst auf fehlerhafte Messwerte. Wenn eine Fehlermeldung empfangen wird, geben wir „Fault“ im Serial Monitor aus und löschen den Fehler. Andernfalls lesen wir die Temperatur vom MAX31865 aus und geben sie aus.
void loop() {
if (thermo.readFault()) {
Serial.println("Fault!");
thermo.clearFault();
} else {
float temp = thermo.temperature(RNOMINAL, RREF);
Serial.print("Temp:");
Serial.println(temp);
}
delay(1000);
}
Und das war’s. Jetzt kannst du mit einem RTD-Sensor und dem MAX31865 Temperatur messen!
Ausgabe im Serial Plotter und Monitor
Im Serial Monitor solltest du jetzt jede Sekunde die Umgebungstemperatur in Grad Celsius ausgegeben sehen.

Und du kannst die Temperaturänderung verfolgen, indem du den Serial Plotter öffnest. Erwärme den Sensor etwas, indem du ihn in die Hand nimmst, oder kühle ihn ab, indem du darauf bläst.

Fehlersuche
Wie du gesehen hast, kann das korrekte Anschließen der RTD-Drähte und die Vorbereitung des MAX31865-Boards etwas knifflig sein. Wenn etwas nicht stimmt, erhältst du keine brauchbaren Temperaturwerte. Glücklicherweise kann der MAX31865 bestimmte Fehler erkennen und melden, was bei der Fehlersuche hilft.
Die Adafruit_MAX31865 Bibliothek enthält ein Beispielprogramm, das die vom MAX31865 zurückgegebenen Fehlercodes ausgibt. Unten ist eine leicht modifizierte Version dieses Beispielcodes für den 3-Draht Pt100 RTD.
#include "Adafruit_MAX31865.h"
Adafruit_MAX31865 thermo = Adafruit_MAX31865(10, 11, 12, 13);
#define RREF 430.0
#define RNOMINAL 100.0
void setup() {
Serial.begin(9600);
thermo.begin(MAX31865_3WIRE);
}
void loop() {
uint16_t rtd = thermo.readRTD();
float ratio = rtd / 32768.0;
Serial.print("RTD value: ");
Serial.println(rtd);
Serial.print("Ratio = ");
Serial.println(ratio, 8);
Serial.print("Resistance = ");
Serial.println(RREF * ratio, 8);
Serial.print("Temperature = ");
Serial.println(thermo.temperature(RNOMINAL, RREF));
uint8_t fault = thermo.readFault();
if (fault) {
Serial.print("Fault 0x");
Serial.println(fault, HEX);
if (fault & MAX31865_FAULT_HIGHTHRESH) {
Serial.println("RTD High Threshold");
}
if (fault & MAX31865_FAULT_LOWTHRESH) {
Serial.println("RTD Low Threshold");
}
if (fault & MAX31865_FAULT_REFINLOW) {
Serial.println("REFIN- > 0.85 x Bias");
}
if (fault & MAX31865_FAULT_REFINHIGH) {
Serial.println("REFIN- < 0.85 x Bias - FORCE- open");
}
if (fault & MAX31865_FAULT_RTDINLOW) {
Serial.println("RTDIN- < 0.85 x Bias - FORCE- open");
}
if (fault & MAX31865_FAULT_OVUV) {
Serial.println("Under/Over voltage");
}
thermo.clearFault();
}
Serial.println();
delay(3000);
}
Wenn du diesen Code ausführst und alles korrekt verdrahtet und konfiguriert ist, solltest du im Serial Monitor etwa folgenden Text sehen.
RTD value: 8300 Ratio = 0.25329589 Resistance = 108.91723632 Temperature = 22.89
Konkret sehen wir, dass der RTD einen Wert ungleich Null (8300) zurückgegeben hat, der in einen sinnvollen Widerstandswert (108,9Ω) für einen Pt100-Sensor umgerechnet werden konnte. Und wir erhalten eine korrekte Temperaturanzeige in Grad Celsius (22,89).
RTD falsch angeschlossen
Wenn ich das rote Kabel aus der Klemme ziehe und damit die Verbindung des Pt100 mit dem MAX31865 unterbreche, erhalte ich folgende Fehlermeldung:
RTD value: 32767 Ratio = 0.99996948 Resistance = 429.98687744 Temperature = 988.79 Fault 0xA8 RTD High Threshold REFIN- > 0.85 x Bias RTDIN- < 0.85 x Bias - FORCE- open
MAX31865 Board falsch konfiguriert
Andererseits, wenn du eine Fehlermeldung wie diese siehst, mit einem RTD-Wert von Null und einer negativen Temperatur, deutet das meist darauf hin, dass die Pads nicht richtig gelötet oder die Leiterbahn nicht durchtrennt wurde.
RTD value: 0 Ratio = 0.00000000 Resistance = 0.00000000 Temperature = -242.02 Fault 0x68 RTD Low Threshold REFIN- > 0.85 x Bias RTDIN- < 0.85 x Bias - FORCE- open
RTD-Schwellenwerte überschritten
Schließlich hat die Adafruit_MAX31865 Bibliothek eine Funktion setThresholds(lower,upper), mit der du minimale und maximale RTD-Werte als Schwellenwerte setzen kannst. Wenn diese überschritten werden, meldet der MAX31865 einen Fehler, auch wenn alles korrekt verdrahtet ist.
RTD value: 8292 Ratio = 0.25305175 Resistance = 108.81225585 Temperature = 22.62 Fault 0x80 RTD High Threshold
Für detailliertere Informationen zu den Fehlerbedingungen, die der MAX31865 erkennen kann, siehe das Datasheet of the MAX31865.
Fazit
RTD-Sensoren sind genaue und robuste Temperatursensoren, die in verschiedenen Drahtkonfigurationen (2-, 3-, 4-Draht) erhältlich sind. Diese unterschiedlichen Konfigurationen erfordern spezifische Änderungen am MAX31865-Board, was die erfolgreiche Verbindung von RTD, MAX31865 und Arduino etwas knifflig macht.
Wenn dein MAX31865 Null-Widerstand, stark negative Temperaturen oder andere Fehler meldet, liegt das meist an einem falsch konfigurierten Board oder einer fehlerhaften Verbindung.
Ich hoffe, dieses Tutorial hilft dir, die häufigsten Stolperfallen bei RTDs und dem MAX31865-Board zu vermeiden. Wenn du Fragen hast, hinterlasse sie gerne im Kommentarbereich.
Wenn du an anderen Temperatursensoren interessiert bist, schau dir folgenden Tutorials an:
- DHT11/DHT22 Sensor with Arduino Tutorial (2 Examples)
- Interfacing Arduino To An NTC Sensor
- DS18B20 Temperature Sensor Arduino Tutorial (4 Examples)
- LM35 Temperature Sensor Arduino Tutorial (3 Examples)
- TMP36 Temperature Sensor Arduino Tutorial (2 Examples)
- AM2320 I2C Temperature and Humidity Sensor Arduino …
Und jetzt viel Spaß bei deinen Temperaturmessungen ; )
Links
Hier einige Links, die ich beim Schreiben dieses Tutorials nützlich fand.
- Understanding RTDs
- What Is RTD Sensor And How Does It Work?
- Getting Started with High Precision Temperature Sensing using a MAX31865 and PT1000
- RTDs – the key to accurate industrial temperature measurements
- Adafruit MAX31865 RTD PT100 or PT1000 Amplifier
- Adafruit_MAX31865 libary
- MAX31865 Datasheet


