Samstag, 17. Januar 2015

DHT22 an langem Anschlusskabel

Lieber Entwickler,

im unserem zukünftigen EFH sollen Temperaturen und Luftfeuchtigkeit mit preiswerten DHT22-Sensoren gemessen werden. Ich möchte dabei auf dezentrale Intelligenz verzichten und die Sensoren möglichst direkt an die zentrale Steuerung anschließen. Fraglich war für mich, ob die Datenübertragung über ein langes Kabel möglich ist. Dazu habe ich heute einen Test mit 50m CAT5-Kabel gemacht.

Bereits vor einiger Zeit habe die die Sensoren in meinem Blog vorgestellt. Das Bild unten zeigt meinen Testaufbau.


Die "Zentrale" wird vom STM32F4-Discovery gemimt. Zwischen den PullDown-Widerständen rechts (2x10k parallel, um die überall empfohlenen 4,7k näherungsweise zu erreichen) und de DHT22 links hängen ca. 50m CAT5-Kabel. Mein Testcode prüft nach jedem Auslesen, ob der CRC passt. Selbst nach 30 Minuten "Dauerbetrieb" incl. Störung durch einen direkt daneben laufenden ollen Heizlüfter und Handy-Downloads waren keine Probleme zu beobachten.

Happy Coding!


1 Kommentar:

  1. Hallo,
    danke für die Tips. Bei mir hat es folgendermaßen geklappt, nachdem ich festgestellt habe, dass sich der DHT22 bereits an 1 m Leitung zickig benimmt:

    15 m Cat6 Kabel
    3.3 V und Masse an einem twisted pair
    Signal allein an einen weiteren pair
    Schirm NICHT auf Masse (da ging bei mir gar nix mehr)
    2.3 kOhm Pullup Widerstand am Sensorende

    So habe ich das Kabel aus dem Keller ins Freie geführt, um die Wetterstation mit Außendaten zu füttern. In der Konfiguration habe ich < 1 % fehlerhafte Datenpakete.

    Generell ist der Treiber etwas komisch:
    Die Zeit bis zum Return der Messwerte schwankt bei mir zw. 1 und 20 sec. (vermutl. retries..)
    Der Treiber gibt, wenn das Auslesen scheitert, sowohl für temperature und humidty kein float, sondern den String "None" zurück, was dazu führt, das alles im nachstehenden code, was einen float wert erwartet, crasht. Das muss man im Code abfangen. (If str(humidity) == "None": ....)

    Daneben gibt der Sensor manchmal auch blödsinnige Messwerte zurück, also z.B. 3350 % Feuchte oder unsinnige Temperaturen. Das muss man ebenfalls im Code ausfiltern.

    Die Genauigkeit der Werte scheint auf dem ersten Blick OK.

    Das Ding läuft seit gestern und zeichnet brav auf.

    War eine schwere Geburt mit dem Kabel, aber es geht.

    Also nicht gleich aufgeben, 15 m haben bei mir funktioniert.

    AntwortenLöschen