Ratgeber · 17 Min. Lesezeit

Temperatursensoren für Arduino: 8 Sensoren im großen Vergleich

Temperatursensoren für Arduino im Vergleich: DHT11, DHT22, DS18B20, LM35, NTC, BME280, MAX6675 und MLX90614 nach Genauigkeit, Messbereich, Kabel und Preis.

Bei den vielen Temperatursensoren für Arduino die richtige Wahl zu treffen, ist wichtiger, als es zunächst scheint: Ein DHT11 und ein DS18B20 im selben Raum können 2 °C auseinanderliegen, und wer einen 300 °C heißen Ofen mit dem falschen Sensor messen will, kann ihn schlicht schmelzen. In der Hobbyelektronik dominieren acht Temperatursensoren: DHT11, DHT22, DS18B20, LM35, der NTC-Thermistor, BME280, MAX6675 (Thermoelement Typ K) und MLX90614 (berührungslos, Infrarot). Jeder hat einen anderen Messbereich, eine andere Genauigkeit, Anschlussart und Preisklasse. Welcher der richtige ist, hängt davon ab, was du messen willst: Raumluft, Wasser, einen Ofen oder einen drehenden Motor, den du nicht berühren kannst?

In diesem Ratgeber stellen wir die acht Sensoren in zwei großen Tabellen nebeneinander: Messbereich, Genauigkeit, Auflösung, Messrate, Schnittstelle, Versorgungsspannung, Kabellänge und relativer Preis. Danach erfährst du, wie jeder funktioniert, wo seine Stärken und Schwächen liegen und wie du ihn an Arduino Uno, ESP32 und Raspberry Pi Pico anschließt. Dazu bekommst du Beispielcode für NTC, MAX6675 und MLX90614, einen Testaufbau, der drei Sensoren gegeneinander antreten lässt, und eine Übersicht, welcher Sensor zu welchem Projekt passt. Zu den meisten Sensoren gibt es auch ausführliche Anleitungen; die Links findest du in den passenden Abschnitten.

DHT11 Temperatur- und Feuchtigkeitssensormodul
DHT11 Temperatur- und Feuchtigkeitssensormodul
DHT22 (AM2302) Temperatur- und Feuchtigkeitssensormodul
DHT22 (AM2302) Temperatur- und Feuchtigkeitssensormodul
Wasserdichter DS18B20 Temperaturfühler
Wasserdichter DS18B20 Temperaturfühler
BME280 Temperatur-, Feuchtigkeits- und Drucksensormodul
BME280 Temperatur-, Feuchtigkeits- und Drucksensormodul
NTC-Thermistor
NTC-Thermistor

Worauf solltest du bei der Wahl eines Temperatursensors achten?

Bevor du Sensoren vergleichst, musst du die Begriffe im Datenblatt richtig lesen. Am häufigsten verwechselt werden Genauigkeit und Auflösung. Die Genauigkeit sagt, wie nah dein Messwert an der echten Temperatur liegt; die Auflösung ist der kleinste Schritt, den der Sensor unterscheiden kann. Der BME280 liefert die Temperatur in Schritten von 0,01 °C, seine Genauigkeit liegt aber bei etwa ±1 °C. Die letzten beiden Stellen der 23,47 °C auf deinem Display helfen also, kleine Änderungen zu verfolgen, verraten dir die echte Temperatur aber nicht so genau. Achte bei der Auswahl auf diese sieben Kriterien:

  • Messbereich: Der Sensor sollte die niedrigste und höchste Temperatur, die du messen willst, bequem abdecken. Der DHT11 sieht nichts unter null; für den Kühlschrank brauchst du einen DS18B20, für den Ofen ein Thermoelement.
  • Genauigkeit: Für ein Raumthermometer sind ±2 °C in Ordnung, ein Aquarium oder ein Brutapparat braucht dagegen ±0,5 °C.
  • Schnittstelle: Analoge Sensoren brauchen einen ADC-Pin, digitale einen oder mehrere digitale Pins und meist eine Bibliothek. Wie viele Pins auf deinem Board frei sind, bestimmt, wie viele Sensoren du anschließen kannst.
  • Kabellänge: Sitzt der Sensor 5 Meter vom Board entfernt, im Garten oder am Boden eines Wassertanks, kommen analoge und I2C-Sensoren an ihre Grenzen; 1-Wire und das Eindrahtprotokoll der DHTs vertragen lange Leitungen deutlich besser.
  • Ansprechzeit: Ein Fühler in einer Edelstahlhülse oder ein DHT im Kunststoffgehäuse erfasst einen plötzlichen Temperaturwechsel erst nach Sekunden oder sogar Minuten; ein kleiner, blanker NTC ist viel schneller.
  • Zusätzliche Messwerte: Brauchst du auch die Luftfeuchtigkeit, reicht ein DHT22 oder BME280; brauchst du außerdem Luftdruck und Höhe, erledigt der BME280 alles in einem Modul.
  • Versorgungsspannung: Beim ESP32 und Pico mit 3,3 V musst du auf Sensoren wie den LM35 achten, die mindestens 4 V brauchen, und darauf, dass am ADC-Eingang nie mehr als 3,3 V ankommen.

Vergleichstabelle: 8 Temperatursensoren

Die erste Tabelle fasst die Messleistung zusammen, die zweite Anschluss und Kosten. Die Werte stammen aus den Datenblättern; wenn nicht anders angegeben, gilt die Genauigkeit um Raumtemperatur und wird zu den Bereichsgrenzen hin schlechter.

SensorMessbereichGenauigkeitAuflösungMessrate
DHT110 … +50 °C±2 °C1 °C1-mal pro Sekunde
DHT22 (AM2302)−40 … +80 °C±0,5 °C0,1 °C1-mal alle 2 Sekunden
DS18B20−55 … +125 °C±0,5 °C (von −10 bis +85 °C)0,0625 °C (12 Bit)750 ms (12 Bit), 94 ms (9 Bit)
LM35DZ0 … +100 °C (LM35: −55 … +150 °C)Typisch ±0,6 °C, garantiert ±1,5 °CAm Uno 0,49 °C (5-V-Ref.), 0,11 °C (1,1-V-Ref.)Sofort (ADC-Tempo)
NTC 10 kΩ, B 3950−40 … +125 °C (glasgekapselte ≈ 300 °C)Bei 25 °C: ±0,25 °C (1 %) … ±1 °C (5 %)Am Uno bei Raumtemperatur ≈ 0,1 °CSofort (ADC-Tempo)
BME280−40 … +85 °C±0,5 °C (25 °C), ±1 °C (0 … 65 °C)0,01 °CDutzende pro Sekunde
MAX6675 + Thermoelement Typ K0 … +1023,75 °CEinige °C (Wandler ≈ ±2 °C, Vergleichsstelle bis ±3 °C)0,25 °C≈ 4 pro Sekunde (0,22 s Wandlung)
MLX90614Objekt −70 … +380 °C, Umgebung −40 … +125 °C±0,5 °C (um Raumtemperatur)0,02 °CMehrmals pro Sekunde
SensorSchnittstelleVersorgungKabellängeZusätzlicher MesswertRelativer Preis
DHT11Eindraht digital, 1 Pin3–5,5 VBis 20 mLuftfeuchtigkeitSehr niedrig
DHT22Eindraht digital, 1 Pin3,3–6 VBis 20 mLuftfeuchtigkeitMittel
DS18B201-Wire, viele Sensoren an 1 Pin3,0–5,5 VDutzende MeterKeinerNiedrig
LM35Analog, 1 ADC-Pin4–30 VKurz, ≈ 1 m (länger nur mit Maßnahmen)KeinerNiedrig
NTCAnalog, 1 ADC-Pin über Spannungsteiler3,3 oder 5 V über den TeilerEinige MeterKeinerAm niedrigsten
BME280I2C (2 Pins) oder SPIChip 1,71–3,6 V; Modul mit Regler 5 VKurz, unter 50 cmLuftfeuchtigkeit und LuftdruckMittel
MAX6675SPI, 3 Pins (nur lesen)3,0–5,5 VThermoelementdraht kann meterlang seinKeinerMittel
MLX90614I2C (SMBus), 2 Pins3-V- oder 5-V-Version (Modul ggf. mit Regler)Kurz (I2C); misst berührungslosUmgebungstemperaturHoch
Grob sieht die Preisreihenfolge so aus: Am günstigsten ist der NTC, danach folgen DHT11, LM35 und DS18B20; DHT22 und BME280 liegen im Mittelfeld, das MAX6675-Modul mit Thermoelementfühler kostet etwas mehr, und der MLX90614 ist der teuerste der Liste. Nachbauten günstiger Sensoren sind sehr verbreitet; besonders beim DS18B20, LM35 und BME280 erreichen Kopien die Genauigkeit aus dem Datenblatt oft nicht. Zwei Sensoren an derselben Stelle liegen zu lassen und ihre Werte zu vergleichen, ist der einfachste Weg herauszufinden, ob du deinem Sensor trauen kannst.

DHT11 und DHT22: Temperatur und Luftfeuchtigkeit zusammen

Im Kunststoffgitter eines DHT-Sensors stecken ein Feuchteelement (resistiv beim DHT11, kapazitiv beim DHT22), ein Thermistor und ein kleiner Controller, der die Messwerte digitalisiert. Der Sensor schickt sein Ergebnis über eine einzige Datenleitung als 40-Bit-Paket: 16 Bit Feuchte, 16 Bit Temperatur und 8 Bit Prüfsumme. Das ist kein 1-Wire, sondern ein eigenes Eindrahtprotokoll des Herstellers; deshalb braucht jeder DHT einen eigenen Pin. Der DHT11 ist billig und reicht für die Raumtemperatur, doch sein Bereich von 0–50 °C und der Fehler von ±2 °C machen ihn für draußen und genaue Aufgaben schwach. Mit derselben Verdrahtung misst der DHT22 (AM2302) von −40 bis +80 °C mit ±0,5 °C Genauigkeit und liefert die Luftfeuchtigkeit von 0–100 %; dafür schafft er nur eine Messung alle zwei Sekunden. Beide teilen eine Schwäche, die Trägheit: Sie zeigen Änderungen spät an, weil die Luft im Gitter erst ins Gleichgewicht mit der Umgebung kommen muss. Anschluss, Bibliothek und Code findest du im Artikel DHT11 Temperatur- und Feuchtigkeitssensor; derselbe Code läuft mit dem DHT22, wenn du ein einziges Wort änderst.

Nutzt du einen nackten DHT mit 4 Beinchen, musst du einen 10-kΩ-Pull-up-Widerstand zwischen Datenleitung und VCC setzen; bei Modulen mit 3 Pins sitzt dieser Widerstand schon auf der Platine. Einen DHT öfter als alle zwei Sekunden auszulesen bringt keinen neuen Messwert: Die Bibliothek liefert dann entweder den alten Wert oder nan.

DS18B20: wasserdicht, robust und viele Sensoren an einem Pin

Wasserdichter DS18B20-Temperaturfühler
Wasserdichter DS18B20-Fühler: digitaler Sensor in einer Edelstahlhülse mit dreiadrigem Kabel (rot VDD, schwarz GND, gelb Daten).

Der DS18B20 misst die Temperatur im Chip und sendet sie als digitale Zahl mit wählbarer Auflösung von 9 bis 12 Bit. Er misst von −55 bis +125 °C, ist zwischen −10 und +85 °C auf ±0,5 °C genau, und dank des 1-Wire-Protokolls kannst du Dutzende Sensoren an einen einzigen Datenpin hängen; jeder hat eine ab Werk einprogrammierte, eindeutige 64-Bit-Adresse. Die wasserdichte Fühlerversion in der Edelstahlhülse ist unschlagbar für Aquarium, Wassertank, Heizungsrohre, Erde und Gefrierschrank. Seine einzige Bedingung ist ein 4,7-kΩ-Pull-up-Widerstand zwischen Datenleitung und Versorgung; fehlt er, liefert die Bibliothek −127 °C. Im 12-Bit-Modus dauert eine Messung 750 ms, daher musst du die Auflösung eventuell senken, um schnell wechselnde Temperaturen zu verfolgen. Den Code für mehrere Sensoren und das nicht blockierende Auslesen am ESP32 findest du im Artikel DS18B20-Temperatursensor.

LM35: der einfachste Analogsensor, ganz ohne Bibliothek

Der LM35 wandelt die Temperatur direkt in eine Spannung um: Sein Ausgang steigt pro Grad um 10 mV und liefert bei 25 °C 250 mV. Eine Bibliothek brauchst du nicht; das Ergebnis erhältst du mit der Formel Temperatur = analogRead × 5,0 / 1024 × 100. Diese Einfachheit macht ihn zum perfekten Einstieg, um den ADC kennenzulernen. Seine Schwächen haben denselben Ursprung: Mit 5-V-Referenz liefert der 10-Bit-ADC des Arduino Uno nur Schritte von etwa 0,49 °C, jede Abweichung der 5 V vom USB geht direkt in die Temperatur ein, und je länger das Kabel, desto mehr Störungen fängt der Ausgang ein. Die meisten LM35 im Handel sind LM35DZ und nur für 0–100 °C garantiert. Außerdem braucht er mindestens 4 V und muss am ESP32 und Pico deshalb am 5-V-Pin hängen. An 3,3-V-Boards ist der TMP36 die praktischere analoge Alternative: Er arbeitet mit 2,7–5,5 V, misst −40 bis +125 °C und liefert ebenfalls 10 mV/°C, gibt bei 0 °C aber schon 500 mV aus, daher lautet die Formel Temperatur = (V − 0,5) × 100. Seine typische Genauigkeit liegt bei ±1 °C bei 25 °C und ±2 °C über den gesamten Bereich. Wie du die Schrittweite mit der internen 1,1-V-Referenz auf 0,11 °C senkst, erklären wir Schritt für Schritt im Artikel LM35-Temperatursensor; wie der ADC funktioniert, erfährst du unter Analog-Digital-Wandlung.

LM35 und DS18B20 stecken im gleichen schwarzen TO-92-Gehäuse und sehen fast identisch aus, ihre Versorgungsbeinchen sind aber vertauscht. Ein falsch herum angeschlossener Sensor wird innerhalb von Sekunden so heiß, dass du ihn nicht mehr anfassen kannst. Berühre den Sensor beim ersten Einschalten mit dem Finger; wird er heiß, trenne sofort die Versorgung und lies die Aufschrift.

NTC-Thermistor: der günstigste und schnellste Sensor

Ein NTC-Thermistor (Negative Temperature Coefficient, Heißleiter) ist ein Widerstand, dessen Widerstandswert mit steigender Temperatur sinkt. Am häufigsten ist in Bastelprojekten der Typ mit 10 kΩ bei 25 °C und einem B-Wert von 3950 K. Da der Arduino Widerstände nicht direkt messen kann, wird der NTC zusammen mit einem Festwiderstand als Spannungsteiler geschaltet, und die Spannung am Mittelpunkt wird über einen Analogpin gelesen. Diese Schaltung hat einen schönen Vorteil: Wird der Teiler aus derselben 5-V-Spannung versorgt, die auch die ADC-Referenz bildet, ist die Messung ratiometrisch; das Ergebnis ändert sich nicht, selbst wenn die Versorgung 4,8 oder 5,1 V beträgt. Die Spannungen im Teiler berechnest du bequem mit dem Spannungsteiler-Rechner.

Der Widerstand eines NTC ändert sich mit der Temperatur nicht linear, sondern exponentiell; deshalb reicht kein einfacher Faktor wie beim LM35. In der Praxis nutzt man die Beta-Gleichung: 1/T = 1/T0 + (1/B) × ln(R/R0). Dabei ist T die Temperatur in Kelvin, T0 = 298,15 K (25 °C), R0 = 10 kΩ und B = 3950. Bei Raumtemperatur ist die Empfindlichkeit sehr hoch: Nach der Formel B/T² ändert sich der Widerstand um etwa 4,4 % pro Grad. Deshalb liegt ein NTC mit 1 % Toleranz bei 25 °C nur etwa ±0,25 °C daneben; zu den Bereichsgrenzen hin kommt aber die Toleranz des B-Werts hinzu, und der Fehler wächst. Für mehr Genauigkeit über einen großen Bereich nutzt man die Steinhart-Hart-Gleichung mit drei Stützpunkten; Details im Artikel NTC-Thermistor.

C++ (Arduino IDE)
1const int NTC_PIN = A1;          // bölücünün orta noktası / divider midpoint
2const float R_FIXED = 10000.0;   // 5V ile A1 arasındaki direnç / resistor between 5V and A1
3const float R0 = 10000.0;        // NTC'nin 25 °C'deki direnci / NTC resistance at 25 °C
4const float BETA = 3950.0;       // B katsayısı (veri sayfası) / B coefficient (datasheet)
5const float T0 = 298.15;         // 25 °C Kelvin cinsinden / 25 °C in kelvin
6const int SAMPLES = 16;          // ortalama için ölçüm sayısı / samples to average
7
8void setup() {
9  Serial.begin(9600);
10}
11
12void loop() {
13  long sum = 0;
14  for (int i = 0; i < SAMPLES; i++) {
15    sum += analogRead(NTC_PIN);
16    delay(2);
17  }
18  float adc = sum / (float)SAMPLES;
19
20  if (adc < 1.0 || adc > 1022.0) {                    // kopuk ya da kısa devre / open or shorted
21    Serial.println(F("NTC baglantisini kontrol et / Check the NTC wiring"));
22    delay(1000);
23    return;
24  }
25
26  float r = R_FIXED * adc / (1023.0 - adc);           // NTC direnci (ohm) / NTC resistance (ohm)
27  float invT = 1.0 / T0 + log(r / R0) / BETA;         // Beta denklemi / Beta equation
28  float tempC = 1.0 / invT - 273.15;                  // Kelvin -> °C
29
30  Serial.print(F("R: "));
31  Serial.print(r, 0);
32  Serial.print(F(" ohm  Sicaklik / Temp: "));
33  Serial.print(tempC, 1);
34  Serial.println(F(" C"));
35  delay(1000);
36}

In dieser Schaltung liegt der 10-kΩ-Festwiderstand zwischen 5V und A1, der NTC zwischen A1 und GND. Steigt die Temperatur, sinken der Widerstand des NTC und damit die Spannung an A1. Der Code berechnet aus dem Rohwert zuerst den Widerstand des NTC, dann mit der Beta-Gleichung die Temperatur in Kelvin und rechnet sie in Celsius um; der Mittelwert aus 16 Messungen senkt das ADC-Rauschen auf ein Viertel. Bei Raumtemperatur entspricht ein ADC-Schritt am Uno etwa 0,09 °C, die Auflösung ist also fünfmal besser als beim LM35 mit 5-V-Referenz. Bei fertigen NTC-Modulen (zum Beispiel KY-013) ist je nach Platine unterschiedlich, auf welcher Seite der Festwiderstand sitzt; sinkt der Messwert, wenn du den NTC mit etwas Warmem berührst, dreh die Widerstandsformel um: r = R_FIXED × (1023 − adc) / adc.

BME280: Temperatur, Luftfeuchtigkeit und Luftdruck in einem Modul

Der BME280 von Bosch misst Temperatur, relative Luftfeuchtigkeit und Luftdruck auf einem nur 2,5 × 2,5 mm großen Chip und kommuniziert über I2C (Adresse 0x76 oder 0x77) oder SPI. Bei der Temperatur bietet er 0,01 °C Auflösung sowie ±0,5 °C Genauigkeit bei 25 °C und ±1 °C zwischen 0 und 65 °C; er schafft Dutzende Messungen pro Sekunde und braucht im Schlafmodus weit unter 1 µA. Damit ist er ideal für batteriebetriebene Wetterstationen. Der Chip selbst verträgt nicht mehr als 3,6 V: Die lila Module mit 6 Pins sind meist nur für 3,3 V gedacht, Module mit 4 Pins und Spannungsregler dürfen an 5 V. Misst er dauerhaft, erwärmt sich der Chip leicht und zeigt einige Zehntelgrad zu viel an; für Wettermessungen genügt der Forced Mode mit ein paar Messungen pro Minute. Wie der I2C-Bus funktioniert, erklären wir in Was ist I2C?.

Ein Teil der als BME280 verkauften Module ist in Wahrheit ein BMP280, der keine Luftfeuchtigkeit misst. Beide sehen fast gleich aus; sicher unterscheiden kannst du sie nur, indem du das Chip-ID-Register ausliest: Der BME280 meldet 0x60, der BMP280 0x58. In diesem Fall gibt das Beispielprogramm der Adafruit-BME280-Bibliothek "Could not find a valid BME280 sensor" aus. Den Code zum Auslesen der ID und die Lösung findest du im Artikel BME280 und BMP280.

MAX6675 und Thermoelement Typ K: bis 1000 °C

Ein Thermoelement besteht aus zwei Drähten aus unterschiedlichen Metallen, die an einem Ende verschweißt sind. Der Temperaturunterschied zwischen der Schweißstelle (Messstelle) und dem Punkt, an dem die Drähte am Gerät angeschlossen sind (Vergleichsstelle), erzeugt eine winzige Spannung; beim Typ K sind das etwa 41 µV pro Grad. So eine kleine Spannung kann der ADC des Arduino nicht lesen, und außerdem musst du die Temperatur der Vergleichsstelle kennen. Der MAX6675 erledigt beides: Er verstärkt die Thermospannung, führt durch Messung seiner eigenen Temperatur die Vergleichsstellenkompensation durch und liefert das Ergebnis über SPI mit 12 Bit und 0,25 °C Auflösung. Sein Messbereich reicht von 0 bis +1023,75 °C; damit ist er hier die einzige Wahl für Orte, an denen die anderen Sensoren nicht überleben, etwa Lötkolben, Pizzaofen, Grill, Brennofen oder Auspuff.

Kenne auch die Grenzen des MAX6675: Unter 0 °C misst er nicht; der Wandler selbst hat zwischen 0 und 700 °C einen Fehler von etwa ±2 °C, dazu kommen bis zu ±3 °C Fehler der Vergleichsstellenkompensation und die Toleranz des Thermoelementdrahts. Rechne insgesamt also mit einer Genauigkeit von einigen Grad; in einem 800 °C heißen Ofen spielt das keine Rolle. Eine Wandlung dauert 0,17–0,22 Sekunden, warte zwischen zwei Messungen also mindestens 250 ms. Brauchst du auch Minustemperaturen, ist der neuere MAX31855 (−200 bis +1350 °C, 14 Bit) die bessere Wahl. Wie der SPI-Bus funktioniert, liest du in Was ist SPI?. Installiere in der Arduino IDE über den Bibliotheksverwalter die MAX6675 library von Adafruit und lade dann diesen Code hoch:

C++ (Arduino IDE)
1#include "max6675.h"
2
3const int thermoDO  = 4;    // SO: veri çıkışı / data out
4const int thermoCS  = 5;    // CS: çip seçimi / chip select
5const int thermoCLK = 6;    // SCK: saat / clock
6
7MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
8
9void setup() {
10  Serial.begin(9600);
11  delay(500);                                   // ilk ölçümü bekle / wait for the first conversion
12}
13
14void loop() {
15  float c = thermocouple.readCelsius();
16  if (isnan(c)) {                               // D2 biti: termokupl açık / bit D2: thermocouple open
17    Serial.println(F("Termokupl takili degil / Thermocouple not connected"));
18  } else {
19    Serial.print(F("Sicaklik / Temp: "));
20    Serial.print(c, 2);
21    Serial.println(F(" C"));
22  }
23  delay(500);                                   // en az 250 ms bekle / wait at least 250 ms
24}
Thermoelementadern sind gepolt: Schließe die mit + und − markierten Adern an die gleich markierten Schraubklemmen des Moduls an; vertauschst du sie, sinkt der Messwert, während der Fühler heißer wird. Setze das Modul nicht neben das Gerät, das sich erhitzt: Weil der MAX6675 die Vergleichsstelle über seine eigene Temperatur korrigiert, fließt jede Erwärmung der Platine direkt in die Messung ein. Ist der Fühler nicht angeschlossen oder der Draht gebrochen, liefert die Bibliothek nan.

MLX90614: Temperatur berührungslos messen

Der MLX90614 ist ein berührungsloser Temperatursensor, der die von Objekten abgegebene Infrarotstrahlung mit einer Thermosäule erfasst. Er liefert gleichzeitig zwei Werte: die Umgebungstemperatur, also die Temperatur seines eigenen Gehäuses (−40 bis +125 °C), und die Objekttemperatur der Oberfläche, auf die er gerichtet ist (−70 bis +380 °C). Um Raumtemperatur bietet er ±0,5 °C Genauigkeit und 0,02 °C Auflösung; er ist ab Werk kalibriert, kommuniziert über I2C (SMBus) unter der Adresse 0x5A, und der Bustakt darf höchstens 100 kHz betragen. Ideal ist er, um einen drehenden Motor, ein Lager, einen heißen Chip auf der Platine oder eine Pfanne auf dem Herd zu messen, ohne sie zu berühren.

Beim berührungslosen Messen gibt es zwei Kniffe. Der erste ist das Sichtfeld: Der Sensor misst den Mittelwert von allem, was in seinem Sichtkegel liegt. Die häufigste Version, der MLX90614ESF-BAA, hat ein Sichtfeld von 90°; in 5 cm Abstand mittelt er also über eine Fläche von etwa 10 cm Durchmesser. Für kleine Objekte bringst du den Sensor näher heran oder wählst eine Version mit engem Winkel wie 35° (BCC) oder 5° (BCI). Der zweite ist der Emissionsgrad: Ab Werk ist der Sensor auf 1,0 eingestellt. Für matten Lack, Kunststoff, Holz, Haut und Wasser liegt dieser Wert zwischen 0,9 und 0,98, das Ergebnis stimmt also nahezu; glänzende Metalloberflächen strahlen dagegen sehr wenig ab und wirken viel kälter, als sie sind. Ein Stück mattschwarzes Klebeband darauf ist eine einfache und wirksame Lösung. Installiere über den Bibliotheksverwalter die Bibliothek Adafruit MLX90614 und probiere diesen Code aus:

C++ (Arduino IDE)
1#include <Wire.h>
2#include <Adafruit_MLX90614.h>
3
4Adafruit_MLX90614 mlx = Adafruit_MLX90614();
5
6void setup() {
7  Serial.begin(9600);
8  if (!mlx.begin()) {                           // varsayılan adres 0x5A / default address 0x5A
9    Serial.println(F("MLX90614 bulunamadi / not found"));
10    while (true) delay(10);
11  }
12  Serial.print(F("Emisivite / Emissivity: "));
13  Serial.println(mlx.readEmissivity(), 2);      // fabrika ayarı 1.00 / factory default 1.00
14}
15
16void loop() {
17  Serial.print(F("Ortam / Ambient: "));
18  Serial.print(mlx.readAmbientTempC(), 2);      // sensör gövdesi / sensor body
19  Serial.print(F(" C   Nesne / Object: "));
20  Serial.print(mlx.readObjectTempC(), 2);       // baktığı yüzey / surface in view
21  Serial.println(F(" C"));
22  delay(500);
23}
Der MLX90614 kann nicht durch Glas sehen: Sein optischer Filter lässt Wellenlängen von 5,5–14 µm durch, und Glas ist in diesem Bereich nahezu undurchlässig. Richtest du den Sensor aus dem Fenster, misst du die Scheibe, nicht die Außenwelt. Außerdem kann er einige Minuten lang falsch messen, wenn du ihn aus einem kalten in einen warmen Raum trägst, bis sein Gehäuse im Gleichgewicht ist.

Anschlussübersicht: Arduino Uno, ESP32 und Raspberry Pi Pico

Sensor und PinArduino UnoESP32Raspberry Pi Pico
DHT11 / DHT22: DATAD2GPIO 27GP15
DS18B20: DQ (+ 4,7-kΩ-Pull-up)D3GPIO 4GP22
LM35: Vout (Versorgung 5 V)A0GPIO 34 (ADC1)GP26 (ADC0)
NTC: Mittelpunkt des TeilersA1 (Teiler an 5V)GPIO 35 (ADC1, Teiler an 3V3)GP27 (ADC1, Teiler an 3V3)
BME280: SDA / SCLA4 / A5GPIO 21 / 22GP4 / GP5
MLX90614: SDA / SCLA4 / A5 (gleicher I2C-Bus)GPIO 21 / 22GP4 / GP5
MAX6675: SO / CS / SCKD4 / D5 / D6GPIO 19 / 23 / 18GP16 / GP17 / GP18
Versorgung (VCC)5V (3.3V beim BME280 mit 6 Pins)3V3 (5V/VIN beim LM35)3V3(OUT) (VBUS beim LM35)

ESP32 und Pico arbeiten mit 3,3 V; versorgst du den NTC-Teiler aus 3V3, kann keine unzulässige Spannung an den ADC-Eingang gelangen. Schließe analoge Sensoren am ESP32 nur an ADC1-Pins (GPIO 32–39) an, denn die ADC2-Pins funktionieren bei eingeschaltetem WLAN nicht; für bidirektionale Datenleitungen wie beim DHT und DS18B20 meidest du dagegen GPIO 34–39, weil diese Pins nur Eingänge sind. BME280 (0x76) und MLX90614 (0x5A) haben unterschiedliche Adressen und können sich problemlos dieselben zwei I2C-Leitungen teilen. Alle Pins deines Boards findest du im Pinout-Tool, die Farbcodes der Pull-up-Widerstände im Widerstands-Farbcode-Rechner.

Vergleichstest mit dem ESP32: drei Sensoren am selben Ort

Die Unterschiede zwischen Sensoren siehst du am besten mit eigenen Augen. Der folgende ESP32-Code liest gleichzeitig einen DS18B20, einen DHT22 und einen BME280 aus und zeigt die Ergebnisse im seriellen Plotter der Arduino IDE als drei getrennte Linien. Setze die Sensoren nebeneinander aufs Breadboard, mindestens 10 cm vom ESP32 entfernt; der ESP32 erwärmt sich im Betrieb und beeinflusst jeden Sensor in seiner Nähe. Der Code benötigt die Bibliotheken OneWire, DallasTemperature, DHT sensor library und Adafruit BME280.

C++ (Arduino IDE)
1#include <OneWire.h>
2#include <DallasTemperature.h>
3#include <DHT.h>
4#include <Wire.h>
5#include <Adafruit_Sensor.h>
6#include <Adafruit_BME280.h>
7
8const int ONE_WIRE_PIN = 4;     // DS18B20 DQ (4,7 kΩ pull-up -> 3V3)
9const int DHT_PIN = 27;         // DHT22 DATA
10
11OneWire oneWire(ONE_WIRE_PIN);
12DallasTemperature ds(&oneWire);
13DHT dht(DHT_PIN, DHT22);
14Adafruit_BME280 bme;            // I2C: SDA GPIO 21, SCL GPIO 22
15bool bmeOk = false;
16
17void setup() {
18  Serial.begin(115200);
19  ds.begin();
20  dht.begin();
21  bmeOk = bme.begin(0x76) || bme.begin(0x77);   // iki adresi de dene / try both addresses
22  if (!bmeOk) Serial.println("BME280 bulunamadi / not found");
23}
24
25void loop() {
26  ds.requestTemperatures();                     // 12 bitte ~750 ms sürer / takes ~750 ms at 12-bit
27  float tDs  = ds.getTempCByIndex(0);           // sensör yoksa -127 / -127 if missing
28  float tDht = dht.readTemperature();           // hata olursa NAN / NAN on error
29  float tBme = bmeOk ? bme.readTemperature() : NAN;
30
31  // Seri Çizici için etiket:değer biçimi / label:value format for the Serial Plotter
32  Serial.printf("DS18B20:%.2f,DHT22:%.1f,BME280:%.2f\n", tDs, tDht, tBme);
33  delay(2000);                                  // DHT22 en fazla 2 sn'de bir / DHT22 at most every 2 s
34}

Warte zuerst ein paar Minuten und sieh dir an, wie weit die Linien auseinanderliegen: Abweichungen von 0,5–1 °C liegen innerhalb der Genauigkeitsgrenzen dieser Sensoren. Stell dann ein Glas warmes Wasser daneben oder puste sanft auf alle drei. DS18B20 und BME280 reagieren innerhalb weniger Sekunden, die Linie des DHT22 hinkt wegen seines Kunststoffgitters deutlich hinterher. Liegt der BME280 dauerhaft einige Zehntelgrad über den anderen, ist das die Eigenerwärmung des Chips. Dieses kleine Experiment zeigt dir Unterschiede, die in keinem Datenblatt stehen. Um Messwerte über längere Zeit aufzuzeichnen, kannst du ein SD-Kartenmodul verwenden oder die Daten an Google Sheets schicken.

Temperatur messen mit dem Raspberry Pi Pico und MicroPython

Die MicroPython-Firmware des Pico bringt die Module dht, onewire und ds18x20 bereits mit; für DHT und DS18B20 musst du also keine zusätzlichen Dateien auf den Pico kopieren. Außerdem hat der RP2040-Chip einen internen Temperatursensor am Kanal 4 des ADC. Der folgende Code liest alle drei zusammen aus:

MicroPython
1from machine import Pin, ADC
2import dht, onewire, ds18x20, time
3
4dht22 = dht.DHT22(Pin(15))                          # DHT22 DATA -> GP15
5ds = ds18x20.DS18X20(onewire.OneWire(Pin(22)))      # DS18B20 DQ -> GP22 (4,7 kΩ pull-up)
6roms = ds.scan()                                    # hattaki sensörler / sensors on the bus
7cpu = ADC(4)                                        # RP2040 dahili sensörü / internal sensor
8
9def cpu_temp():
10    v = cpu.read_u16() * 3.3 / 65535                # ham değer -> volt / raw value -> volts
11    return 27 - (v - 0.706) / 0.001721              # RP2040 veri sayfası formülü / datasheet formula
12
13while True:
14    t_ds = None
15    if roms:
16        ds.convert_temp()                           # ölçümü başlat / start conversion
17        time.sleep_ms(750)                          # 12 bit dönüşüm süresi / 12-bit conversion time
18        t_ds = round(ds.read_temp(roms[0]), 2)
19    try:
20        dht22.measure()
21        t_dht, nem = dht22.temperature(), dht22.humidity()
22    except OSError:                                 # okuma hatası / read error
23        t_dht = nem = None
24    print("DS18B20:", t_ds, "DHT22:", t_dht, "Nem / RH:", nem,
25          "Pico:", round(cpu_temp(), 1))
26    time.sleep(2)

Der interne Sensor misst die Temperatur des Chips, nicht die des Raums, und kleine Abweichungen der ADC-Referenz können das Ergebnis um einige Grad verschieben. Er eignet sich daher nicht zur Umgebungsmessung, wohl aber, um zu prüfen, ob das Board überhitzt. Vergiss den 4,7-kΩ-Pull-up an der Datenleitung des DS18B20 nicht; die internen Pull-ups des Pico sind für 1-Wire zu schwach. Bist du neu beim Pico, fang mit Was ist der Raspberry Pi Pico? an.

Welcher Temperatursensor für welches Projekt?

Projekt oder BedarfEmpfohlener SensorWarum?
Erstes Projekt, RaumthermometerDHT11Am günstigsten, liefert auch die Luftfeuchtigkeit; ±2 °C reichen für einen Raum
Wetterstation für innen und außenBME280 oder DHT22Misst bis −40 °C und die Luftfeuchtigkeit; der BME280 zusätzlich Luftdruck und Höhe
Aquarium, Wassertank, HeizungswasserWasserdichter DS18B20-FühlerEdelstahlhülse, ±0,5 °C, langes Kabel
Kühlschrank und GefriertruheDS18B20Misst bis −55 °C; der DHT11 sieht nichts unter null
Viele Messpunkte (Räume, Gewächshaus, Leitungen)DS18B20Dutzende Sensoren an einem Pin, jeder mit eigener Adresse
BrutapparatDHT22 oder BME280±0,5 °C um 37,5 °C plus Feuchteregelung
Ofen, Grill, LötkolbenMAX6675 + Thermoelement Typ KHält bis 1000 °C aus
3D-Drucker-Hotend, AkkupackNTC-ThermistorKlein, billig und schnell; 3D-Drucker nutzen glasgekapselte 100-kΩ-NTCs
Motor, Lager, Platine, bewegte TeileMLX90614Misst berührungslos
ADC und Analogmessung lernenLM35 oder NTCKeine Bibliothek nötig, funktioniert mit einer Formel

Projektideen mit Temperatursensoren

  • Smartes Gewächshaus: Miss Lufttemperatur und Luftfeuchtigkeit mit einem DHT22 und die Bodentemperatur mit einem DS18B20-Fühler; steuere Lüfter und Bewässerung mit einem Relaismodul. Das komplette Projekt findest du unter smartes Gewächshaus.
  • Aquarienheizung mit Thermostat: Halte das Wasser mit einem wasserdichten DS18B20 zwischen 25 und 26 °C; nutze 0,5 °C Hysterese, damit das Relais nicht bei jeder kleinen Änderung schaltet.
  • Batteriebetriebene Wetterstation: Kombiniere einen BME280 mit dem Deep-Sleep-Modus des ESP32 und miss alle zehn Minuten, damit das System monatelang mit Batterien läuft.
  • Pizzaofen- oder Grillthermometer: Zeige die Ofentemperatur mit MAX6675 und Typ-K-Fühler in großen Ziffern auf einem OLED-Display an.
  • Berührungsloser Motortemperaturalarm: Überwache mit einem MLX90614 die Oberflächentemperatur eines Motors oder eines 3D-Druckerbetts und lass einen Summer ertönen, wenn ein Grenzwert überschritten wird.
  • Hausautomation: Schicke die Temperatur jedes Raums mit einem ESP32 per MQTT an Home Assistant und steuere die Heizung danach.
  • Gefriertruhenwächter: Löse mit einem DS18B20 einen Alarm aus, wenn das Innere der Gefriertruhe über −12 °C steigt, und zeige den Wert auf einem I2C-LCD-Display an.

Häufige Fehler und ihre Lösungen

SymptomMögliche UrsacheLösung
DHT: nan oder "Failed to read from DHT sensor!"Falscher Typ im Code (DHT11/DHT22), kein Pull-up oder zu häufiges AuslesenTyp korrigieren, 10-kΩ-Pull-up ergänzen, 2 Sekunden zwischen den Messungen warten
DS18B20: −127 °CSensor nicht gefunden: kein Pull-up, Kabel defekt oder falscher Pin4,7 kΩ zwischen DQ und VCC setzen, Verbindungen prüfen
DS18B20: immer 85 °CVor Ende der Wandlung gelesen oder Versorgung unzureichendWandlungszeit abwarten, VDD direkt versorgen
LM35: unnormal hoher Wert, Sensor wird heißVersorgungsbeinchen vertauschtSofort Strom trennen, Pinreihenfolge korrigieren
LM35 oder NTC: Wert springt ständigADC-Rauschen, langes Kabel, schwankende USB-VersorgungMittelwert bilden, 0,1-µF-Kondensator ergänzen, Kabel kürzen
NTC: Temperatur sinkt beim ErwärmenRichtung des Teilers passt nicht zum CodeWiderstandsformel umdrehen
BME280: "Could not find a valid BME280 sensor"Falsche Adresse (0x76/0x77) oder der Chip ist in Wahrheit ein BMP280Adresse ändern, Chip-ID lesen (0x60 / 0x58)
BME280 oder DHT: 1–3 °C zu hochEigenerwärmung, ESP32 oder Spannungsregler in der NäheSensor vom Board weg, seltener messen, Offset anwenden
MAX6675: nanThermoelement nicht angeschlossen oder Draht gebrochenSchraubklemmen und Fühler prüfen
MAX6675: Wert sinkt beim ErhitzenPolarität des Thermoelements vertauschtAdern + und − tauschen
MLX90614: glänzendes Metall wirkt sehr kaltNiedriger EmissionsgradMattschwarzes Klebeband aufkleben oder Emissionsgrad einstellen
MLX90614: kleines Objekt falsch gemessenSichtfeld größer als das ObjektSensor näher heran oder Version mit engem Winkel nutzen
Egal für welchen Sensor du dich entscheidest: Die größte Fehlerquelle ist oft nicht der Sensor selbst, sondern sein Einbauort. Ein Sensor in direkter Sonne, direkt neben einem Spannungsregler oder ESP32 oder eingesperrt in einer geschlossenen Box misst die Temperatur seiner eigenen Umgebung, nicht die des Raums. Setze den Sensor vom Board weg an eine luftige Stelle, vergleiche ihn einmal mit einem Thermometer, dem du vertraust, und korrigiere die konstante Abweichung im Code. Um zappelnde Werte zu glätten, wirf einen Blick auf die Methoden in Sensordaten filtern.

Kurz gesagt: DHT22 oder BME280 für Raum und Wetter, DS18B20 für Wasser und Kälte, LM35 oder NTC zum Lernen der Analogmessung und für schnelle Reaktion, MAX6675 für hohe Temperaturen und MLX90614 für Oberflächen, die du nicht berühren kannst, sind die richtigen Startpunkte. Wenn du auch andere Sensortypen kennenlernen möchtest, schau in den Ratgeber zu Arduino-Sensoren. In der BlueGrays-App findest du Projekte wie Temperatur- und Feuchtemessung mit dem DHT11, ein Thermometer mit NTC und LCD, eine Temperaturanzeige mit ESP32, DHT22 und LCD, einen ESP32-Temperaturlogger und eine smarte Bewässerung, jeweils mit Schaltplan und Code Schritt für Schritt.

Häufige Fragen

Welcher Temperatursensor ist für Arduino am genauesten?

Unter den Hobbysensoren sind um Raumtemperatur DS18B20, DHT22, BME280 (bei 25 °C) und MLX90614 mit ±0,5 °C am genauesten. Für kabelgebundene und wasserdichte Messungen sticht der DS18B20 heraus, für Messungen zusammen mit der Luftfeuchtigkeit der DHT22 oder BME280. Egal welchen du wählst: Ein einmaliger Vergleich mit einem zuverlässigen Thermometer und eine Offset-Korrektur im Code verbessern die Genauigkeit deutlich.

DHT11 oder DHT22: Welchen soll ich kaufen?

Willst du nur Raumtemperatur und Luftfeuchtigkeit grob überwachen, reicht der DHT11. Für draußen, Minusgrade oder ±0,5 °C Genauigkeit nimm den DHT22; er misst von −40 bis +80 °C und liefert auch die Luftfeuchtigkeit genauer. Beide laufen mit derselben Bibliothek und demselben Code, du änderst im Sketch nur den Sensortyp.

Wie messe ich die Wassertemperatur mit Arduino?

Am besten eignet sich der wasserdichte DS18B20-Fühler in einer Edelstahlhülse. Du tauchst den Fühler ins Wasser und schließt die Datenader mit einem 4,7-kΩ-Pull-up-Widerstand an einen Digitalpin des Arduino an. Kabel und Verbindungsstellen sind meist nicht dafür gemacht, lange in heißem Wasser zu liegen, also tauche nur die Edelstahlspitze ein.

Kann man mit Arduino hohe Temperaturen wie 500 °C messen?

Ja. Mit einem Thermoelement Typ K und einem MAX6675-Modul misst du von 0 bis etwa 1024 °C. Die Spitze des Thermoelements kommt in den Ofen, das MAX6675-Modul muss dagegen fern der Hitze bleiben. Prüfe unbedingt, bis zu welcher Temperatur Mantel und Kabel deines Fühlers ausgelegt sind.

Kann man mit Arduino ein kontaktloses Thermometer bauen?

Mit einem MLX90614 kannst du ein berührungsloses Infrarotthermometer am Arduino bauen; die Standardversion ist um Raumtemperatur auf ±0,5 °C genau. Für die Körpertemperatur braucht es die Version mit medizinischer Genauigkeit (±0,2 °C) und den richtigen Messabstand, und selbst dann ersetzt dieser Aufbau kein Medizinprodukt. Achte beim Messen darauf, dass die Zielfläche das Sichtfeld des Sensors vollständig ausfüllt.

Warum zeigt mein Temperatursensor zu viel an?

Am häufigsten liegt es an Wärmequellen in der Nähe des Sensors: einem ESP32, einem Spannungsregler oder Sonnenlicht. Sensoren wie der BME280 erwärmen sich außerdem leicht selbst, wenn sie dauerhaft messen. Setze den Sensor 10–15 cm vom Board weg, miss seltener und korrigiere die verbleibende konstante Abweichung im Code nach einem Vergleich mit einem Thermometer, dem du vertraust.

Alle Projekte ansehen
Temperatur und Luftfeuchtigkeit mit DHT11
#55Mittel

Temperatur und Luftfeuchtigkeit mit DHT11

Wie warm ist dein Zimmer, und ist die Luft feucht oder trocken? Der DHT11-Sensor misst Temperatur und Luftfeuchtigkeit, und der Arduino schreibt die Werte auf ein zweizeiliges LCD und aktualisiert sie

4.7(47)
73
Temperaturmessung mit NTC und 2x16 Lcd Display
#44Anfänger
Premium

Temperaturmessung mit NTC und 2x16 Lcd Display

Miss die Umgebungstemperatur mit einem Sensor, der aussieht wie eine kleine Perle. Dieses Bauteil namens NTC lässt Strom umso leichter durch, je wärmer es wird; der Arduino liest diese Änderung, rechn

4.5(33)
44
ESP32 DHT22 Temperatur und Luftfeuchtigkeit (mit LCD-Display)
#117Mittel

ESP32 DHT22 Temperatur und Luftfeuchtigkeit (mit LCD-Display)

Bei diesem Projekt werden die Umgebungstemperatur und die Luftfeuchtigkeit mit einem DHT22-Sensor gemessen und in Echtzeit auf einem 16x2 I2C-LCD angezeigt. Mithilfe der Adafruit-DHT-Bibliothek werden die Daten über das One-Wire-Protokoll vom Sensor ausgelesen. Dieses Projekt bildet die Grundlage für IoT-Wetterstationen, Smart-Home-Automatisierung oder Umgebungsüberwachungssysteme in Gewächshäusern. Die Kommunikation mit dem DHT22 erfolgt über den GPIO-4-Pin des ESP32.

4.8(38)
56
ESP32 Temperatur-Datenlogger (DHT22 + DS1307 RTC + microSD + OLED)
#144Fortgeschritten
Premium

ESP32 Temperatur-Datenlogger (DHT22 + DS1307 RTC + microSD + OLED)

Baue einen zeitgestempelten Temperaturlogger mit ESP32! Lese Temperatur/Feuchtigkeit vom DHT22 jede Minute, hole die aktuelle Zeit vom DS1307 RTC und protokolliere auf microSD-Karte als CSV. Das OLED zeigt live Temperatur (große Schrift), Luftfeuchtigkeit, Zeitstempel und Logzähler. Die /temp_log.csv-Datei auf der SD-Karte öffnet sich in Excel, Google Sheets oder Python pandas zur Analyse — perfekt für Gewächshausüberwachung, Raumtemperaturverfolgung, Laboraufzeichnung, Lebensmittellageru

4.7(7)
12
Punktmatrix-Uhr, Kalender und Wetterstation (MAX7219, DS1307)
#85Mittel
Premium

Punktmatrix-Uhr, Kalender und Wetterstation (MAX7219, DS1307)

Eine Laufschrift-Tafel für Tisch oder Wand, die abwechselnd Uhrzeit, Datum und das Raumklima zeigt. Auf dem 8x32-LED-Display erscheint zuerst die Temperatur in Celsius und Fahrenheit, dann die Luftfeu

5.0(50)
66
Intelligente Bewässerungsstation
#83Fortgeschritten
Premium

Intelligente Bewässerungsstation

Ein Gärtner, der deine Pflanzen von selbst gießt, damit sie im Urlaub nicht vertrocknen. Ein Bodenfeuchtesensor misst, wie nass die Erde ist; wird sie trocken, lässt der Arduino die Wasserpumpe ein pa

5.0(42)
57
Verwendung des LCD-Bildschirms mit I2C
#32Anfänger
Premium

Verwendung des LCD-Bildschirms mit I2C

Gib deinem Arduino ein eigenes Display und lass es seine erste Nachricht schreiben. Das zweizeilige LCD wird mit nur wenigen Kabeln angeschlossen; oben erscheint ein Gruß, dann unten eine zweite Zeile

4.8(53)
70