DHT11 sporradische Leseprobleme häufen sich

  • Hallo zusammen,

    Ich habe einen Raspberry mit der Überwachung diverser Klimadaten im Schwiegerväterlichen Gewächshaus betraut.
    Zur erfassung der Innen-/Außentemperatur und -Feuchte setze ich DHT11 ein die je über ca. 2m Litze verdrahtet sind.
    Folgende Zeile in der /etc/crontab startet jede Minute ein Script welches die Klimadaten "einsammelt":

    Code
    */1     * * * *  pi     ./Scripte/GetKlimadaten_rrd.sh


    Das Script sieht wie folgt aus:

    :daumendreh2: Bitte verzeiht, wenn das Script etwas diletantisch ausgeführt ist... Ich versuche dazu zu lernen und mich zu verbessern.

    Eigentlich geht es ja aus dem Script hervor, um jedoch unklarheiten vorzubeugen, ich verwende den "Adafruit_DHT_Driver" zum lesen der DHTs.

    So, zum Problem:
    Schon als nur ein DHT in betrieb war gab es immer mal wieder den Fall, das es innerhalb einer Minute kein ordentlicher Wert ausgelesen werden konnte. Seid jetzt der zweite DHT auch noch in betrieb ist, bekomme ich nur noch alle paar Minuten mal einen Wert ausgelesen.

    ...Hat jemand von euch evtl. eine Idee woran das liegen könte bzw. was ich dagegen tun könnte? :helpnew:

    Zur verdeutlichung hänge ich mal noch einen Graphen an auf dem man gut die Lücken (da wo keine Werte gelesen werden konnten) erkennen kann.

    Auf dem zweiten Bild erkennt man, in welchem Verhältniss "gute Werte" / "keine Werte" stehen.

    Ich freue mich auf eure Hinweise, Vorschläge und Anregungen.

    Vielen Dank vorab und viele Grüße

    DaZeller :)

  • Ich will ja nichts sagen, aber kann es sein das deine Himbeere einfach zu heiß wird?
    Am Ende des ersten Graphen ist der PI 80 Grad warm! :-/
    Im zweiten Graphen wird ja noch nicht mal die Temperatur des PIs angezeigt.
    Also scheint irgendwas mit deinem Script in erster Linie nicht zu stimmen.
    Wo ist der PI momentan verbaut?
    Vielleicht macht ihm die Wärme und Feuchtigkeit im Gewächshaus zu schaffen?

    A: Was ist dein dunkelstes Geheimnis?
    B: Das kann ich dir nicht sagen.
    A: sudo was ist dein dunkelstes Geheimnis?

  • Hallo petit_miner,
    vielen Dank für diene Antwort.

    Das mit der Temperatur des Pi stimmt schon, die ist schon recht hoch (und auch auf beiden Graphen zu sehen, wenn auch recht schlecht da gelb auf bege), aber mit ca. 80°C noch unter der Kritischen Temperatur von 90°C. Beheimatet ist der Pi in einem IP68 Kunststoffgehäuse, Feuchtigkeit sollte also auch kein Problem sein.

    Zurück zum problem:
    Das Script erledigt seine Aufgabe (meistens) schon ganz gut (funktioniert also prinziepiell), jedoch die DHT11-Sensoren (oder aber der "Adafruit_DHT_Driver") liefern nicht sonderlich zuverlässig plausieble Werte.
    Es ist bekannt, dass das auslesen des DHT11 etwas tricky ist (Quelle)

    Zitat

    Note that sometimes you might see an error that the sensor can't be read and to try again, even if you have your connections setup correctly. This is a limitation of reading DHT sensors from Linux--there's no guarantee the program will be given enough priority and time by the Linux kernel to reliably read the sensor. If this occurs, run the program again (or call the read function again in your code) to try to get a new reading. In testing on both the Raspberry Pi & Beaglebone Black, about 75% of the read requests should generally succeed and return a result (assuming the board is not under heavy load).

    , aber dass ich über minuten hinweg keinen guten Wert bekomme kommt mir schon komisch vor. :huh:

    Hat evtl. jemand eine Idee, was ich dabei falsch machen könnte? Oder zumindest einen Idee wo/wie ich mit der Ursachenforschung starten kann.

    viele Grüße und einen schönen Abend

    DaZeller

  • Hallo DaZeller,

    gerade habe ich mir das Datenblatt zum DHT11 durchgelesen (und für jemand anderen das zum DHT22).

    Ich vermute, dass die Wartezeit nach einer gescheiterten Messung zu kurz ist. Im Datenblatt steht zwar was von 2 Sekunden - aber es steht auch was von mindestens etc.
    Ich würde die Zeit mal auf 5 Sekunden erhöhen - wenn Du Verbesserungen erhältst, dann gilt es, die Delay-Zeit zu optimieren.

    Zum anderen ist das Betriebssystem des Raspberry Pi kein Echtzeit-System. Der DHT11 und auch der DHT22 stellen da erhebliche Anforderungen an die Zeiterfassung von Flankenwechseln. Wenn hier irgendein anderer Prozess mehr Prozessorlast als normal beansprucht, dann kannst Du meines Erachtens die folgenden Zeiterfassungen "vergessen". Ergebnis: Statt 1 wird 0 gedeutet. Die Checksumme stimmt nicht. Ergebnis: Wert ist nicht valide.

    Weitere Probleme entstehen bei Dir dadurch, dass Du Deinen Raspberry Pi in einem thermischen Extrembereich fährst. Ich kann mir vorstellen, dass dort auch Prozesse in Gang gesetzt werden (Reduzierung der Prozessortaktgeschwindigkeit bei 85°C), so dass dort auch Probleme in der Zeiterfassung der Pegelwechsel entstehen.

    Ich würde mal versuchen herauszubekommen, warum Dein Raspberry Pi so heiß wird. Bei diesem aktuellen Wetter kann ich mir vorstellen, dass ein Modell B statt ca. 50 °C vielleicht auf 60 - 65°C kommt, ein Modell B+ statt knapp 40 °C auf 50 °C - aber Deine Temperaturen von rund 80 °C - auch wenn sie im erlaubten Bereich liegen - sind schon heftig.

    Dann habe ich keinen Hinweis auf Deine Verschaltung gefunden. Arbeitest Du mit einem Widerstand zwischen VDD und DATA? Mit welcher Spannung betreibst Du den DHT11?

    Dann ist noch die Empfehlung im Datenblatt, einen 100 nF-Kondensator zwischen VDD und GND anzuschließen - wenn es denn Probleme gibt.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (30. August 2015 um 22:19)

  • Hi Andreas,

    vielen Dank für deine Antwort! :thumbs1:

    Da du richtigerweise nach der verschaltung frägst diese zuerst: Ich betreibe den DHT11 an den 5V des Raspberry mit 4k7 von den 5V zum Signal-Pin.
    Den Tipp mit den 100nF werde ich bei gelegenheit mal testen. :danke_ATDE: Eventuell bringt das ja was... wo würdest du das C platzieren? Direkt am DHT oder eher nahe beim PI (sind ca. 2m Leitung dazwischen)?

    Was die schwierigkeiten mit dem Timing (gerade auch in verbindung mir der mangelden Echtzeitfähigkeit) angeht, habe ich da auch schon das von dir beschriebene gehört/gelesen. Da wird man aber wohl damit leben müssen oder sich hinsetzen und einen entsprechenden low-level treiber programmieren (was leider nicht unbedingt im Rahmen meiner Möglichkeiten liegt).

    Tja und noch zu der Temperatur... Der Pi sitzt wie geschrieben in einem IP68 Kunststoffgehäuse, welches wiederum in einem Gewächshaus montiert ist. Das ist zugegeben (gerade bei Heute 36°C Außentemperatur) nicht gerade eine Ideale konstellation. :blush:
    Aber ich hatte bisher noch nicht die zündende Idee, wie am besten die Wärme aus dem Schaltkasten heraus-, dabei aber nicht Wasser/Feuchte herein zu lassen... (bin für vorschläge offen :D ).
    Das mit dem Prozessortakt-Derating bei hohen Temperaturen ist für mich neu und ist mit sicherheit eine Mögliche Fehlerquelle. Jedoch war es die Leten Tage schon noch recht kühl, das Problem jedoch seit inbetriebnahme des zweiten DHT verstärkt. Ich würde also die hitze nicht (zumindest nicht als Haupt-) Verdächtigen ansehen.

    Die Pause zwischen den Abfrageversuchen werde ich auch mal auf 5s setzen, evtl. bringt das ja was... Wenn ich das Abfrageskript jedoch von hand starte dauert die zeit zwischen den Versuchen aber ohnehin eher > 10s.

    Auf jeden Fall herzlichen Dank für die Anregungen ich werde schauen, was ich damit evtl. schon optimiert bekomme.

    viele Grüße und einen schönen Abend

    Dazeller

  • Hallo DaZeller


    "Ich betreibe den DHT11 an den 5V des Raspberry mit 4k7 von den 5V zum Signal-Pin."

    Die GPIO Schnittstelle ist für Spannungen bis max. 3.3 Volt ausgelegt.

    Die Eingabepins sind nicht 5 Volt sicher, man benötigt einen Spannungswandler (level shifter), falls von einer externen Quelle mehr als 3,3 Volt kommen.
    Deine Beschaltung mit 5V erklärt eventuell die hohe Raspberry Pi Betriebstemperatur.

    Siehe "https://developer-blog.net/hardware/raspb…ttstelle-teil-1"

    Rosty

  • Hier müssen wir unterscheiden, ob nur der "nackte" Sensor DHT11 benutzt wird oder ein Breakoutboard, welches den DHT11 drauf hat und oft auch als DHT11 bezeichnet wird. Die Breakouts sind auf 5V ausgelegt und haben bereits einen Pullup gegen 5V drauf. Für den RasPi kann man solche Boards mit 3,3V betreiben (mit etwas Glück) oder man muss den Widerstand entfernen und einen externen Pullup gegen 3,3V legen.
    Der "nackte" DHT kann getrost mit einer 5V Betriebsspannung betrieben werden. Es ist eine Legende, dass man an der Datenleitung einen Pegelwandler benötigt. Die kommt aus Zeiten, als sich sehr viele unerfahrene Basteler durch den Raspberry mit der Thematik beschäftigten.
    Die Datenleitung ist ein offener Kollektor. Dadurch wird das Signal der Datenleitung immer den Pegel des Masters (Raspberry) haben. Voraussetzung ist, dass der Pullup gegen die 3,3V (Vcc des BCM) des RasPi gelegt wird. Derzeit ist, wenn ich richtig gelesen habe der Pullup gegen 5V gelegt, dass ist falsch und kann, wenn auch nicht sofort den GPIO, wenn nicht sogar den ganzen RasPi zerstören.
    Störungen beim DHT kommen oft zustande, weil die Betriebsspannung von 5V (PIN2, Pin4) des RasPi abgenommen wird. Das kann man machen, besser ist es jedoch dem Sensor eine eigene Stromversorgung zu spendieren und nur mit Data (Pullup gegen 3,3V) und Masse zum Sensor zu gehen. Möchte man nur ein Netzteil nutzen, sollte man mindestens versuchen, die 5V vor dem RasPi aufzuteilen. Die Leitungen auf dem Board liegen so dicht zusammen, dass sie die so schon recht empfindlichen GPIOs beeinflussen.
    Ich nehme an, Du hast für jeden DHT einen extra GPIO benutzt und 1wire nicht damit vermischt. Auch das wäre ein Grund für fehlerhafte Anzeigen. Über die Zeit für die Abfrage wurde hier schon richtig geschrieben, lieber etwas mehr Zeit geben, denn die ganzen Abfragezeiten summieren sich.

  • Hallo zusammen,

    Rosty:
    Danke für deine Antwort, dass die Eingänge "nur" 3,3V dürfen war mir noch nicht bewusst.
    Was die Temperatur des Pi angeht... der hängt in nem Kasten im Gewächshaus und es war echt Warm!

    @raspiproject:
    Vielen Dank für deine Ausführung! Ich zerpflücke mal deine Punkte...
    - Es wird ein "nackter" DHT11 verwendet.
    - Ich muss leider zugeben, dass die Datenleitung momentan gegen 5V gezogen wird. (hoffe mein Pi hat dabei keinen Knaks davon getragen :s ) Ich werde das bald möglichst korrigieren und die Datenleitung gegen 3,3V pull-uppen ;) .
    - Wo genau liegt das Problem bei einer gemeinsamen versorgung von Pi und DHT?
    - Ein komplett getrenntes Netzteil würde ich gerne vermeiden, reicht es die vor dem Pi abgegreiffene Spannung mit nem C zu puffern?
    - Jup, klaro hat jeder DHT einen eigenen GPIO :rolleyes: , wobei mir eine Handhabung wie bei den DS18B20 lieber wäre... :)
    - Was hast du damit gemeint ?

    Zitat

    Über die Zeit für die Abfrage wurde hier schon richtig geschrieben, lieber etwas mehr Zeit geben, denn die ganzen Abfragezeiten summieren sich.

    viele Grüße

    DaZeller


  • - Ich muss leider zugeben, dass die Datenleitung momentan gegen 5V gezogen wird. (hoffe mein Pi hat dabei keinen Knaks davon getragen :s ) Ich werde das bald möglichst korrigieren und die Datenleitung gegen 3,3V pull-uppen ;) .
    - Wo genau liegt das Problem bei einer gemeinsamen versorgung von Pi und DHT?
    - Ein komplett getrenntes Netzteil würde ich gerne vermeiden, reicht es die vor dem Pi abgegreiffene Spannung mit nem C zu puffern?
    - Jup, klaro hat jeder DHT einen eigenen GPIO :rolleyes: , wobei mir eine Handhabung wie bei den DS18B20 lieber wäre... :)
    - Was hast du damit gemeint ?

    Den Pullup solltest Du wirklich so schnell wie möglich ändern.

    Die GPIOs sind sehr empfindlich, da ist bei der Gemeinsamen Versorung erst mal das Problem der Leitungskapazität, wenn Stromversorung und Daten den gleichen Weg haben. Zusätzlich wird Data beim Datenfluss gegen GND gezogen, und das sehr schnell, da wirkt die Versorgungsleitung wie eine Antenne und kann am RasPi ein Feedback auslösen. Das ist vergleichbar mit dem Netzbrumm bei Verstärkern, nur dass es sich hier auf die Datenqualität auswirkt. Und zudem verbraucht der RasPi unterschiedlich viel Strom beim Arbeiten. Dadurch schwankt die Spannung (je nach Netzteil) am Sensor, auch das stört.
    Puffern hilft, aber aufpassen. Schaltnetzteile reagieren je nach verbauter Elektronik manchmal zickig auf eine defakto Kurzschluss durch einen Kondensator.

    Handhabung wie DS18B20 geht nicht, da die Teile nicht 1wire konform / busfähig sind.

    Meine Aussage war vielleicht nicht ganz eindeutig. Sie bezog sich nicht auf zwei DHT11, denn die Sitzen an zwei GPIOs. Wenn Deine Software in Ordnung ist, kann sich da nichts summieren. Im DHT11 sind Luftfeuchte und Temperatursensor vereint, jeder dieser beiden Sensoren benötigt Zeit, um den analogen Wert Digital aufzubereiten und zu senden. Dabei wird keine Prüfung gemacht, ob der Empfänger das Signal erhalten hat, sondern nur eine Bitfolge angehängt, anhand der geprüft werden kann, ob die Daten richtig übertragen wurden(CRC). Fragst du zu früh ab, kommt der Datenstrom nicht komplett an. Man muss also Unterscheiden, ob es einen CRC-Fehler gibt (der dann auch angezeigt wird und ein Zeichen für Probleme bei der Datenübertragung ist) oder Unsinn angezeigt wird, als Zeichen für einen Zeitfehler (muss nicht, ist aber oft so).

  • Hallo zusammen,

    ich habe meine HW nochmal geprüft und zu meinem Erstaunen hatte ich beim Verdrahten wohl mehr gedacht als mir das noch in erinnerung war (oder einen glücklichen Fehler gemacht ;) ). Denn ich hatte die Datenleitung tatsächlich bereits gegen 3,3V gezogen.

    Für das Problem der Spannungsversorgung habe ich leider noch immer keine adequate Lösung gefunden. Ich habe nunmal einen "Schaltkasten" mit einem 5V Hutschienen-Netzteil, zur (gemeinsamen) Versorgung von Pi und Peripherie, darin.
    Weitere Netzteile würde ich gerne vermeiden, da mit einerseits der Platz aus zu gehen droht und ich andererseits weitere (unnötige) verlustleistung im Schaltkasten vermeiden möchte, da ich ohnehin schon ein Temperaturproblem habe. :(
    Was ich mir evtl. vorstellen könnte, wäre den Pi oder die Peripherie über einen 5V/5V DC/DC-Wandler zu versorgen, damit hätte ich ja soweit "unabhängige" Versorgungsspannungen.

    einen schönen Abend

    DaZeller

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!