Temperaturkompensation für Waage (Hardware/Firmware)

Die Temperaturkompensation für die Waage und vielleicht auch mehr ist wichtig, wenn wir ordentlichen Outdoorbetrieb anstreben. Am besten solide mit dem ADS1232 machen und nicht lange fackeln. Mindestens aber die Kabel kürzen.

Hier wird die Problematik näher beschrieben und detaillierter darauf eingegangen:

Hier finden sich auch noch ein paar mehr Ressourcen zum Thema und darüber hinaus:

1 Like

Der ADS1232 hat den Temperatursensor dabei, kompensiert damit aber auch nicht automatisch, wenn ich das richtig sehe.

Nein, automatisch geht das natürlich nicht. Wir brauchen noch entsprechenden Code, der das tut. Der Temperatursensor für die Kompensation sitzt so aber schonmal an genau der richtigen Stelle und kann damit exakt auf die Temperatur des Chips reagieren. Diese hängt vermutlich auch davon ab, wie lange er jeweils im Meßintervall läuft bzw. mit Strom versorgt wird.

kann keine breakout boards mit dem ads1232 nirgens finden.

Ja, leider.

2 Likes

Hallo,

meine Wägezelle (CZL601AC) ist auch recht Temperaturabhängig und habe nun versucht dies mittels der aktuellen Temperatur zu kompensieren. Habe mit verschiedenen Formeln experimentiert und finde, dass diese relativ einfache Formel bereits ein recht gutes Ergebnis liefert:

weight_compensated = current_weight + (current_temp - temp_offset) * compensation_factor

  • temp_offset ist die Temperatur während der Berechnung von offset und scale der Wägezelle.
  • compensation_factor ist ein zusätzlicher Faktor, welchen ich per numerischer Optimierung berechnet habe.

Um Daten zu bekommen, habe ich über mehrere Tage ein konstantes Gewicht outdoor gemessen (mit verschiedenen Gewichten wird es natürlich genauer).

Hier ist mein derzeitiges Ergebnis (linke Y-Achse ist das Gewicht in kg, rechts die Temperatur):

  • load_5 (grün) ist das Gewicht “nur” mittels offset und scale berechnet.
  • compensated_load_optimized (orange) ist das Temperatur-kompensierte Gewicht mittels der obrigen Formel.

Hier eine weiterer Screenshot mit genau 10kg auf der Waage.


Die Temperatur beim Kalibrieren war 20.7 Grad. Deswegen driftet das Gewicht ohne Kompensation bei niedrigeren Temperaturen nach unten.

Zumindest wurde die Schwankungsbreite verringert. Derzeit habe ich die Berechnung im Grafana, doch bin gerade dabei, dies in Terkin zu implementieren und werde den Sourcecode teilen. Die Formel kann dann immer angepasst werden.

3 Likes

Hallo,
die Implementierung der oben beschriebenen Temperaturkompensation in Terkin ist nun gepushed: implemented temperature compensation for hx711 sensors by WSt89 · Pull Request #84 · hiveeyes/terkin-datalogger · GitHub

Ich habe auch noch ein Python-Notebook, um den optimalen Faktor basierend auf gesammelten Daten zu berechnen:

CalcTempCompensationFactor.zip (1,2 KB)

Starten kann man es mit folgendem Kommando:
docker run --rm -p 8888:8888 -e JUPYTER_ENABLE_LAB=yes -v <LOCAL_PATH_TO_NOTEBOOK>:/home/jovyan/work jupyter/datascience-notebook

1 Like

Hallo Werner,

entschuldige bitte die späte Antwort. Wir kommen gerade erst wieder ein wenig zu weiteren Enwicklungsarbeiten an Terkin zurück, nachdem eine etwas längere Pause eingetreten war.

Herzlichen Dank für diesen Beitrag! Wir haben ihn gerade eben integriert, die Verbesserungen sind damit auch Bestandteil von Terkin 0.12.0.

Viele Grüße,
Andreas.

Hallo @Werner, hi Community
ich bin neu hier in der Community und möchte mich als erstes recht herzlich für das bereitsstellen den Python-Notebooks bedanken.
Ich bin auf dieses Forum gestoßen weil ich beim aufbauen meiner eigenen Waage den Fehler durch die Temperatur kompensieren möchte.
Wenn ich es richtig verstanden habe ist Grundprinzip die Temperatureabhängigkeit von Wägezellen vereinfacht über eine Geradengleichung abzubilden und mit der Steigung dann den Temperaturfehler zu minimieren.

Die Formel zu Komensation
weight = curr_weight + ((current_temperature - temperatureOffset)) * compensationFactor)

  • temperatureOffset = Temperatur bei der Kalibierung
  • compensationFactor = Steigung

Dein Notebook liefert mir

     fun: 14049578.647211663
 message: '\nOptimization terminated successfully;\nThe returned value satisfies the termination criteria\n(using xtol = 1e-07 )'
    nfev: 10
     nit: 4
 success: True
       x: -2.6928858611707756
21307644.35044237
CompensationFactor: 14049578.647211663

     fun: 14049578.647211663
 message: '\nOptimization terminated successfully;\nThe returned value satisfies the termination criteria\n(using xtol = 1e-07 )'
    nfev: 10
     nit: 4
 success: True
       x: -2.6928858611707756
21307644.35044237
CompensationFactor: 14049578.647211663

Fragen

  • Ist mein Verständis CompensationFactor = Slope korrekt?
  • Wieso weicht das Ergebnis deines Notebooks (=14049578.6) soll gravierend von der Steigung (=11.5) ab?
    slope = dy/dx = (11195-11080)/(26-16) = 11,5[gramm/°C]

Leider darf ich als neues Mitglied noch keine Anhänge hochladen, gerne kann ich dir meine log Daten zukommen lassen
Im Anhang das Notebook, meine Logdatei @Andreas dankeschön fürs Freischalten
CalcTempCompensationFactor_Andy.zip (1001,4 KB)

1 Like