Personenwaage
Februar 2021
Related Pages
- Heimautomatisierung
- Sensor ESP
- Multiroom Audio
- IoT Doppelrollo
- Personenwaage
Eine Waage den Gewichtsverlauf anzeigen zu lassen wäre auch mit irgendwelchen Smart Scales kein Problem gewesen. Auch die Anbindung an MQTT und/oder Schreiben der Werte in eine Datenbank liesse sich mit einer Bluetooth to MQTT Bridge umsetzen.
Da ich jedoch bereits konkrete Anforderungen an die Funktionalitäten hatte kam für mich wieder mal nur ein Selbstbau in Frage.
Die Basis bildet ein 20mm dickes Stück Massivholz, welches auf ein Außenmaß von 300mm x 300mm gefräst wurde.
Vier Taschen in den Ecken dienen zum Einbau der Wägezellen. In der Mitte wurde Platz geschaffen für die gesamte Elektronik. In das Langloch, was auf den ersten Blick wie ein Tragegriff aussieht, wird ein 7-Segment Display eingelassen.
Die Nachbearbeitung bestand aus dem Abrunden der Kanten mit einer Oberfräse und dem Einölen.
Die Wägezellen lassen sich mit den Suchbegriffen “50kg Load Cell HX711” finden. Das Set besteht aus vier Elementen, welche jeweils bis 50kg ausgelegt sind und dem Load Cell Amplifier Chip “HX711”. Zur korrekten Verdrahtung habe ich die Anleitung von circuitjournal.com herangezogen. Softwareseitig habe ich die Library von bogde verwendet.
Die Ansteuerung erfolgt wieder einmal mittels ESP8266 auf einem Wemos D1 mini board. Zur Stromversorgung wird ein 370mAh 2S LiPo mit eingebaut.
Ähnlich zum Belichtungsmesser kommt auch hier eine selbsthaltende Transistorschaltung zum Einsatz mit dem Unterschied, dass statt eines mechanischen Schalters ein kapazitiver Berührungssensor angeschlossen werden soll. Dieser benötigt eine Versorgungsspannung von etwa 3V - 5V, die durch den Spannungsabfall einer LED von der Akkuspannung (6V - 8.4V) gewonnen wird. Der Standbystrom des Berührungssensors ist im Vergeleich zu dem Verbrauch bei täglicher Nutzung unbedeutend gering. Da die Latchschaltung mit Transistoren oft etwas Probleme mit nachgeschalteten Schaltreglern hatte nutze ich hier nur eine Diode, um die Maximalspannung nicht zu weit über 5V für den ESP zu halten.
Der fertige Code für den ESP ist hier zu finden: repos.ctdo.de/interfisch/scale
Für die Kalibrierung habe ich zuerst acht volle Flaschen auf einer Küchenwaage gewogen. Das doppelte davon, also 15,194 kg wiegen dann 16 Flaschen, die auf der Waage platz finden. Der Messwert von 340090 Einheiten (Funktion get_units) teile ich dann durch das Gewicht und erhalte einen Kalibrationswert von 23960.
Zuletzt müssen die Komponenten noch verstaut werden. Mit einem Proxxon Multifunktionswerkzeug und einem kleinen Fräser liessen sich Rillen für die Kabel fräsen. Etwas Heißkleber hilft dabei, sie dort zu fixieren.
Insgesamt drei Platinen (Latch Schaltung, Wemos, HX711) sind mittels kurzer Distanzschrauben an das Holz mit zwei-komponentenkleber angebracht.
Das rote 7-Segment Display mit vier Stellen “0.36” inch 7-Segment 4-Digit LED Display TM1637" sitzt auf einer Sperrholzplatte, die von unten in die vorgesehene Aussparung geklemmt wird. Um die Waage aufzuladen muss der 2S Lipo vom Klettband abgezogen werden und mit einem Modellbau Ladegerät aufgeladen werden. Einen entsprechenden Laderegler mit BMS hatte ich nicht zur Hand. Da ich aber die Akkuspannung messe und bei jedem Einschalten übermittle, kann ich mir eine Warnung frühzeitig anzeigen lassen. Aktuell scheint sie aber mehrere Monate durchzuhalten.
Von oben sieht sie recht schlicht aus. Mein Plan ist also aufgegangen.
Banana for scale.
Und hier mal ein Beispielverlauf über 30 Tage. Das Raster der y-Achse entspricht 1 kg pro Linie.
Zurzeit stelle ich mich fast jeden Abend und jeden Morgen einmal drauf. Dabei misst die Waage alle 100 ms (MEASURE_INTERVAL) das Gewicht und legt es zyklisch in einem 40 Elemente (READING_FILTER_SIZE) langen Array ab. Die Filterung passiert dann durch Mittelwertbildung der 10 mittleren Werte (MEANVALUECOUNT**2) des sortierten Arrays. Dieser angepasste Medianfilter brachte stabile Werte mit dem Nachteil der hohen Latenz von READING_FILTER_SIZE/2MEASURE_INTERVAL, also 2 Sekunden.
Ein Messwert wird als stabil verstanden, sobald die Differenz zwischen höchstem und niedrigstem Wert im Filterarray geringer als 200 g (MAXSPREAD) ist. Solange die Waage eingeschaltet ist werden die minimalen und maximalen stabilen Messwerte gespeichert. Die Differenz ist dann das gemessene Gewicht. Sobald dieses 50 kg (MIN_WEIGHT_DIFFERENCE) überschreitet wird es per MQTT gesendet.
Eine Rückmeldung wird dann in Nodered generiert und im Display angezeigt. Danach schaltet sich die Wage von selbst aus.
Alle genannten Werte lassen sich über defines im Code anpassen. Siehe dazu in der src/main.cpp
Nachtrag: Ther nachfolgende Graph zeigt die Akkuspannung pro Zelle von voll geladen bis das BMS die Stromversorgung trennt. Mit dem älteren 370 mAh 2S LiPo reicht eine Ladung für zweieinhalb Monate. Bei kurzzeitigen Nutzung von zwei mal pro Tag.
Damit die Abdeckung über dem Display nicht nach unten gedrückt werden kann kam ein Abstandshalter um die Segmentanzeige. Des Weiteren fehlte noch eine Abdeckung für die Elektronik, da einzelne Kabel schonmal unter dem Brett eingeklemmt werden konnten. Mit Plexiglas und ein paar 3D-Druck Teilen war das kein Problem.
Und zum Schluss noch ein Bild aus der Nutzerperspektive.
- Code and Design files: repos.ctdo.de/interfisch/scale/















