Bei meinen Tests bleibt ja immer auch die Unsicherheit, ob denn die Erde wirklich so feucht ist, wie der jeweilige Sensor anzeigt oder ob die Pflanze schon kurz vor dem vertrocknen ist, weil der Sensor spinnt.
Kam ich doch auf die Idee, einfach das Gewicht des Topfes zu ermitteln: Beim gießen schüttet man ja so ca. 150-200ml Wasser drauf, das sind also etwa 150-200g Gewichtszunahme des Topfes. Das Wasser wird einerseits von der Pflanze aufgenommen, weiterhin verdunstet ein Teil.
Natürlich entsteht neue Pflanzenmasse durch Wachstum, diesen Teil des Gewichtszuwaches kann zunächst vernachlässigen. Eine Kompensation diese Zuwachses ist geplant.
Herkömmliche Haushaltswaagen haben (mindestens) 3 entscheidende Nachteile:
- keine Dauermessung möglich (Abschaltung nach 2-4 Minuten)
- nach dem Wiedereinschalten wird durch die Kalibrierung „0“ angezeigt…
- keine Aufzeichnung im HomeLan möglich (schon gar nicht per WLAN oder Bluetooth)
Ich habe mich für eine eigene Umsetzung entschieden:
Man nehme:
- einen Wäägebalken (entweder aus einer „alten“ elektronischen Küchenwaage oder ein gekaufter mit einem Gewichtsbereich von 2-10kg (aktuell setze ich einen 10kg-Wäägebalken ein, der aber locker auch 700g „aufs Gramm genau“ auflöst.
- einen HX711 als Messverstärker (+ Umsetzer/Interface) für den Mikrocontroller
- einen Arduino oder ESP8266-12 / NodeMCU oder einen RaspberryPi … für die Datenabfrage und Auswertung.
NodeMCU (ein ESP8266 mit externer Beschaltung zum Entwickeln)
Konkret habe ich jetzt eine Node-MCU (ESP8266 + ein paar Bauteile) + ein LCD-Display im Einsatz, da ich das Gewicht direkt am Topf anzeigen lassen will, andererseits aber auch die Daten an meine Messwertdatenbank senden will: Da das ganze stationär betrieben wird, spielt der Stromverbrauch eine untergeordnete Rolle (kein Batteriebetrieb!).
Aufbau
Als Montagehilfe für den Wäägebalken habe ich Restteile einer zerlegten Küchenwaage verwendet. Wichtig ist jedoch lediglich, dass unter den Teil des Wäägebalkens mit den grösseren Löchern etwas untergelegt wird, was den Balken so anhebt, dass das andere Ende des Balkens frei in der Luft schwebt (ca. > 2mm). Dazu genügen auch 2-3 passende Unterlegscheiben..
Bei mir sieht das dann so aus:
Die Anschlussdrähte des Balkens werden mit dem Messverstärker HX711 verbunden (hier die Farben, welche ich bei meinen Balken vorgefunden und wie verbunden habe:
Schwarz an E+, Rot an E-, Grün an A+, Weiß an A-
Der Anschluss des Messverstärkers geschieht per I2C an den NodeMCU ist etwas gewöhnungsbedürftig, da die ESP8266 – GPIO-Zuordnung und die Platinenbeschriftung nicht wirklich etwas miteinander zu tun haben. In meinem Sketch im Github-Repository ist die Belegung entsprechend dokumentiert.
Datenausgabe/Speicherung
Für die direkte Anzeige vor Ort ist ein kleines LCD Display angeschlossen (ein 2-zeiliges LED-Display tut es aber ebenfalls, braucht nur mehr Anschlussleitungen …).

Das Display zeigt die aktuelle Zeit/Uhrzeit und den Wochentag an, weiterhin natürlich das aktuelle Gewicht (Die Ausgabe soll noch um eine Grafik des Gewichtsveränderung erweitert werden, später 🙂 ).
Zusätzlich lasse ich die IP-Adresse ausgeben, unter welcher die Waage erreichbar ist (dazu später mehr).
Mehr zu Kontrollzwecke erfolgt dann noch die Ausgabe des freien Heap-Speichers und der internen Loop-time (Dauer eines Messzyklus).
Der Sketch
Das Wesentliche an der Waage ist der steuernde Sketch (sonst wäre es eine gewöhnliche Küchenwaage).
Der Sketch befindet sich in aktuell der Beta-Phase (funktioniert aber schon sehr gut und ist im aktiven Einsatz, die Dokumentation ist ebenfalls noch dürftig… )
Dank
Der Sketch verwendet Teile eines Sketches eines guten Freundes (dreamshader aus dem Raspberry-Forum) als Basis für die Displayausgabe.
Weitere Teile und Bibliotheken sind von mir aus der Open-Source Community übernommen, angepasst und sinnvoll kombiniert worden und natürlich ist auch eigener Hirnschmalz eingeflossen 😉
Quelle und Hinweis
Der Sketch ist verfügbar unter https://github.com/Zentris/weighbridge.
Da ich sporadisch weitere Funktionen (automatischen Kalibrierung, Biomassen-Kompensation usw.) und natürlich Fehlerkorrekturen machen werde, ist es eine gute Idee, hier ab und zu mal reinzusehen… (RSS Feed verfügbar!) und/oder ein „Watch“ auf das Repositoy zu setzen.
Features
- Zyklische Messung (ca. 5sec, konfigurierbar) des Gewichts der aufliegenden Masse grammgenau (höhere Genauigkeit möglich).
- Anzeige des aktuelle Gewichts auf einem Display
- Ermittlung der aktuellen Zeit/Datum per NTP (aus dem Internet oder von einem lokalen NTP-Server), Anzeige der Zeitinformation.
- Senden der Gewichtsdaten an einen eigenen, konfigurierbaren Thingspeak-Account (abschaltbar).
- Bereitstellung einer HTML-Serverschnittstelle (deshalb die IP Ausgabe auf dem Display, da die lokale Adresse per DHCP bezogen wird), welche die Abfrage des Gewichts und weitere Daten gestattet (REST-ähnliches Interface, wird ausgebaut)
- Halb-Automatische Null-Kalibrierung
Geplante Erweiterungen
- Speicherung der letzten xxx Messdaten (Anzahl oder Zeitraum, konfigurierbar) in EEPROM des ESP8266, Abfrage per REST-IF möglich
- Speicherung der Daten auf einen per REST-IF erreichbaren Datenserver zur Langzeitspeicherung/Auswertung
- Halbautomatische Kompensation Biomasserzuwachs (spezielle Erweiterung für die Erdfeuchtebestimmung über das Topfgewicht)
- Temperatur/Luftfeuchtefühler (DHT22)
… und es geht weiter 🙂
Edit:
Nachdem ich eine Temperaturdrift des HX711 festgestellt habe, arbeite ich jetzt an einer Lösung, seht dazu auch den Beitrag https://www.n8chteule.de/zentris-blog/sensoren/hx711-temperaturdrift-analysieren/
DHT22 währe cool. Könnte man bei dem Typen mit dem Giesomaat Bausatz mitbestellen.
Vielleicht gibt der ja auch Mengenrabatt, wenn man mehr kauf 😀
Danke, tolle Arbeit!
Eine Frage:
Wie hast du den Wägebalken kalibriert?
oder wie kommst du auf die Werte von:
static const float divisor = 100.0;
static const float factorCalibrate2g = 199.0/428.0;
static float correkture2null = 82244.8 – 33.5;
Wäre für mich sehr interessant zu wissen.
Sry für die lange Wartezeit auf die Antwort:
Als erstes den Wert aus dem Wandler für die unbelastete Waage bestimmen.
Dann ein definiertes Gewicht (Messbecher mit Wasser auf 1kg mit der Haushaltswaage eingemessen) drauf stellen und wieder ablesen.
1kg Wert / 0kg Wert ist nun die Steilheit bzw. Empfindlichkeit der Waage.
Diesen Wert (z.B. 1234) nun auf deine Ausgabegenauigkeit kalibrieren (das ist der Wert „factorCalibrate2g“)
Der Faktor „correkture2null“ kommt ins Spiel, wenn du eine „Null g Drift“ feststellst: Mein Wandler driftet temperaturabhängig, so dass ich da eine Nullpunktkorrektur habe…
War das soweit verständlich?
Hallo,
ich habe eine Idee, das die Waage die Messergebnisse in Google Tabelle (Sheet) einträgt. Eine Anbindung an Google Tabellen funktioniert bereits.
http://esp32-server.de/google-sheets/
Mir fehlt nur die Kommunikation mit HX711. Ich hoffe ich werde es schaffen, den Code für ESP32 zu portieren