Article in English can be found on dev.to/arxeiss/story-of-automated-fish-feeder-with-raspberrypi-25i3
Před Vánoci 2020 jsme ještě mohli rybičku přesunout ve starém akváriu ke kolegovi domů. Jenže v loňském roce se ze starého akvária stal server ponořený v oleji. Před Vánoci 2021 tedy bylo jasné, že ryba i se šnekem zůstane v kanceláři a s automatickým krmítkem. Existující řešení jsou ovšem drahé nebo nekompatibilní s našim akvárkem. A tak vznikl nápad vše si vytvořit vlastní.
Toto není jediný hobby projekt, který v profiqu kromě naší práce pro zákazníky vznikl. Ostatní lze najít na českém i anglickém firemním blogu.
Krmítko z 3D tiskárny
Na ThingiVerse.com jsme našli ideální návrh. Bylo potřeba jen upravit uchycení pro krokový motor, který měl kolega doma. Vytiskli jsme první prototyp a zjistili drobné problémy. Mističky byly příliš malé na to, aby jimi propadly tablety pro šneka. Kolega tedy vytiskl rotační část znovu a větší. Vše vypadalo dobře, bylo na čase se přesunout z nepájivého pole s tlačítky na desku a krmení spouštět automatizovaně každé ráno.
Android Things vs RaspberryPi
Ze začátku jsem chtěl použít Android Things kit, který jsem dostal na Google Developer Days v Krakówě. Jenže Google mezitím projekt ukončil. Očekával jsem, že pouze nebudou vycházet aktualizace. Jenže nelze ani stáhnout základní image a nástroje pro zprovoznění kitu. Celý víkend jsem strávil hledáním jiných řešení, ale nepochodil jsem. Proto kolega navrhnul použít RaspberryPi, který nám leží ladem v kanceláři už nějaký ten pátek (čti rok).
Když jsme úspěšně zvládli rozblikat LED diodu, narazili jsme na další problém. Nikterak složitý, avšak pro softwarové vývojáře s téměř nulovou harwarovou zkušeností to byl drobný problém. RaspberryPi potřebuje k napájení 5 V a GPIO piny mají logickou úroveň 3.3 V. Step-motor driver vyžaduje vstupní napětí 8.2 - 45 V a logickou úroveň vstupů mezi 2.5 až 5.25 V. Rozhodli jsme se využít pouze 1 zdroj napájení, starý notebookový adaptér s výstupním napětím 19.5 V. A přidat také DC/DC step-down modul k napájení RaspberryPi.
CRON s Python skriptem a monitoring
Nadešel programovací čas. RaspberryOS přináší svkělou integraci s Pythonem, takže ovládání GPIO (General Purpose Input Output) pinů je extrémně jednoduché. V některých očích jsem možná střelený, ale rád monitoruji věci, že opravdu fungují, jak mají. A stejně tak i krmítko. Kromě základních logů do souboru jsem také využil službu Healthchecks.io, o které jsem již dříve psal. A samozřejmě napojil do našeho Slacku, abychom hned věděli, že je něco špatně. A pro nejhorší případy jsme ještě nastavili port-forwarding na routeru a SSH přístup do Raspberry.
Skript je pravidelně spouštěn pomocí cronu každou hodinu. Čas krmení je pak řízen programově pro případný výpadek proudu. Pokud by tedy nastal výpadek a rybička by nebyla nakrmena v pravidelný čas 8:00, ke krmení by došlo následující celou hodinu po skončení výpadku. Tento Python skript lze nalézt ve veřejném repozitáři na Gitlabu.
Vizuální zpětná vazba pomocí YouTube streamu
Přístup přes SSH, logování i monitoring může dobře posloužit ke kontrole softwaru. Ale hardware tak lehce monitorovat nejde. Proto jsme se rozhodli, že využijeme webovou kameru a dění v akváriu budeme streamovat na YouTube. Využili jsme nástroj ffmpeg a připravený skript je opět dostupný na firemním Gitlabu. Záznam bohužel z neznámého důvodu na YouTube není.
Každý ví, že vývojáři rádi nechávají vše na poslední chvíli. A stejně tak my s krmítkem. Proto nebylo dost času na otestování a stream fungoval pouze v rozlišení 640x480 px, s 15 FPS, a přesto využíval CPU na 95 %. Proto jsme se pro stream rozhodli využít druhé Raspberry, aby případné přehřátí či jiná nehoda neovlivnila krmení.
A ano, uspěli jsme! A jaké plánujeme vylepšení?
Tento článek by asi nevznikl, kdyby ryba nebo šnek vánoční svátky nepřežili. A protože jej čtete, tak je jasné, že vše dopadlo dobře. Dokonce více než dobře, šnek se rozmnožil a nyní máme v akváriu 3 baby šneky! Ale přesto je do dalšího roku stále co zlepšovat.
Žrádlo pro šneka jsou trochu větší tablety, které se někdy s ostatním žrádlem zasekly a nepropadlo nic. Nebo jen část. Do dalšího roku tedy bude nutné připojit i kontrolu směru otáček a po každém krmení otočnou částí trochu zatřepat. A také vyladit stream na YouTube tak, aby RaspberryPi nejelo na 95 % a my mohli přenášet obraz ve větší kvalitě.
Řešili jste někdy podobný problém, nebo jste si krmítko postavili? Podělte se v komentářích
K tomuto článku již není možné přidávat další komentáře
Komentáře
Tedaa. Šikovné udělané :)