BOB-Software Hiverize/FiPy vom 2.11.2019

Ich habe gestern nach der Anleitung, Firmware und BOB-Software des FiPys updaten Firmware und BOB-Software aktualisiert. Leider lies sich Pymkr nicht so einfach updaten, so dass ich alles neu installiert habe.
Mit dem Firmware-Updater lies sich die Firmware 1.20.1.r1 problemlos einspielen.
Leider lief Atom mit dem neuen Pymkr beim Update der BOB-Software nicht so problemlos. ich musste mehrfach neu starten, was mir früher nur selten passierte.
Die BOB-Software startete dann zwar, aber die Konfiguration über den Accesspoint lief recht hakelig und brauchte mehrere Anläufe.

Inzwischen kenne ich die Konfigurations-Dateien, und für mich wäre es einfacher, nur die Dateien zu editieren. Wir sollten das in die Doku für Fortgeschrittene aufnehmen.
Nach dem die Konfiguration erfolgreich war, läuft die BOB-Software seit heute 8 Uhr mit einer Messung alle 5 sec. Jetzt gab es die 10500 ste Messung ohne Absturz. Das war früher selten.
Doch bei den Messungen habe Verbesserungsvorschläge. Zufrieden bin ich mit den Messungen des BME280:


Der BME280 hat über 30000 Messungen ohne Ausreisser geliefert.
Die Darstellung der Messwerte mit 3 Nachkommastellen ist sinnlos oder auch falsch. Ein BME280 kann nie mit einer Auflösung oder gar Genauigkeit von 1/1000 °C messen. Ausserdem werden Übersichtlichkeit und Übertragungskapazität ( LoRa ) verschwendet.

Die Waage mit dem HX711 misst ziemlich gut:


Doch die 5 Ausreisser stören optisch sehr. Die sollte man erkennen und überspringen. Es ist eindeutig, dass sich das Gewicht nicht derart verändern kann. Man erkennt auch die Temperaturdrift der billigen China-Wägezelle.

Unzufrieden bin ich mit den Messergebnissen der DS18B20:


Die vielen Ausreisser sind nicht zu akzeptieren. Der BME280 kann das viel besser! Da gab es auch schon viele Diskussionen. Ob man die Ausreisser an Messwertsprüngen oder mit dem CRC-Check erkennt, ob man den falschen Wert auslässt oder durch den letzen guten ersetzt, ist eigentlich egal. Aber man muss dringend etwas tun, bis man die Ursache gefunden hat. Vermutlich ein Timing-Fehler im Onewire-Treiber.

Der 5. DS18B20 liefert beim Messen nur “none”, obwohl er bei der Konfiguration gut funktionierte. Ich werde nach dem Fehler suchen.

3 Likes

Hi Didi,

vielen Dank für Deine Tests.

Beobachtungen

Better than nothing

Bei Untersuchung und Verbesserung des Timings bei der Ansteuerung der DS18B20 Sensoren unter MicroPython haben wir dank der Implementierung von @robert-hh herausgeholt, was herauszuholen ist. Mehr geht derzeit leider nicht ohne größere Aufwände.

Unter Diskussion über die Ansteuerung der Sensordomäne auf Pycom Geräten gibt es einen Beitrag, um die Diskussion ggf. fortzusetzen.

Viele Grüße,
Andreas.

Ich habe gestern die BOB-Software überarbeitet. Beim BME280 habe ich die Ausgabe auf 1 Nachkommastelle begrenzt und beim HX711 erkenne ich Messwertsprünge ( z.Z > 15 kg ) und sende den letzten Wert. Damit sind die Ausreisser weg, wie man an den Messungen von 0 Uhr bis jetzt erkennt:


Sehr auffällig ist das Temperaturverhalten der China-Wägezelle. Das ist bei der Bosch H40A sehr viel besser.
Die DS18B20 habe ich noch nicht angefasst.

Hi Didi,

Im Nachgang zu unserem Telefonat will ich Dir gerne noch einmal “hands-on” die folgenden beiden Dinge ans Herz legen.

  1. Bitte schalte doch einfach den Garbage Collector während des Auslesevorgangs komplett ab, wie bei Disable garbage collector when reading sensors to improve timing · hiveeyes/hiveeyes-micropython-firmware@a62b193 · GitHub zu sehen. Das löst gerade beim Auslesen des HX711 die Probleme vermutlich grundlegend, siehe auch Timing things on MicroPython for ESP32 ff.

    Die Art und Weise der Kompensation von Meßwertsprüngen kann z.B. bei der Justierung der Waage arge Probleme bereiten.

  2. Verwende doch gerne, wie bei Untersuchung und Verbesserung des Timings bei der Ansteuerung der DS18B20 Sensoren unter MicroPython herausgefunden, den verbesserten onewire.py Treiber von @robert-hh.

    Er hatte ihn damals per onewire.py: Optimize timing, enable CRC check and slim the code by robert-hh · Pull Request #62 · pycom/pycom-libraries · GitHub beigetragen, was jedoch bei Pycom leider auf wenig Resonanz stieß.

Viel Erfolg bei alldem!

Herzliche Grüße,
Andreas.

1 Like

HX711 Treiber

Achso, mir fällt dazu gerade ein, dass wir an dieser Stelle doch auch die MicroPython-Treiber für den HX711 entsprechend verbessert hatten – gegenüber den Varianten, wie sie im Netz oder anderswo zu finden sind.

Unter anderem haben wir uns diesbzgl. im Zuge von Strom sparen beim Einsatz der MicroPython-Firmware im Batteriebetrieb um die Angelegenheiten rund um power_up() und power_down() gekümmert.

Die in den Treibern verwendete Ansteuerung der Logging-Bibliothek müsste man ggf. entfernen, wenn man sie nicht als Abhängigkeit im Programm haben will.

Usage

Nach dem üblichen Setup per set_scale() und set_offset() steuert man den Auslesevorgang dann dann über die get_reading() Methode an. Das gibt ein Werteobjekt zurück, in dem das Attribut "kg" das Gewicht in Kilogramm enthält. Die get_data()-Methode liefert alle Werte zurück, auch "offset", "scale" und v.a. "raw", was man für die Justierung der Waage benötigt.

Nochmal kurz zusammengefasst:


# Setup.
hx711 = HX711Heisenberg(pin_dout, pin_pdsck, gain)
hx711.set_scale(...)
hx711.set_offset(...)

# Acquire reading.
reading = hx711.get_reading()

# Get value in Kilogram.
value_kg = reading.kg

# Get all data, including raw values.
all_data = reading.get_data()
1 Like

Ich bin nun die DS18B20 angegangen und habe den GarbageCollector ab 8:30 vor dem Messen abgeschaltet mit gc.disable() und danach wieder an mit gc.collect()


Leider erkennt man ab 8:30 bis 14:50 keine Verbesserung.
In der Zeit von 10:15 bis 11: 20 war der Akku leer, daher keine Messungen.

Ab 14.50 dann meine Ausreisser-Erkennung: wenn die Temperaturveränderung innerhalb 5 Sekunden grösser als 2 °C ist, wird der letzte Wert genommen.
Beispiel:
20:15:15 25.5°C
20:15:20 25.5°C
20:15:25 85.0°C # falscher Wert
20:15:30 25.5°C
20:15:35 25.5°C
Es ist sicher nicht falsch, wenn ich den Wert 85.0°C von 20:15:25 durch den Wert 25.5°C von 20:15:20 ersetze. Die Temperatur kann in so kurzer Zeit nicht solche Sprünge machen.

Ich habe im Netz 2 Varianten von onewire.py gefunden. Die werde ich als nächstes testen.

BME280 und HX711 messen jetzt sauber:

1 Like

Hier ist der Direktlink:
https://raw.githubusercontent.com/pycom/pycom-libraries/dabce8d9/examples/DS18X20/onewire.py

Nach der Ausreisser-Bereinigung messen die DS18B20 sauber mit einer Auflösung von 0.1°C


Obwohl sie in einer Schachtel zusammen liegen, zeigen sie Unterschiede von bis zu 0.3°C an, der BME280 zeigt 1°C mehr an.
Doch was ist die echte absolute Temperatur? In einem Bienenstock interessiert mehr die relative Temperatur zwischen den Messtellen. Deshalb kann ich die DS18B20 auf einen bestimmten Mittelwert korrigieren. Im Test nehme ich die Temperatur des BME280 und erhalte ab 8 Uhr folgenden Temperaturverlauf.

Was haltet Ihr von dem Verfahren?

1 Like

Hi Didi,

Ist das Ergebnis diesmal aufgrund des von @robert-hh verbesserten onewire.py?

Viele Grüße,
Andreas.

Die onewire.py habe ich noch nicht untersucht, aber ich habe mir einen Mini-Logicanalyzer bestellt.

In der Datei main.py (15,1 KB) sind folgende Änderungen:

hiverize/FiPy/main.py
Änderungen von Didi Lamken
5.11.2019 BME280 Messwerte 1 Nachkommastelle
5.11.2019 HX711 Messwert-Ausreisser entfernen
6.11.2019 gc (Garbage Collector) ( hat nichts gebracht )
8.11.2019 LED-Anzeige
9.11.2019 DS18B20 Messwert-Ausreisser entfernen
10.11.2019 DS18B20 Messwert-Korrektur

1 Like

Leider gab es heute einen Ausreisser in t_i_1, der nicht erwischt wurde. Ansonsten bin ich zufrieden mit der Darstellung der Temperatur auf meinem Schreibtisch.


Ab 8:20 Uhr wurden die Werte der DS18B20 auf den des BME280 umgerechnet.

Da wir nicht wissen was der richtige Wert ist, würde ich da erst mal nichts korrigieren oder umrechnen!! Wenn wir doch einmal absoute Temperaturen von verschiedenen Völkern / Imkern vergleichen wäre es doof, wenn die DS18B20 unterschiedlich nachjustiert werden.

2 Likes

Die Sensoren messen alle im Rahmen ihrer Toleranz genau. Dummerweise gibt bei mir ein Sensor 1°C mehr aus als ein anderer, obwohl alle gleich warm sind. So kann man dann in der Beute keine Temperaturdifferenzen kleiner als 1°C auswerten.
Wenn man sie abgleichen wurde, könnte man besser kleine Temperaturdifferenzen ( z.B. zwischen Mitte und Seite der Wintertraube ) beachten.
Noch besser wäre es, man könnte mit einem geeichten Thermometer abgleichen.