Pracuj pro Silicon Valley profiq

RaspberryPi automatické krmítko

před 3 roky •
automatické krmítko pro rybu v akvárku
krmítko pro rybu

Zábava je nejlepší způsob, jak se učit. 

Albert Einstein

Všechno to začalo před dvěma lety, když náš kolega Petr přinesl do kanceláře svou novou rybičku Betta bojovnici. Tímto dnem jsme začali studovat, jak se o rybičku správně starat. Následně jsme koupili nové, větší akvárium a o pár měsíců později ještě větší.

Ale posuňme se do Vánoc 2020. Vzhledem k tomu, že přes vánoční svátky je naše kancelář téměř dva týdny zavřená, nebylo jak se o rybičku a akvárium v tomto období starat. Přesunuli jsme tedy rybičku do našeho staršího, středně velkého akvária a odvezli ji ke kolegovi domů. Jak ale víte z našeho předchozího článku, toto středně velké akvárium je použito jako Linux aquarium PC. Když se tedy začaly blížit Vánoce 2021, kancelář měla být opět zamčená a my už neměli transportní akvárko na přesun rybičky k někomu domů, bylo jasné, že musíme přijít s jiným řešením – automatické krmítko! Ale jak?

Řešení 3D tiskem

Začali jsme hledat existující řešení. Většina z nich ale byla drahá nebo nebyla kompatibilní s naším akváriem či krmivem pro rybu. Tak nás napadlo vytvořit si vlastní krmítko. Na webu ThingiVerse.com jsme našli ideální model rotačního krmítka. Tímto započala práce Ondry, našeho specialisty na 3D tisk. 

Nejprve model trochu upravil, aby mohl připevnit vlastní krokový motor. První vytištěný prototyp vážně fungoval! Pak jsme si vzpomněli, že ryba má v nádrži kamaráda, šneka. Šnečí potrava ale byla větší než miska v krmítku. Takže jsme museli udělat další iteraci a vytisknout vnitřní část znovu s většími miskami. 

Android Things vs RaspberryPi

Původně jsme si mysleli, že bychom mohli použít sadu Android Things pro začátečníky, kterou jsem získal na Google Developer Days v polském Krakově v roce 2017. Brzy jsem ale zjistil, že projekt Android Things byl ukončen a systém potřebný k fungování sady je nedostupný. Celý víkend jsem se snažil najít jiné řešení, ale bez úspěchu. Rozhodli jsme se tedy s ostatními, že použijeme RaspberryPi, které v kanceláři leží ladem. Tady jsou kroky, podle kterých jsme to nastavili. 

Poté, co jsme nastavili RaspberryPi a byli schopni ovládat LED diodu, bylo nám jasné, co bude další výzva. Ovladač krokového motoru potřebuje vstupní napětí v rozmezí 8,2 – 45 V a logické napětí v rozmezí 2,5 V až 5,25 V. Naproti tomu RaspberryPi potřebuje 5V a má 3,3V GPIO piny. Našli jsme starý napájecí adaptér pro notebook, který produkuje 19,5 V, a udělali jsme z něj jediný napájecí zdroj. Součástí řešení je také DC/DC step-down modul pro napájení RaspberryPi.

CRON s Python skriptem a monitoring

Když jsme měli k dispozici zdroje energie, nastal čas na programování. RaspberryOS je dobře integrován s Pythonem a ovládání vstupních a výstupních pinů (GPIO) je tedy velmi snadné. Můžete mě označit za šílence, který chce vše monitorovat, ale potřeboval jsem mít jistotu, že vše bude fungovat naprosto bezchybně.

Kromě základního logování do souboru jsem také nastavil monitorování pomocí služby Healthchecks.io, která je pro hobíky zdarma. Funguje na principu vypínače mrtvého muže, takže pokud by se něco pokazilo, dostaneme upozornění do našeho kanálu na Slacku. A pro nejhorší případ jsme přidělili statickou IP adresu a nastavili přesměrování portů, abychom měli přístup pomocí SSH do RaspberryPi.

Samotný skript Pythonu se spouštěl pravidelně každou hodinu pomocí cron úlohy, přičemž čas posledního krmení byl řízen programově. V případě výpadku proudu by ryba a šnek nebyli nakrmeni v pravidelný čas v 8:00, ale až po skončení výpadku. Celý skript najdete v našem public Gitlab repository.

Vizuální zpětná vazba s nepřetržitým streamem na YouTube

Přístup pomocí SSH, logování i monitorování může zkontrolovat chování softwaru. Protože krmítkoje kus hardwaru, je mnohem obtížnější jej monitorovat. Proto jsme se rozhodli dění v akváriu streamovat pomocí webové kamery na YouTube. Připravili jsme skript a pro streamování použili nástroj FFmpeg. Připravený skript najdete také v našem public Gitlab repository.

Čas není vždy přítelem vývojářů, a tak jsme s vývojem a testováním našeho krmítka čekali až do poslední chvíle. V důsledku toho jsme nebyli schopni optimalizovat streamování tak, jak jsme chtěli. Stream byl v rozlišení 640 x 480, 15 FPS a stále využíval téměř 95 % času procesoru. Z bezpečnostních důvodů jsme výhradně pro streamování používali druhý Raspberry Pi. Kdyby selhal, neovlivnilo by to naše krmítko.

A ano, uspěli jsme! Ale co zlepšíme do příštích Vánoc?

Kdyby ryba nebo šnek během Vánoc zemřeli, tento článek byste nejspíše nečetli. Ale protože ho čtete, je jasné, že přežili. Hurá! Vlastně víc než přežili… rozmnožili se a my teď máme malé šneky. Znovu hurá! A i když do Vánoc 2022 zbývá ještě rok, na krmítku je toho hodně co zlepšovat. 

Tablety pro šneka jsou trochu větší, a někdy se jídlem pro rybu zasekly. Takže nepropadlo nic, nebo jen malá část. Bylo by užitečné, kdybychom měli možnost ovládat směr pohybu krmítka a zahrnout do něj i zatřepání, aby se do akvária dostalo vše, co pro daný den bylo přichystáno. Budeme také hledat lepší nastavení streamování, abychom mohli sledovat přenos ve vyšší kvalitě. 

Zkusili jste doma nebo v práci některý z našich inovativních testů? Podělte se s námi o vaše výsledky a poznatky, rádi se na ně podíváme a zahrneme je do některého z příštích článků. Napište nám zprávu na sociální sítě nebo na [email protected] a my se vám ozveme.