Ich verwende Maxim DS18x20 (ich habe tatsächlich mehr als eine Variante) 1-Draht-Temperatursensoren, um die Temperaturen in verschiedenen Räumen in meinem Haus einmal pro Minute zu protokollieren. Bei ungefähr einer Lesung von tausend bekomme ich etwas völlig Falsches zurück. In der Mitte einer Sequenz, die allmählich von 65F auf 70F ansteigt, erhalte ich so etwas wie -32,1F oder 15,64F.
Hat jemand anderes ein solches Problem gehabt oder stimmt etwas mit meinem Setup nicht? Wenn dies nur ein bekanntes Problem mit diesen Dingen ist, muss ich so etwas wie drei Lesungen machen und den Ausreißer rauswerfen.
Nur ein paar Aussagen zu meinem Setup:
- Ich laufe mit 3,3V
- Ich überprüfe die Prüfsumme des Lesens, wenn es zum Arduino zurückkehrt, und es stimmt überein (oder ich denke es tut - es könnte immer einen Fehler in diesem Code geben).
- Diese haben keinen normalen Strom mehr, keinen Parasitenstrom.
- Ich habe den 4,7K Pullup-Widerstand installiert.
- Ich verwende nur einen einzigen Sensor auf jeder Sensorplattform.
- Der Sensor befindet sich auf einer Platine, die an das Arduino angeschlossen ist, das ihn liest.
- Ich sehe das gleiche Problem beim Lesen aus einer Vielzahl verschiedener Arduinos (Diecimilla, Pro-Mini, hausgemachter Brauch).
quelle
Wenn Sie die Quelle der fehlerhaften Messwerte nicht finden können, sollte es einfach sein, sie herauszufiltern und aus früheren Messwerten zu extrapolieren oder zwischen Messwerten zu interpolieren, wenn Rückblick wichtig ist. Da Sie einmal pro Minute abtasten, können Sie sogar nur den letzten Messwert kopieren. Die Raumtemperatur wird sich in einer Minute kaum ändern.
quelle
Dies kann daran liegen, dass die Steuerung unter bestimmten Hochlastbedingungen ein oder mehrere Bits der Temperaturantwort falsch liest, oder daran, dass elektrische Störungen ein oder mehrere Bits verfälschen.
Schauen Sie sich das Datenblatt hier genauer an: http://www.rentron.com/Files/ds18b20.pdf
Auf Seite 5 wird gezeigt, dass die genaue Binärsequenz für 85C wie folgt lautet:
+85°C 0000 0101 0101 0000
Ebenso ist es für 25C:
+25.0625°C 0000 0001 1001 0001
In einigen Fällen erhalten Sie einen Wert, der der tatsächlichen Temperatur entspricht, ausgedrückt in binär und bitverschoben. Oft ist dies 1 / 2x der Zielwert in C.
Manchmal kann es zu elektrischen Störungen in der Leitung kommen, und der Controller liest ein ganzes Halbbyte von 1s. In diesem Fall erhalten Sie eine Zahl wie 15,64, die in Binärform tatsächlich sehr nahe an Zahlen zwischen 65 und 70F liegt, außer bei ein paar Einsen am Anfang.
quelle
Für das, was es wert ist, habe ich vor ein paar Monaten ein bisschen mit dem DS18B20 gearbeitet. Ich habe ein kurzes Video gedreht und einen Artikel in meinem Blog geschrieben, der Links zu Beispielen und Beispielcode enthält. Hoffe das kann ein bisschen helfen! http://dailyduino.com/archives/552
quelle
Ich habe seit ungefähr vier Jahren 13 von ihnen in meinem Haus. Die Datenbank ist nicht mehr schwer zu handhaben (ich habe alle Proben im Auge behalten). Aber ich habe dieses Verhalten nicht gesehen. Stattdessen friert ab und zu ein Sensor ein und blockiert alle anderen. Der einzige Ausweg (den ich gefunden habe) bestand darin, die Versorgungsspannung für einige Sekunden abzuschalten. Also habe ich meinem Board ein winziges Relais hinzugefügt und jedes Mal, wenn das Mikro dieses Verhalten erkennt, wird die gesamte Sensorkette zurückgesetzt. Das passiert ein paar Mal pro Woche.
quelle