banner left Boxtec Banner
Platzhalter BoxtecProdukteForumShopKontaktPlaygroundn/aJobs
 

Vergleich Temperatur- und Feuchtigkeitsfühler

(DHT11, DHT22, DHT33, DS18x20, TMP36, Thermistor / DHT11, DHT22, DHT33)

Sensor Vergleichsgraph

Wir wollten einmal wissen, wie sich die verschiedenen Temperatur- und Luftfeuchte-Sensoren, die wir verkaufen in der Praxis vergleichen. Deshalb haben wir mit den folgenden Sensoren einen kleinen Testaufbau erstellt, Messdaten mit aufgezeichnet und diese verglichen:

Temperatur-Sensoren: Feuchte-Sensoren:
DHT11 DHT11
DHT22 DHT22
DHT33 DHT33
DS18x20
TMP36
Thermistor (Glas und Epoxy)

Beschreibung der verwendeten Sensoren

Bevor wir alle Sensoren zusammen auf ein Breaboard quetschen, schauen wir uns doch erst mal die einzelnen Teilnehmer und wie man diesen Messwerte entlockt genauer an:

DHT11

Der DHT11 ist ein voll digitaler und vorkalibrierter lowcost Temperatur- und Feuchte-Sensor. Sie sprechen den Sensor mit einem seriellen Onewire-Protokoll an und erhalten darauf hin digitale Messwerte zurückgeliefert. Der Sensor benötigt Speisespannung, GND und eine Datenleitung. Der DHT11 verfügt über eine maximale Auflösung von 1°C.

DHT22 / DHT33

Diese beiden Sensoren verfügen über die gleichen Eigenschaften wie der DHT11, da Sie aber eine feinere Auflösung von 0.1 (und eine höhere Genauigkeit) aufweisen benötigen sie ein leicht anderes Protokoll und damit entweder eine andere Library oder eine die beide unterstützt. Der DHT33 setzt ausserdem im Gegensatz zu den anderen beiden DHT-Sensoren einen DS18B20 zur Temperaturmessung ein, dies zeigt sich auch deutlich in den Vergleichen der beiden Sensoren.

Anschlussbelegung DHT Sensoren

DHT11(RHT01) DHT22(RHT03) DHT33(RHT04)
DHT11 mit Anschlussbelegung DHT22 mit Anschlussbelegung DHT33 mit Anschlussbelegung

DHT Libraries

  • DHTLib (für alle DHT Sensoren)
  • DHT von Ladyada (für alle DHT Sensoren)

DS18x20

DS18B20 Anschlussbelegung Der DS18x20 (wobei x für B oder S stehen kann) ist ein sehr beliebter digitaler Temperatur Sensor Dallas Semiconductors (mittlerweile Maxim-IC), bekannt auch darum, weil sich der Sensor parasitär, also über die Datenleitung speisen kann. Der Sensor kommt also auch mit 2 Leitungen (Signal und GND) aus und nicht nur das - als weiteres Leckerli können mehrere Sensoren auf diesen 2 Leitungen als Bus, dem OneWire Bus operieren. Die DS18x20 Sensoren sind alle vorkalibriert und haben eine Genauigkeit von 0.5°C über den gesamten Messbereich bei einer Auflösung von 9-12bit. Der Arduino Playground Artikel über OneWire enthält sehr viele interessante Informationen zu diesen Sensoren und dem Bus System.

Parasitäre Speisung DS18x20

Der Einfachheit halber haben wir uns für die parasitäre Speisung entschieden, d.h. wir schliessen nur GND und DATA an, hängen DATA aber über einen 4.7KOHM Pullup Widerstand auf 5V. Für den Sketch macht es danach keinen Unterschied wie der Sensor gespiesen wird, die parasitäre Speisung hat halt einfach gewisse Grenzen was Länge der Anschlusskabel und Menge der Sensoren auf einem einzelnen Bus angeht. 2 Sensoren auf einem Bus mit ca. 10m Kabel funktionieren aber in der Praxis mit parasitärer Speisung sehr gut. Idealerweise zieht man dann VDD auf GND, um Störungen zu vermeiden, es funktioniert aber in der Praxis auch ohne sehr zuverlässig.

DS18x20 Libraries

TMP36

TMP36 Anschlussbelegung Der TMP36 ist ein lowcost Analog-Temperatur Sensor mit einem linearen Anstieg. D.h. die Spannung am Ausgang steigt proportional mit der Temperatur und die Temperatur kann mit einer einfachen Formel von der gemessenen Spannung abgelesen werden. Die Formel dazu lautet:

(voltage - 0.5) * 100

Signal Rauschen beim TMP36

In unserem Aufbau mit sehr vielen Sensoren zeigte sich nach ersten Tests ein Problem mit Rauschen auf dem analogen Ausgangs des TMP36. Das Problem äusserte sich insofern, dass die berechnete Temperatur des TMP36 offensichtlich um mehrere Grade zu tief war. Eine kurze Messung mit dem DSO Nano ergab, dass das Signal sehr stark verzerrt war und die Messungen auf dem Analog Eingang des Arduino eher die unteren Spitzen des Rauschens als einen Durchschnitt wiedergaben. Nachdem wir den Ausgang des TMP36 mit einem RC-Glied beruhigt hatten schienen die Messwerte auch wieder plausibler zu werden.

Prinzipschaltung Signalglättung für den TMP36 Ausgang

RC Glied zur Signalglättung

Mit einem 10KOHM Widerstand und einem 100nF Kondensator ergibt sich eine Zeitkonstante von 1ms, d.h. die Verzögerung der Messwerte beträgt 5ms. Damit können wir in diesem Zusammenhang leben.

Wenn der TMP36 alleine auf einem Breadboard verwendet wird ist diese Problematik weniger zu beachten resp. kann vernachlässigt werden.

Weiterführende Informationen zu TMP36

Thermistor

Thermistoren sind Widerstände, die Ihren Widerstand reproduzierbar analog der Temperatur ändern. Thermistoren gibts in zwei Geschmacksrichtungen: NTC und PTC, bezeichnet jenachdem ob ihr Widerstand mit steigender Temperatur sich reduziert (NTC) oder bei steigender Temperatur erhöht (PTC). Das TC steht dabei für Temperature coefficient. Da nur sehr hochwertige Sensoren beinahe lineare Verläufe haben, ist die Berechnung dort etwas haariger, es wird dazu eine spezielle Gleichung benötigt, die Kurve des Sensors möglichst exakt beschreibt. Wir verwenden in unserem Aufbau den Code aus der Anleitung von Hacktronics zum Berechnen der Temperatur.

In unserem Aufbau verwenden wir eine ganz einfache Serieschaltung mit einem 10KOHM Widerstand. D.h. bei 25GRAD müssten genau 2.5V am analogen Eingang des Arduino anstehen:

Thermistor Beschaltung

Weiterführende Informationen zu Thermistoren

Messaufbau

Die zum Test verwendeten Sensoren wurden alle parallel auf einem Breadboard aufgebaut, was im Foto noch etwas chaotisch aussieht…:

Aufbau auf dem Breadboard

…ist im Fritzing Schema ev. etwas leichter zu durchschauen:

Software

Die Daten sollen über den seriellen Anschluss an den PC zur Aufzeichnung und Auswertung übermittelt werden. Auf der Seite des PC wird dazu Python mit dem pySerial Modul eingesetzt, das hat den Vorteil, dass das Script mit kleinen Anpassungen auf Linux, BSD, Win32 und MacOS laufen sollte.

Damit auch Vergleiche mit externen Quellen, z.B. einem sehr exakten Hygrometer und/oder Thermometer angestellt werden können, bietet das Script die Möglichkeit externe Messwerte zu jedem Block optional manuell zu erfassen. In der Aufzeichnung wird dieser Wert dann solange verwendet bis ein neuer manuell eingegeben wurde.

Zur grafischen Auswertung der Logdaten verwenden wir Gnuplot. Das Tool ist zwar schon etwas angestaubt, aber ebenfalls für viele Plattformen verfügbar.

Arduino Sketch

Im Arduino Sketch senden wir einfach den Namen des Sensors und die Messwerte durch Tabulator getrennt, das sieht dann in etwa so aus:

DHT11	24.00	25.00
DHT22	24.00	33.70
DHT33	23.20	30.50
DS18S20	23.19
Thermistor1	23.58
Thermistor2	23.58
TMP36	21.52
3
DHT11	24.00	25.00
DHT22	24.00	33.80
...

Der unterste Wert in einem Block ist die Laufzeit des Arduino in Minuten und dient nur dazu, dass wir auf PC-Seite einen kompletten Messblock einfach abgrenzen können. Im Sketch sind 30s als Pause zwischen Messwerterfassungen vorgesehen, d.h. es finden etwas weniger als 2 Messungen pro Minute statt. Wenn einen tiefere Frequenz gewünscht ist für z.B. Langzeitaufzeichnungen ist ein Wert von z.B. 1-5min sinnvoll.

Python Logger Script

Das Python Script verwendet nur Standardmodule und erwartet beim Aufruf den Namen des (virtuellen) seriellen Anschlusses unter dem das Arduino Board erreichbar ist. In unserem Fall ist dies /dev/ttyUSB0:

./simple_templogger.py /dev/ttyUSB0 

Das Script zeichnet standardmässig in eine Datei data.log im gleichen Verzeichnis auf und gibt die erkannten Sensoren auf der Console aus:

Externe Temperaturmessung: 22.9
Sensor T-extern: 22.9

Externe Feuchtemessung: 23
Sensor H-extern: 23
Sensor: DHT11 23.00 25.00
Sensor: DHT22 23.60 33.30
Sensor: DHT33 22.80 30.20
Sensor: DS18S20 22.87
Sensor: Thermistor1 23.14
Sensor: Thermistor2 23.23
Sensor: TMP36 21.52

Achtung: Wenn die Datei data.log bereits existiert hängt das Script am Ende der Datei an! In regelmässigen Abständen werden ausserdem die Spalten Namen als Kommentar in die Logdatei eingefügt.

Gnuplot Script

Gnuplot lässt sich mit einfachen Scripts steuern, so erstellt z.B. folgendes Gnuplot Script mit gnuplot scriptname.gp die untenstehende Grafik aus unseren Logdaten:

set terminal png size 1024,800
set grid
set ylabel "Relative Feuchte %"
set output "all-hum-sensors.png"
set xdata time
set timefmt '%Y %m %d %H %M %S"
set format x "%d.%m.%y"
set timestamp "Last updated: %d.%m.%y %H:%M"
#set size 1.2,1
plot 'data.log' every 2 using 1:14 title "DHT11" smooth csplines 12,\
  'data.log' every 2 using 1:15 title 'DHT22' smooth csplines 9,\
  'data.log' every 2 using 1:16 title "DHT33" smooth csplines 1,\
  'data.log' every 2 using 1:18 title "External H" smooth csplines 6

Die kompletten Gnuplot Scripte finden Sie im Download.

Download

Arduino Sketch, Python Logging Script und Gnuplot Script (2012-01-28

Alle Inhalte und Codes stehen unter der BSD Lizenz.

May the source be with you Luke!

Fazit

Versuch 1 Raumtemperatur

Über einen Zeitraum von ca. 24h wird die Raumtemperatur und Luftfeuchtigkeit im Labor aufgezeichnet, die Erfassung der manuellen Vergleichswerte erfolgt dabei nur sporadisch. Um etwas Bewegung in die Sache zu bringen wurde tagsüber ein Fenster schräg gestellt:

Temperatur

Temperatur über 24h

Luftfeuchte

Feuchte über 24h

Versuch 2 Aussentemperatur

Über einen Zeitraum von ca. 2h wird die Aussentemperatur und Luftfeuchtigkeit aufgezeichnet, die Erfassung der manuellen Vergleichswerte erfolgt dabei nur sporadisch. Die Mess-Schaltung benötigt etwas Zeit bis sie sich an die Ausstentemperatur “gewöhnt” hat. Danach wurde der Raum verschlossen und langsam beheizt um die Sensoren auf einem möglichst weiten Temperaturbereich vergleichen zu können:

Temperatur

Temperatur über 2h

Luftfeuchte

Feuchte über 2h

Schlussfolgerung

Die DS18x20 Sensoren (der DHT33 enthält ebenfalls einen DS18x20) liefern erwartungsgemäss sehr genaue und vergleichbare Temperaturen.

Der DHT22 liefert ebenfalls angenehm vergleichbare und stabile Messwerte, tendiert aber dazu immer etwas zu hoch zu liegen. Der DHT11 hingegen ist angenehm genau, die grössten Abweichungen entstehen bei diesem Sensor dadurch, dass er nur eine Auflössung von 1Grad hat.

Am meisten überrascht sind wir von den genauen Werten der Thermistoren, diese lieferten bei Raumtemperaturen durchwegs exakte und stabile Resultate über beide Sensoren hinweg. Bei anderen Temperaturen war die Abweichung deutlich grösser.

Der TMP36 hat im Gegensatz zum DHT22 immer etwas zu kalt gehabt. Ansonsten sind die Messwerte stabil einfach immer etwas 1 Grad zu tief was sich mit einem Offset sicher korrigieren liesse.

Alle Sensoren haben Ihre Vor- und Nachteile, für low-cost Anwendungen im Raumtemperaturbereich sind die Thermistoren aber sicher zu empfehlen. Wers gerne etwas digitaler hat dem kann mit den DS18x20 und den DHTxx Sensoren geholfen werden.

Da wir für die Feuchtemessungen keine geeignet genaue Referenz zur Verfügung hatten, können wir hier keine Aussage machen.





 
sensors/temp-hum_sensors_compared.txt · Last modified: 2012/05/17 15:50 by boxtec
 
 

zum Seitenanfang

Letzte Aktualisierung: © boxtec internet appliances · the better security products