Automatické krmítko do akvária s RaspberryPi

1 Tipy & triky, O mně

Budova, ve které máme kanceláře, je každý rok přes vánoční svátky zavřená téměř 2 týdny. To by akvarijní rybička nemusela bez jídla zvládnout, a tak bylo potřeba přijít s automatickým krmítkem.

Automatické krmítko do akvária s RaspberryPi

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.

Detail krmítka s krokovým motorem

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.

Schéma zapojení RaspberryPi, Step-motor driveru a krmítka

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.

Popis jednotlivých částí krmítka

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é :)