Für den Arduino & dem Raspberry PI gibt es diverse Temperatursensoren auf dem Markt. In diesem Beitrag möchte ich nun ein paar dieser Temperatursensoren gegenüberstellen und mit einem genauen Referenzwert prüfen.
Ziel
Das Ziel soll es sein, die Genauigkeit der Sensoren zu ermitteln, dazu nutze ich einen Referenzwert, welcher in einem Klimaschrank mit dem geeichten Temperaturmessgerät TESTO 650 aufgenommen wurde.
Ermittlung des Referenzwertes
Um zu erkennen, welcher Sensor wirklich genau ist, benötigt man einen Referenzwert.
Der Referenzwert wird mit dem Gerät TESTO 650 ermittelt, dieser Temperatursensor ist geeicht und hat eine Abweichung von ca. ±0,1 °C.
Der Klimaschrank von der Firma WEISS verfügt über einen eigenen Temperatursensor und einer Steuerung, mit welcher ein SOLL Wert eingestellt werden kann.
Hier findest du die Bedienungsanleitung zum Klimaschrank SB 22 160 50 von der Firma Weiss Umwelttechnik GmbH.
Ermittlung der Messwerte
Die Messwerte werden mit der Software “CoolTerm” aufgezeichnet, dabei gibt es alle 2,5 Sekunden einen neuen Messwert.
Weniger als 2 Sekunden ist in diesem Aufbau nicht möglich, da der vorhandene DHT11 Sensor “nur” alle 2 Sekunden einen neuen Messwert liefert.
Die Anwendung “CoolTerm” ist kostenfrei unter http://freeware.the-meiers.org/ erhältlich.
Welche Temperatursensoren?
Folgende Temperatursensoren verwende ich in diesem Experiment:
Sensor | Temperaturmessbereich | Toleranz |
---|---|---|
LM35DZ | 0 °C – +100 °C | ±0,4 °C |
DS18B20 | -55 °C – +125 °C | ±0,5 °C |
LM393 | +20 °C – +80 °C | -keine Angabe- |
DHT11 | 0 °C – +60 °C | ±2 °C |
DHT22 | -40 °C – +80 °C | ±0,5 °C |
BME280 | -40 °C – +85 °C | -keine Angabe- |
SHT21 | -40 °C – +125 °C | ±0,3 °C |
Der Temperatursensor SHT21 wurde mir von einem Arbeitskollegen bereitgestellt.
Vielen Dank an Florian W.
Die Sensoren habe ich jeweils in einzelnen Tutorials behandelt, daher möchte ich hier “nur” auf die Genauigkeit eingehen.
Aufbau der Schaltung
Da ich leider keine passenden Schaltplanelemente für die Sensoren SHT21, BME280 sowie dem LM393 hatte, habe ich hier die Bilder eingefügt.
Für den Aufbau der Schaltung werden folgende Bauelemente benötigt:
Bezeichnung |
---|
400 Pin Breadboard* |
Breadboardkabel*, männlich – männlich |
Arduino UNO* (oder vergleichbarer Microcontroller) |
4,7 kOhm Widerstand* |
Sensor – DHT11* |
Sensor – DHT22* |
Sensor – LM393 (NTC)* |
Sensor – DS18B20* |
Sensor – LM35DZ* |
Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!
Quellcode
Den Quellcode habe ich in mehrere Dateien aufgeteilt. Dieses hat den deutlichen Vorteil das jede Logik für den Sensor getrennt ist.
Hauptklasse
/** * Dieser Sketch liefert die Temperaturen der Sensoren * - LM35DZ * - DS18B20 * - LM393 * - DHT11 * - DHT22 * - BME280 * - SHT21 */ int index = 1; void setup() { Serial.begin(9600); //Beginn der seriellen Kommunikation //Ausgeben der Kopfzeile Serial.println("Index;LM35DZ;DS18B20;LM393;DHT11;DHT22;BME280;SHT21"); } void loop() { Serial.print(index++); Serial.print(";"); Serial.print(getLM35DZValue()); Serial.print(";"); Serial.print(getDS18B20Value()); Serial.print(";"); Serial.print(getLM393Value()); Serial.print(";"); Serial.print(getDHT11Value()); Serial.print(";"); Serial.print(getDHT22Value()); Serial.print(";"); Serial.print(getBME280Value()); Serial.print(";"); Serial.print(getSHT21Value()); Serial.println(""); delay(2000); //2 Sekunden Pause }
LM35DZ
int temperatursensorPin = 0 ;// Bestimmen das der Temperatursensor LM35 an den analogen PIN 0 angeschlossen ist. float getLM35DZValue(){ int val = analogRead(temperatursensorPin); // Den analogen Wert des Temperatursensors lesen. float dat = (125*val)>>8; // Aus dem gelesenen Wert die Temperatur berechnen. return dat; }
DS18B20
#include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 5 //Sensor DS18B20 am digitalen Pin 2 OneWire oneWire(ONE_WIRE_BUS); // DallasTemperature sensors(&oneWire); float getDS18B20Value(){ sensors.begin(); //Starten der Kommunikation mit dem Sensor sensors.requestTemperatures(); return sensors.getTempCByIndex(0); }
LM393
const int analogPin = A1; //A0 vom LM393 float getLM393Value(){ int analogValue = analogRead(analogPin); return getTempC(analogValue); } double getTempC(int analogValue){ int mappedAnalogValue = map(analogValue, 0, 1023, 1023, 0); double tempC = log(((10240000 / mappedAnalogValue) - 10000)); tempC = 1 / (0.001129148 + (0.000234125 * tempC) + (0.0000000876741 * tempC * tempC * tempC)); tempC = tempC - 273.15; return tempC; }
DHT11
#include "DHT.h" DHT dht11(2, DHT11); float getDHT11Value() { dht11.begin(); return dht11.readTemperature(); }
DHT22
#include "DHT.h" DHT dht22(3, DHT22); float getDHT22Value() { dht22.begin(); return dht22.readTemperature(); }
BME280
#include <Wire.h> #include "cactus_io_BME280_I2C.h" BME280_I2C bme(0x76); // I2C using address 0x76 float getBME280Value() { bme.begin(); bme.setTempCal(-1); bme.readSensor(); return bme.getTemperature_C(); }
SHT21
#include "SparkFunHTU21D.h" HTU21D sht21; //Objekt instanzieren float getSHT21Value(){ sht21.begin(); return sht21.readTemperature(); }
Download
Der gesamte Quellcode kann über nachfolgenden Link heruntergeladen werden.
Messwerte
Die ermittelten Messwerte (Rohdaten) werden Semikolon separiert in eine Datei geschrieben.
Wobei die erste Zeile die Spaltenüberschrift mit der Bezeichnung des Sensors enthält.
Diese Daten können dann mit Microsoft Excel, tabellarisch sowie nach einer Aufbereitung grafisch dargestellt werden.
Die Temperaturwerte werden mit einem Punkt getrennt, für eine Verarbeitung mit Microsoft Excel müssen diese geändert werden, so dass die Werte mit einem Komma getrennt werden.
Auswertung
Aus diesem Diagramm ist gut zuerkennen, dass der analoge Sensor LM35DZ sehr ungenau ist und der etwa baugleiche Sensor DS18B20 und der Temperatursensor LM393 dagegen sehr genau sind. Preislich liegen diese Sensoren etwa im gleichen Preissegment. Der Vorteil des LM393 Sensors ist zusätzlich, dass an diesem ein Schwellwert eingestellt werden kann über welchen ein digitaler PIN auf High gesetzt werden kann.
Der DHT22 hat die drittstärkste Genauigkeit und kann neben der Temperatur zusätzlich noch die Luftfeuchtigkeit messen. Jedoch war das Messen der Luftfeuchtigkeit nicht Bestandteil dieses Experimentes.
Danke für die Darstellung der Messergebnisse. Du hast bei 23C gemessen. Mich würde interessieren wie die Genauigkeit bei Null Grad ist. Denn das wäre für die Frostüberwachung bei Pflanzen/Gewächshaus auch gut zu wissen. Da wären Fehler von 3Grad entscheident.
Guten Tag und vielen Dank für diese sehr Inhaltsreiche Auflistung der Sensoren für Klimaprüfschränke.
Ich habe während eines Praktikums bei einem Fotovoltaik Unternehmen einen Klimaprüfschrank in Aktion gesehen und war fasziniert.
Aufgabe dieses Schrankes war die Wettereinflüsse auf ein Fotovoltaik Panel für fünf Jahre zu simulieren.
Der Klimaprüfschrank hat diese Aufgabe in 2 Monaten erledigt.
Das fand ich schon sehr beeindruckend.
LG
Stefan Tiez
Mir geht es genauso wie Ihnen! Ich bin beeindruckt von der Technik solcher Klimaprüfschränke. In unseren Laboren an der Universität werden für die zu untersuchenden Proben so die Umwelteinflüsse von Temperatur, Luftfeuchte und allen möglichen Parametern der Tropen eingestellt. Damit simulieren wir quasi einen Stresstest an unseren Proben. Gerade für diese Geräte ist sicherlich die Wahl eines Temperatursensors, welcher mit ausreichender Sensitivität arbeitet obligatorisch.
Hallo,
ich stehe etwas auf dem “Schlauch”. Wie erkenne ich denn die Abweichung? Bei welcher Temperatur wurde gemessen – und was bedeutet beipielsweise bei LM35DZ 23°, 33° und 34°?
LM35DZ DS18B20 LM393 DHT11 DHT22 BME280 SHT21
1 23,00 °C 24,12 °C 22,96 °C 24,00 °C 24,90 °C 25,45 °C 25,47 °C
2 33,00 °C 24,00 °C 22,88 °C 24,00 °C 24,70 °C 25,39 °C 25,39 °C
3 34,00 °C 23,94 °C 22,88 °C 24,00 °C 24,60 °C 25,32 °C 25,31 °C
Und bei welchg
Have same question 🙁
Hi,
der gesamte Aufbau war in einem Klimaschrank, welcher konstant die Temperatur von 23°C gehalten / erzeugt hat.
Der Sensor LM35DZ hatte immer so ca. +/1 1-2°C Abweichung von dem Sollwert.
Der Aufbau ist aber nicht repräsentativ da der Sensor ja industrielle Massenware ist können hier bei der Produktion Schwankungen in der Qualität auftreten. Es wäre also ratsam den gleichen Test erneut jedoch mit mehreren Sensoren sowie öfter durchzuführen.
Das Experiment wurde auch von einem Professor aus der TU Braunschweig bewertet und dieser gab mir viele nützliche Tips wie man dieses Experiment aussagekräftiger machen kann. (Vielleicht kommt ja noch ein zweiter Teil 🙂 )
Ich hoffe ich konnte dir helfen.
Gruß,
Stefan Draeger
Wer an einen analogen Temparatursensor (LM35 oder NTC) an den Arduino anschließt, der verpasst das es gut digitale Sensoren gibt. Den DHT11 würde ich auch gegen einen DHT22 ersetzen. DS18B20 (1Wire) , DHT22 (1 Pin) und BME280 (I2C) sind gut. Vieleicht ist der LM75A noch zu nennen (I2C). Außer wer extrem hohe Temparaturen (>120°C) messen muss, muss auf analoge Sensoren zurück greifen.
Wenn man sehr genau messen will, führt wahrscheinlich kein Weg an einem Laser-abgeglichenen PT 100 oder PT 1000 RTD (Widerstandstemperaturfühler) vorbei.
Vermutlich hat selbst ein “normaler” PT 100 / 1000-Sensor noch eine geringere Messunsicherheit als die vorgestellten Sensoren. Außerdem ist die Langzeitstabilität sehr gut.
Diese Klimaschränke werden sicherlich auch damit arbeiten. Entscheidend ist auch die Plazierung des Fühlers im Schrank (Boden, Decke Seitenwand, Mittelpunkt).
Wer ein Multimeter mit Temperaturmessfunktion und ein passendes Thermoelement besitzt, kann ja mal im Haushaltsbackofen das Thermoelement an verschiedenen Punkten plazieren, um ein Gefühl für die Temperaturverteilung zu bekommen.
Und nein, ich will einen Backofen überhaupt nicht mit einem Laborgerät gleichsetzen! Es geht nur darum, zu zeigen, dass die gleichmäßige Temperaturverteilung eine ganz schwierige Aufgabe ist.
Hi Frank,
danke für dein Kommentar, ich gebe dir da grundsätzlich recht nur sind die Temperatursensoren in einem ganz anderen Preissegment und auch der anwendungsfall ist ja ein ganz anderer einen DHTxx Sensor würde ich nie für kritische Anwwendungen einsetzen wollen.
Gruß,
Stefan
So teuer sind pt 1000 Fühler auch nicht
Evtl mal beim heizungsbauer fragen
Sind zumeist in solaranlagen eingebaut per schiebhülse so 5€ etwa!
auch z.t. als speichertempfühler
Die sind lange haltbar und recht genau
PT1000 gibts günstig bei Heizungsdiscount24: https://www.heizungsdiscount24.de/zubehoer/hd24-pt1000-pt-1000-temperaturfuehler-sensor-widerstandsthermometer-250c.html
Dieser kommt mit 1,5m Kabel.
Einfach mal im Suchfeld PT1000 eingeben, es gibt da noch Kesselfühler usw. welche dann entsprechend der gewünschten Anwendung besser passen könnten.