The CatFatter

Erstellt am 14.11.2017

Mr. Miau

Zwei befreundete Katzenliebhaber haben mir kürzlich ihr leid geklagt, dass sie jeden Morgen von ihrer Katze um 5 Uhr in der Früh aus dem Schlaf gemaunzt werden, weil das liebe Tier Hunger hat. Daraufhin hab ich natürlich gleich gesagt, besorgt euch doch einen Fütterungsautomaten. Das hatten sie in der Tat sogar getan, waren allerdings mit der unflexiblen "Programmierung" unzufrieden. Natürlich gibt es da auch high-end Geräte, die sind aber reichlich teuer.

Letztlich hab ich dann also angeboten, dass wir unseren eigenen Automaten bauen könnten, schließlich ist die Mechanik trivial und die Software lässt sich quasi beliebig komplex auf einem ESP8266 gestalten. Der Automat besteht aus einem kleinen Böckchen unter den die Fressschale gestellt wird. Darüber ist der Vorratsbehälter, der nach unten hin trichterförmig zuläuft. Am Ende des Trichters, zwischen der Platte des Böckchens und dem Trichter, befindet sich eine verschiebbare Holzplatte mit einem Loch. Wird die Platte unter den Trichter geschoben, fällt etwas Futter in das Loch in dem Holzplättchen. Danach wird das Plättchen zur Seite gezogen und transportiert dabei eine kleine Menge Futter zu einem Loch in der Platte vom Böckchen - von da fällt es direkt in den Fressnapf. Dieses System hat den Vorteil, dass es keine direkte Verbindung zwischen Vorratsbehälter und Auslass gibt. Sprich, selbst wenn die Mechanik sich mal verhakt oder die Software sich aufhängt rieselt kein Futter nach. Die Schiebebewegung wird über einen standard Modellbauservo verwirklicht, der von einem ESP8266-Modul angesteuert wird. Das Modul ist wieder mit der NomdeMCU-Firmware bestückt, mit der man Lua-Scripte ausführen kann. Damit man den Automaten bequem konfigurieren kann, habe ich einen Webserver darauf installiert, welcher eine kleine Webseite mit der Konfiguration anzeigt. Darüber kann man dann also bequem per Laptop oder Smartphone die Fütterungszeiten eintragen oder auch manuell Futter ausgeben. Als zusätzliches Gimmick wird gezählt, wie oft am Tag, in der Woche und im Monat Futter ausgegeben wurde und man kann auch sehen, wann zuletzt gefüttert wurde.

Hardware

Um euch den Nachbau etwas zu erleichtern, habe ich euch hier ein paar Bilder der Hardware gemacht. Die vier Hauptbestandteile sind das Böckchen (der Sockel), der Vorratsbehälter mit dem Trichter und das verschiebbare Plättchen mit dem Loch (rosa eingefärbt), welches das Futter vom Trichter zum Auslass im Sockel transportiert.

Innenansicht Sockel mit Futterauslass

Angetrieben wird das ganze wie gesagt von einem Modellbauservo. Das Servosignal habe ich dabei auf Pin 7 (bei manchen Modulen auch als Pin 13 bezeichnet) konfiguriert. Schließt den Servo also einfach an 5V und GND und verbindet die Signalleitung mit Pin 7.

Software

Für die Softwarekomponente kommt wieder NodeMCU zum Einsatz. Um zu erfahren, wie ihr die Firmware baut und installiert schaut einfach in meine anderen beiden Bastelanleitungen zu dem WLAN-Modul: WLAN-RFID-Leser und Wetterhäuschen. Dieses Mal benötigt ihr die folgenden, zusätzlichen Module, wenn ihr die Firmware bei nodemcu-build.com konfiguriert: bit, Cron, mDNS, PWM, RTC time, SJSON, SNTP. Wenn ihr die Firmware habt, flasht die Integer-Version und ladet euch anschließend mein Softwarearchiv mit dem Lua-Code herunter: catfatter_0.1-alpha.tar.bz2

Das Archiv beinhaltet eine angepasste Version des nodemcu-httpservers mit dem Webinterface zur Konfiguration und den übrigen Innereien um den Automaten zu betreiben.
Die NodeMCU-Firmware unterstützt prinzipiell keine Ordnerstrukturen in ihrem Dateisystem. Dateinamen können aber Schrägstriche ("/") enthalten. Also liegen alle Dateien, die mit der Webseite zu tun haben unter http/. Den Datenaustausch zwischen Browser und Anwendung habe ich unter http/api/ untergebracht. Das sind im wesentlichen .json-Dateien, zum abspeichern von Variablen und den eigentlichen Lua-Scripten, welche die POST- und GET-Requests vom Browser verarbeiten. Das Basissystem bilden die beiden Dateien dispense.lua und update_cron.lua. Erstere steuert den Servo an, zweitere kümmert sich um die Fütterungszeiten. Leider unterstützt das cron-Modul keine Zeitzonen, also muss man manuell von Sommer- auf Winterzeit (und umgekehrt) umstellen. Die Umrechnung von der Zeitzone auf UTC übernimmt dabei einfach der Browser über ein paar Javascript-Funktionen.

Hier drei Bilder des Webinterfaces zur bequemen Konfiguration vom PC oder Mobilgerät:

Statusseite Futterplan Konfiguration

Installation

Ladet euch also das Archiv herunter und entpackt es an geeigneter Stelle. Die Konfiguration für euer WLAN nehmt ihr in der httpserver-conf.lua vor. Wenn ihr noch den Hostnamen ändern wollt, könnt ihr das ebenfalls hier vornehmen. Ich hab das Teil einfach mal "catfeeder" genannt, darüber sollte es dann später auch in eurem Netzwerk erreichbar sein. Am einfachsten lässt sich das Projekt über das mitgelieferte Makefile auf das WLAN-Modul übertragen. Ladet euch dazu den nodemcu-uploader herunter und steckt ihn in das selbe Verzeichnis in das ihr auch das catfatter-Archiv entpackt habt. Danach dann einfach nur noch make upload_all ausführen und das Projekt sollte auf dem Modul landen:

~$ wget https://thinksilicon.de/data/elektronik/catfatter/catfatter_0.1-alpha.tar.bz2
....
~$ tar xvf catfatter_0.1-alpha.tar.bz2
....
~$ git clone https://github.com/kmpm/nodemcu-uploader.git
....
~$ cd catfatter_0.1-alpha/
~/catfatter_0.1-alpha$ make upload_all
....

Nach dem Upload empfehle ich, dass ihr euch mit einem Terminalprogramm verbindet, um zu sehen ob auch alles wunschgemäß startet. Sobald ihr das Modul nach dem initialen Übertragen der Dateien resettet, werden die Lua-Scripte in bytecode kompiliert. Das lässt sie zum einen etwas schrumpfen, aber vorallem werden sie dadurch natürlich deutlich flotter ausgeführt. Jetzt geht mit eurem Browser einfach auf http://catfeeder.local oder wenn das nicht klappt, auf die IP-Adresse, welche euch im Terminal angezeigt wird. Ist die Seite geladen, geht es jetzt zuerst in die Settings. Hier müssen nämlich die beiden Ausschläge des Servohorns und die Geschwindigkeit konfiguriert werden. Da am besten einfach ein bisschen spielen, bis die Werte passen und das verschiebbare Plättchen von Anschlag zu Anschlag bewegt wird. Die Geschwindigkeit ist indirekt proportional. Eine große Zahl, bedeutet eine langsamere Bewegung, eine kleine Zahl eine schnelle Bewegung. Ich empfehle es langsam anzugehen, damit sich nix verklemmt. Als nächstes zum Schedule wechseln und einmal auf Sommerzeit wechseln (und ggf. zurück). Das wird benötigt um die korrekte Zeitzone auf das Modul zu übertragen. Ihr könnt das auch händisch in der http/api/config.json einstellen unter den beiden hoffentlich selbsterklärenden Variablen midnight_h und midnight_m.

Zu guter Letzt noch den Fütterungsplan erstellen und in Zukunft bekommen die kleinen Racker immer pünktlich zur eingestellten Zeit ihr Fresschen. Wenn ihr das Teil z.B. auch in euer VPN routet, könntet ihr sogar aus dem Urlaub nachsehen, ob alles in Ordnung ist. Zukünftig könnte man auch noch überlegen mit z.B. einem IR-Abstandssensor die Restmenge des Futters im Vorratsbehälter zu messen oder aber über einen RFID-Chip die Katze identifizieren und unterschiedliche Mengen an Futter bereit stellen. Aber das ist dann etwas für die nächste Version.

Hier noch ein kleines Video von dem Gerät in Aktion. Ich hoffe man erkennt es trotz der schlechten Lichtverhältnisse, die Stirnlampe hing grad am Ladekabel:


Video Download

Seitenanfang