Inhaltsverzeichnis
Vollautomatische Katzenwaage
Um das Körpergewicht meiner beiden Katzen Leonie und Leslie automatisch und vor allem regelmäßig zu erfassen, habe ich zwei vollautomatische Katzenwaagen entwickelt und gebaut. Diese werden unter den Katzentoiletten platziert und messen während des Toilettengangs das Gewicht der Katze, die ihr Geschäft erledigt. Da Leonie und Leslie unterschiedliche Körpergewichte haben, können die Waagen automatisch erkennen, welche Katze gerade auf der Toilette ist und das gemessene Gewicht entsprechend zuordnen.
Das Ergebnis der Messung wird zum einen auf einem LC-Display angezeigt, zum anderen aber auch über WLAN an meinen Server gesendet und in einer Datenbank gespeichert. Auf meiner IoT-Webseite werden die Daten dann grafisch dargestellt. Auf diese Weise lassen sich problematische Entwicklungen frühzeitig erkennen.
Leider sind meine beiden Katzen mittlerweile verstorben. Die oben genannte Seite zeigt daher mittlerweile eine „Flatline“ an. Das Gewicht insbesondere meiner kranken Kätzin immer im Blick zu haben war sehr nützlich, aber auch beunruhigend und traurig, als es mit ihr zu Ende ging. Die Waagen haben bis zum Schluss tadellos gearbeitet und weit über 20.000 Datensätze gesammelt.
Komponenten:
- Plattform-Wägezelle: H40A 100kg
- Wandler-Modul: SparkFun Load Cell Amplifier
- Mikrocontroller: Lolin D32 (ESP32)
- LC-Display: SparkFun 20x4 SerLCD - Black on RGB 3.3V
- Spannungsregler: 5V Step-Up/Step-Down Voltage Regulator S18V20F5
Anmerkung zum Status dieses Projekts
Mechanischer Aufbau
Das Kernstück der vollautomatischen Katzenwaage ist eine Plattform-Wägezelle: Die Entscheidung für eine Wägezelle der Firma Bosche fiel relativ leicht, da diese Wägezellen bei recht vielen der im Internet dokumentierten Waagenprojekten Verwendung finden. Aber welches der vielen Module ist geeignet? Grundsätzlich kommen Wägezellen aus den Baureihen H30A und H40A infrage. Bei der Auswahl ist zunächst die maximal zu erwartende Nennlast zu berücksichtigen. Die Katzentoilette wiegt mit Streu 15 bis 18 Kilogramm, mein Kater gute 5 Kilogramm und die Wägeplattform habe ich mit 2 Kilogramm kalkuliert. Bosche stellt eine Handreichung zur Verfügung, die bei der Auswahl der richtigen Wägezelle helfen soll. Demnach sollte die maximale Nennlast der Wägezelle so gewählt werden, dass auch Lastspitzen, die bspw. beim Aufsetzen der Last entstehen können, die Wägezelle nicht beschädigen können. Außerdem sollte auch ein Eckenlastzuschlag für eine mögliche Ungleichmäßigkeit der Lastverteilung berücksichtigt werden. In der Regel, heißt es in dem Dokument, sollte die Wägezelle so gewählt werden, dass deren maximale Nennlast um den Faktor zwei bis drei über der zu erwartenden Nennlast liegt. Für meine Katzentoilette sollte die maximale Nennlast also zwischen 50 und 75 Kilogramm liegen. Meine Wahl fiel letztendlich auf eine Wägezelle der Baureihe H40A, mit einer maximalen Nennlast von 100 Kilogramm. Diese ist im Unterschied zu den Wägezellen der Baureihe H30A für Plattformgrößen von 500 mal 500 Quadratmillimeter ausgelegt. Da die Grundfläche der Katzentoilette ungefähr 400 mal 500 Quadratmillimeter misst, fiel die Entscheidung nicht schwer.
Der mechanische Aufbau ist denkbar einfach: Die Plattformwägezelle wird mittig zwischen zwei sechs Millimeter starke Aluminiumplatten mit einer Kantenlänge von 342 mal 445 Quadratmillimetern verschraubt. Insgesamt hat die Konstruktion also eine Höhe von 52 Millimetern: Flacher bekommt man es nicht hin. Damit der Sensor sich zwischen den Aluplatten frei bewegen kann, haben die beiden Aluminiumplatten entsprechende Löcher. Alternativ hätten Taschen gefräst werden können, aus Kostengründen habe ich die Platten jedoch lasern lassen. Die Plattformwägezelle wird durch einen gedruckten Anschlag vor Überlast geschützt.
Die Elektronik ist in einem gedruckten Gehäuse untergebracht. Das Gehäuse besteht im Wesentlichen aus zwei Teilen. Das Chassis trägt alle Komponenten, also das Display, die Platine mit dem ESP32 und dem HX711 sowie den Spannungsregler. In die Basis sind zwei Magnete eingelassen, um einen Sockel mit dem Gehäuse verbinden zu können.
Elektrischer Aufbau
Das Kernstück der automatischen Katzenwaage ist die Plattform-Wägezelle H40A von Bosche. Diese wird mit dem SparkFun Load Cell Amplifier verbunden, der wiederum mit einem Lolin D32 verbunden wird. Vor allem für des Debugging habe ich der Kontrolleinheit ein LC-Display von SparkFun spendiert. Dieses Display ist aber auch im täglichen Betrieb eine nützliche Erweiterung, weil man das Gewicht der beiden Katzen im Blick haben kann, ohne jedes Mal die Internetseite aufrufen zu müssen.
H40A und SparkFun Load Cell Amplifier
- RED: rotes Kabel
- BLK: schwarzes Kabel
- WHT: weißes Kabel
- GRN: grünes Kabel
- YLW: violettes Kabel
- VDD: 3,3 Volt vom ESP32
- VCC: 5 Volt vom Spannungsregler
- DAT: GPIO 4
- CLK: GPIO 2
- GND: GND
Die Brücke auf der Rückseite des Boards muss geschlossen bleiben für 10 SPS (samples per second), um das Rauschen zu minimieren.
LC-Display
Um den Betriebszustand der Katzenwaage darzustellen wurde ein LCD von Sparkfun verbaut. Das Display zeigt beim Start an, mit welchem WLAN sich die Waage verbindet und welche Programmversion installiert ist. Im Betrieb zeigt das Display das aktuell gemessene Gewicht an, den Betriebsmodus (Taramodus bzw. Erkennungsmodus) sowie das zuletzt gemessene Gewicht für Leonie und Leslie. Seit Programmversion 0.2 wird angezeigt, wie oft Leonie und Leslie seit der letzten Toilettenreinigung auf dem Klo waren. Wenn mehr als drei Toilettengänge registriert wurden, signalisiert die gelbe Hindergrundbeleuchtung die Notwendigkeit einer Toilettenreinigung. Ab Programmversion 0.4 wird oben rechts im Display die aktuelle Uhrzeit angezeigt.
Display: HD44780U (kompatibel zu LCD1602); I2C-Adresse des Displays: 0x72
- SCL: GPIO 22
- SDA: GPIO 21
Da ich keine Bibliothek gefunden habe, die sich für den Lolin D32 kompilieren lässt und am Ende auch funktioniert, muss das Display direkt angesteuert werden, wie es hier beschrieben ist: https://learn.sparkfun.com/tutorials/avr-based-serial-enabled-lcds-hookup-guide/all#firmware-overview
Beispiele: https://github.com/sparkfun/OpenLCD/tree/master/firmware/Examples/I2C
Spannungsregelung
Für die Stromversorgung wird ein Pololu Step-Up-Step-Down-Regler (S18V20F5) mit einer Eingangsspannung zwischen 2,9 und 30 Volt und einer Ausgangsspannung von 5 Volt verwendet. Ein Spannungsregler ist nicht unbedingt notwendig, ich baue jedoch in alle Elektronikprojekte einen Spannungsregler ein, um die empfindliche Elektronik vor Überspannung und Verpolung abzusichern. (Hier liegen viele 9-Volt-Netzteile für Gitarren- und Bass-Effekte herum, die ebenfalls einen Niedervoltstecker haben, aber dann auch noch eine umgekehrte Polung haben.) Die Wahl fiel auf einen Step-Up-Step-Down-Spannungsregler, damit ich auch USB-Netzteile für die Spannungsversorgung nutzen kann.
Die Waage verbraucht mit einem handelsüblichen 5V-Netzteil ca. 1,1 Watt. Nach Sonnenuntergang ist der Verbauch aufgrund der Helligkeitsregelung der Displayhintergrundbeleuchtung sogar noch geringer (0,8 Watt).
Genauigkeit
Die Waage tariert sich automatisch, wenn eine Abweichung von +/- 1 Gramm von Null über- bzw. unterschritten wird. Wenn eine Katze die Waage (bzw. das Klo) betritt, hat sie ewta vier Minuten Zeit, ihr Geschäft zu erledigen. Die Sensordaten driften über einen längeren Zeitraum, über die Zeit von vier Minuten aber nur minimal. Daraus ergibt sich eine Genauigkeit von ca. +/- 1,25 Gramm. Problematisch ist allerdings, dass die Katzen nicht absolut still sitzen. Um die besten Messwerte zu finden, werden aus bis zu etwa 2400 Einzelmessungen die 50 aufeinanderfolgenden Messwerte mit der geringsten Standardabweichung von ihrem Mittelwert bestimmt. Deren Mittelwert wird als Gewicht der Katze gespeichert. Bei diesem Verfahren ergeben sich zwischen zwei Messungen nur selten unerklärliche, das heißt wahrscheinlich auf Messfehlern beruhende Abweichungen.
Der Nennkennwert der Wägezelle wird mit 2 mV/V angegeben. Bei einer Betriebsspannung von 5 Volt ist die Spannungsänderung über den gesamten Messbereich also gerade einmal 10 mV. Der HX711 verstärkt dieses Signal um den Faktor 128, also auf 1,28 Volt.
Datenbankstruktur
- ID: automatisch vergebene, fortlaufende Nummer
- scale_id: 0 für die Waage im Badezimmer, 1 für die im Flur
- cat_id: 0 für Leonie, 1 für Leslie
- cat_weight: das Gewicht der Katze
- cat_weight_sd: die Standardabweichung vom Mittelwert der einbezogenen Messwerte
- excretion_weight: das Gewicht der Ausscheidung
- excretion_weight_sd: die Standardabweichung vom Mittelwert der einbezogenen Messwerte
- created_at: automatisch vom Webserver vergebener Zeitstempel
Internetseite
Eine erste grafische Auswertung der Daten steht bereits. (Achtung: Da meine beiden Katzen leider verstorben sind, werden keine aktuellen Daten mehr angezeigt.)
Erläuterungen zur Übersicht: Die Messung des durchschnittlichen Gewichts ist sehr genau. Theoretisch ist eine Genauigkeit von +/- 1,25 Gramm bei jeder Messung möglich. Da die Katzen nicht einhundertprozentig ruhig sitzen, wenn sie ihr Geschäft machen, können praktisch Abweichungen von +/- 15 Gramm zwischen den Toilettengängen beobachtet werden, die nicht erklärt werden können (z.B. durch Futteraufnahme). Im Mittel sollten sich diese Messfehler gegenseitig auslöschen.
Die Zählung der Häufigkeit der Toilettengänge hat zwei Fehlerquellen: Erstens werden ausschließlich Toilettengänge gezählt, die länger als 15 Sekunden und kürzer als etwa vier Minuten dauern. Zweitens ist die Waage, nachdem die Katze die Toilette verlassen hat, für etwa 10 Sekunden aufgrund der Messung der Ausscheidung blockiert. Betritt die katze nach dem Verlassen der Toilette diese innerhalb dieser Zeit und erledigt ein zweites Geschäft, wird dieses nicht gezählt. Die Waage wäre dann mit der Tarierung beschäftigt, die so lange nicht gelingt, wie die Katze auf der Toilette ist. Erledigt die Katze zwei Geschäfte (z.B. das große und das kleine), ohne zwischenzeitlich die Toilette für mindestens zehn Sekunden zu verlassen, wird das nur als ein Toilettengang gezählt. Ab Programmversion 0.2 werden ausschließlich Toilettenbesuche gezählt, bei denen auch ein Geschäft erledigt wurde.
Programmierung
Wie bei den meisten meiner Projekte dokumentiere ich in diesem Bereich den Fortschritt der Programmierung der Katzenwaage. Die Links führen zu signifikanten Programmversionen.
Das Programm ist prinzipiell relativ einfach. Die Herausforderung ist, alle Toilettengänge automatisch zu erkennen und von Gewichtsveränderungen zu unterscheiden, die keine Toilettengänge sind, wie beispielsweise Toilettenreinigungen und das Nachfüllen von Streu. Für die Programmierung der Programmversion 0.1 habe ich alle Toilettengänge meiner beiden Katzen eine Woche lang videografiert und analysiert. Das Ergebnis dieser ersten Analyse ist hier dokumentiert. Programmversion 0.1 enthält bereits alle Grundfunktionen, die späteren Versionen beinhalten nur noch kleinere Verbeserungen.
Programmversionen:
- Programmversion 0.1: Implementierung der Grundfunktionen
- Programmversion 0.2: Allgemeine Verbesserungen
- Programmversion 0.3: Viele kleine Verschönerungen der Displayfunktionen
- Programmversion 0.4: Viele kleinere Veränderungen und Verbesserungen
- Programmversion 0.5: Kleine Verbesserungen und Datenabruf vom Server
- Programmversion 0.6: Access Point Mode und Web Backend
Links zu inspirierenden Projekten
Wägezellen:
Wandler-Module: