Ein NTC-Heißleiter ist der günstigste Temperatursensor: ein Widerstand, der mit steigender Temperatur deutlich kleiner wird, rund 4 % pro Kelvin. Er sitzt in 3D-Druckern, Akkupacks, Wasserkochern, Kühlschränken und Heizungsreglern. Mit einem Festwiderstand als Partner und einem Analogeingang misst ein Mikrocontroller damit auf wenige Zehntel Kelvin genau, ohne Bibliothek und ohne Bus.
Hier baust du ein Thermometer für 0 bis 50 °C an einem Arduino Uno, mit einem echten Messfühler und allen Zahlen. Die Variante für den ESP32 folgt.
Schaltplan
- RT1, NTC 10 kΩ: zum Beispiel ein Fühler vom Typ B57861S0103F040 mit 10 kΩ bei 25 °C (±1 %) und dem B-Wert 3988 K (±1 %). Er ist klein, in Glas oder Epoxid vergossen und reagiert in Luft in rund 15 s.
- R1, 10 kΩ, 1 %: der Partner im Spannungsteiler. Ein Festwiderstand aus Metallschicht mit kleinem Temperaturkoeffizienten.
- C1, 100 nF: glättet Störungen auf der Fühlerleitung und liefert dem Wandler die Abtastladung.
- IC1, ATmega328P: misst an A0 (Pin 23) gegen AVCC (Pin 20).
So funktioniert die Schaltung
Der Widerstand eines NTC folgt näherungsweise der Beta-Formel:
mit der absoluten Temperatur T in Kelvin und T25 = 298,15 K. Der Widerstand fällt also exponentiell; warum das so ist, steht unter Temperaturverhalten von Halbleitern. Am Messpunkt liegt die Spannung
Bei 25 °C sind beide Widerstände gleich, und am Pin liegen 2,5 V. Wird es wärmer, sinkt der NTC-Widerstand und mit ihm die Spannung.
Der Clou der Schaltung steckt in der Versorgung: Der Teiler hängt an derselben Spannung, gegen die der Wandler misst. Der Messwert ist deshalb
und UCC kommt darin nicht mehr vor. Schwankt die USB-Spannung zwischen 4,75 und 5,25 V, ändern sich Teilerspannung und Referenz im gleichen Verhältnis. Man nennt das eine ratiometrische Messung. Aus N rechnest du den NTC-Widerstand zurück und daraus die Temperatur.
Dimensionierung
1. R1 wählen. Am empfindlichsten ist der Teiler, wenn R1 dem NTC-Widerstand in der Mitte des Messbereichs entspricht. Für 0 bis 50 °C liegt die Mitte bei 25 °C, also R1 = 10 kΩ. Die Werte an den Grenzen:
| Temperatur | RNTC | UA0 | ADC-Wert |
|---|---|---|---|
| 0 °C | 34,0 kΩ | 3,86 V | 791 |
| 25 °C | 10,0 kΩ | 2,50 V | 512 |
| 50 °C | 3,55 kΩ | 1,31 V | 268 |
NTC-Thermistor
- Widerstand des NTC
- 3,59 kΩ
- Temperaturbeiwert α
- −3,78 %/K
- Spannung am Abgriff
- 871 mV
- ADC-Wert
- 1.081
- Auflösung hier
- 33 mK
- Leistung im NTC
- 212 µW
- Eigenerwärmung
- 0,106 K
Beta-Modell: R(T) = R25 · eB · (1/T − 1/T25) mit T in Kelvin. Es stimmt exakt bei 25 °C und bei der zweiten Temperatur des B-Werts (85 °C bei B25/85, 50 °C bei B25/50); dazwischen und darüber hinaus weicht es ab, bei 0 °C typisch um 1 K, bei −40 °C um mehrere Kelvin. Genauer rechnest du mit der Tabelle oder der Steinhart-Hart-Gleichung aus dem Datenblatt. ADC-Wert = ⌊U / Uref · 2n⌋. Eigenerwärmung = Leistung / δ, ohne Toleranz von R25 und B.
2. Auflösung. Die Steigung der Kennlinie bei 25 °C:
Ein ADC-Schritt sind 5 V / 1024 ≈ 4,9 mV, also rund 0,09 K. An den Rändern wird es gröber: bei 0 °C 0,10 K, bei 50 °C 0,13 K, bei 100 °C schon 0,57 K pro Schritt.
3. Toleranzen. 1 % Abweichung im NTC-Widerstand entspricht bei 4,5 %/K etwa 0,22 K, ebenso 1 % in R1. Die Toleranz des B-Werts wirkt an der Bezugstemperatur gar nicht und wächst nach außen: Bei 0 °C bewirkt 1 % im B-Wert 1,2 % im Widerstand, bei dort 5,3 %/K also etwa 0,23 K. Zusammen landest du im ungünstigsten Fall bei etwa ±0,5 K, typisch deutlich darunter. Für mehr Genauigkeit gleichst du einmal bei bekannter Temperatur ab, etwa in Eiswasser.
4. Eigenerwärmung. Durch den NTC fließt Strom, und der heizt ihn. Bei 25 °C liegen 2,5 V an 10 kΩ:
Mit einem Verlustleistungsfaktor von rund 1,5 mW/K in ruhender Luft wird der Fühler 0,63 mW / 1,5 mW/K ≈ 0,4 K wärmer als die Umgebung. Das ist mehr als die Auflösung. Abhilfe: R1 und NTC nicht an 5 V, sondern an einen Ausgangspin hängen und nur zum Messen kurz einschalten. Dann bleibt die Erwärmung unmessbar klein. Wichtig ist dann, dass auch AVCC weiter die Referenz bleibt; ein High-Pin liegt nur wenige Millivolt unter VCC, weil kaum Strom fließt.
Code
const float R1 = 10000.0; // Festwiderstand
const float R25 = 10000.0; // NTC bei 25 °C
const float BETA = 3988.0; // B-Wert aus dem Datenblatt
void setup() {
Serial.begin(9600);
}
void loop() {
long summe = 0;
for (int i = 0; i < 16; i++) summe += analogRead(A0);
float n = summe / 16.0;
float r = R1 * n / (1024.0 - n); // NTC-Widerstand
float t = 1.0 / (1.0 / 298.15 + log(r / R25) / BETA); // Kelvin
Serial.print(t - 273.15, 1);
Serial.println(" °C");
delay(1000);
}
Prüfrechnung: Bei einem Messwert von 300 ergibt sich R = 10 kΩ · 300 / 724 ≈ 4,14 kΩ und daraus 46,0 °C.
Bauteilliste
| Bezeichner | Wert/Typ | Hinweis |
|---|---|---|
| RT1 | NTC 10 kΩ, B = 3988 K, z. B. B57861S0103F040 | Werte aus dem Datenblatt ins Programm |
| R1 | 10 kΩ, 1 %, TK ≤ 50 ppm/K | Metallschicht |
| C1 | 100 nF, X7R | direkt am Pin |
| IC1 | ATmega328P (Arduino Uno) | A0 = Pin 23 |
Varianten
ESP32. Der Wandler des ESP32 misst nicht gegen seine Versorgung, sondern gegen eine interne Referenz. Die Messung ist deshalb nicht ratiometrisch, und oberhalb von etwa 2,45 V arbeitet er ungenau. Dreh den Teiler um: NTC nach 3,3 V, R1 nach Masse. Dann liegen bei 0 °C 0,75 V am Pin, bei 25 °C 1,65 V und bei 50 °C 2,44 V – alles im guten Bereich. Lies mit analogReadMilliVolts() und rechne mit der gemessenen Versorgungsspannung. Mehr zu den Eigenheiten unter Spannung messen mit dem ADC.
Anderer Temperaturbereich. Für einen Fühler im Heizungsvorlauf (30 bis 90 °C) liegt die Mitte bei 60 °C, wo der NTC 2,45 kΩ hat. R1 = 2,4 kΩ aus der E24-Reihe wäre ideal; dann allerdings bei höherer Eigenerwärmung, weshalb sich das Abschalten zwischen den Messungen hier besonders lohnt.
Genauer über den ganzen Bereich. Die Beta-Formel weicht über 100 K Spanne um einige Zehntel Kelvin ab. Die Steinhart-Hart-Gleichung mit drei Koeffizienten oder die Widerstandstabelle aus dem Datenblatt mit Interpolation sind genauer.
Andere Sensoren. Für hohe Temperaturen oder höchste Genauigkeit gibt es Pt100 und Pt1000 mit eigener Messschaltung. Digitale Temperatursensoren wie DS18B20 oder TMP117 liefern fertige Werte. Ein NTC eignet sich auch als einfacher Thermostat mit Komparator (Komparator mit Hysterese).
Typische Fehler
- Temperatur läuft falsch herum: NTC und R1 im Teiler vertauscht, aber die Formel für die andere Anordnung im Programm. Anordnung und Formel müssen zusammenpassen.
- Werte springen: lange, ungeschirmte Fühlerleitung ohne C1. Kondensator direkt an den Pin, Leitung verdrillen, mehrfach messen und mitteln.
- Durchgehend 2 bis 3 K Abweichung: falscher B-Wert. Es gibt 10-kΩ-NTCs mit 3380, 3435, 3950 und 3988 K; nimm den Wert aus dem Datenblatt deines Fühlers.
- Messwert 1023 oder 0: Fühler abgezogen oder kurzgeschlossen. Fange beides im Programm ab, etwa bei einem Heizungsregler, der sonst durchheizt.
- Fühler zeigt zu warm: Eigenerwärmung oder er sitzt neben dem Spannungsregler auf der Platine.
Selbsttest
Welche Spannung liegt bei 25 °C an A0?
2,5 V, denn NTC und R1 haben dann beide 10 kΩ.
Warum spielt die genaue Versorgungsspannung beim Uno keine Rolle?
Teiler und ADC-Referenz hängen an derselben Spannung; der Messwert hängt nur vom Widerstandsverhältnis ab.
Der ADC liefert 650. Welche Temperatur misst du?
R = 10 kΩ · 650 / 374 ≈ 17,4 kΩ; mit der Beta-Formel ergibt das rund 13,2 °C.
Wie stark erwärmt sich der NTC bei 0 °C?
(3,86 V)2 / 34 kΩ ≈ 0,44 mW, geteilt durch 1,5 mW/K: knapp 0,3 K.
Warum drehst du den Teiler am ESP32 um?
Damit die Spannung im Bereich 0 bis 50 °C unter 2,45 V bleibt, wo sein Wandler genau misst.