Wyobraź sobie taką sytuację: jest 6:00 rano w sobotę, leżysz wygodnie w swoim łóżku, wciąż śpiąc spokojnie. Nagle słyszysz, jak twój kot drapie w drzwi, jego głośne miauczenie staje się nie do zniesienia, a twój kot ma cały czas na świecie, aby dać ci znać, czego potrzebuje. Czy wiesz, czego naprawdę potrzebuje? Wiem - twój kot chce jedzenia teraz! Właśnie teraz! Skąd to wiem? Ponieważ w pewnym momencie zacząłem karmić mojego kota o tej porze... I oczywiście stało się to nowym standardem czasu na jedzenie.

Ten scenariusz zainspirował mnie do zbudowania automatycznego karmnika dla kotów, który wyeliminowałby kłopoty związane z porannym karmieniem kota i sprawił, że kot byłby szczęśliwy.

Pierwsza generacja

Pierwsza generacja karmników dla kotów była prosta. MVP wykonany z kartonu, prostego serwomechanizmu i ESP WeMos. Używał serwomechanizmu do obracania górnego pojemnika o 180 stopni w celu dozowania żywności.

Mikrokontroler był podłączony do mojej lokalnej sieci Wi-Fi i komunikował się z serwerem Smart Home z HomeAssistant za pośrednictwem protokołu MQTT. Dzięki temu mogłem wykorzystać system automatyzacji HomeAssistant do planowania karmienia i wydawania jedzenia za pomocą poleceń Google Home. Każde karmienie było definiowane jako specjalne wydarzenie w Kalendarzu Google. Pozwoliło mi to łatwo kontrolować czas karmienia kota i zmieniać go w razie potrzeby.

Oczywiście generacja ta napotkała pewne problemy:

Podobnie jak w przypadku większości MVP, był używany tylko przez 2 lata, aż się zepsuł.

Druga generacja

Zdecydowałem, że następny karmnik dla kota powinien:

Cały proces rozpocząłem od zaprojektowania podstawowych elementów do podziału żywności. Następnie, gdy projekty były gotowe, wszystkie elementy zostały wydrukowane przy użyciu Creality Ender-3 i PLA

Części

Po upewnieniu się, że wszystko działa, przystąpiłem do projektowania i drukowania pozostałych części:

Baza dla RaspberryPi (poziom 0)

Posiada specjalne miejsca na śruby ułatwiające instalację Raspberry Pi. Dodatkowo z przodu znajduje się mały otwór ułatwiający dostęp do karty SD Raspberry Pi.

Uchwyt miski

Ta plastikowa część służy do umieszczenia metalowej miski na jedzenie (oczywiście została wydrukowana ze złotych filamentów, dla sławy i chwały mojego kota). Jest ona połączona z podstawą za pomocą 2 magnesów neodymowych.

Uchwyt serwomechanizmu (poziom 1)

Poziom ten służy do przytrzymywania serwomechanizmu podczas obracania części na następnym poziomie. Ma również niewielkie nachylenie dla lepszego podawania jedzenia.

Pojemnik mechanizmu racji żywnościowej (poziom 2)

Jest to prosty poziom, który porcjuje żywność z pojemnika umieszczonego powyżej. Jest on obracany przez serwomechanizm.

Uchwyt na pojemnik na żywność (poziom 3)

Ta część służy do przytrzymywania pojemnika na żywność. Jest to jedyna plastikowa część, która nie została wydrukowana w 3D. Chciałem zminimalizować kontakt części drukowanych 3D z żywnością. Teoretycznie przezroczysty plastik PLA nie zawiera żadnych toksycznych zanieczyszczeń, ale kupiłem najtańszy dozownik płatków śniadaniowych i wziąłem część pojemnika na żywność, aby być po bezpiecznej stronie. Poza tym wygląda naprawdę fajnie.

Obudowa i pokrywa

Ostatnie dwie części to obudowa i pokrywa. Nic specjalnego, poza większą ilością złota, aby wyglądało lepiej i zdobyło podziw kota.

Wszystkie części

Montaż końcowy

Oprogramowanie

Raspberry Pi działa pod kontrolą systemu Raspbian udostępnionego przy użyciu aplikacji ansible playbook aby uruchomić te usługi:

MotionEye

MotionEye to oprogramowanie open source do tworzenia własnego prywatnego monitoringu. Wykrywa ono każdą kamerę podłączoną do Raspberry Pi. Dodatkowo, po wyjęciu z pudełka, otrzymujesz wykrywanie ruchu, punkt końcowy do udostępniania strumienia i obsługę webhooków.

Serwis serwomechanizmów

Ta usługa kontroluje obrót serwomechanizmu. Jest to prosta Python który łączy się z serwerem MQTT, na którym działa moje oprogramowanie Smart House i oczekuje na wiadomość uruchamiającą obrót.

Prowadzona usługa

Podobnie jak usługa servo, implementuje ona protokół dla źródła światła kontrolowanego przez MQTT w HomeAssistant.

Automatyzacja asystenta domowego

I wreszcie automatyzacja HomeAssistant, która uruchamia karmienie.

Uruchamia on wydawanie żywności w dwóch sytuacjach:

Ta automatyzacja kod wygląda następująco:

- alias: Nakarm kota
spust:
- platforma: stan
entity_id: 'binary_sensor.iss'
od: "wyłączony
do: 'on'
- platforma: stan
entity_id: calendar.cat_feed_schedule
od: "wyłączony
do: 'on'
działanie:
- usługa: script.feed_the_cat

Podsumowanie

Oczywiście ta wersja nie jest ostatnią. Ale spełnia swoją rolę - kot jest dobrze odżywiony, a ja mam swoje leniwe poranki 🙂

Czytaj więcej:

E-commerce: Nowy stan gry 2020 (raport)

Jak prowadzić firmę w czasie kryzysu?

Programowanie w Ruby. Terminal dla początkujących - część 2

pl_PLPolish