Kujutage ette sellist olukorda: on 6:00 hommikul laupäeva hommikul, te lebate mugavalt oma voodis ja magate veel sügavalt. Järsku kuuled sa oma kassi kraapimist uksel, tema valjud niutsud muutuvad talumatuks ja sinu kassil on kogu aeg aega, et sulle teada anda, mida ta vajab. Kas te teate, mida ta tegelikult vajab? Ma tean - teie kass tahab nüüd toitu! Just nüüd! Kuidas ma seda tean? Sest mingil hetkel hakkasin ma oma kassi just sel ajal söötma... Ja muidugi sai sellest uus standardaeg toidu saamiseks.

See stsenaarium inspireeris mind ehitama automaatset kassisöötjat, mis kõrvaldaks kasside hommikuse söötmisega seotud probleemid ja hoiaks kassi õnnelikuna.

Esimene põlvkond

Esimese põlvkonna kassisöötja oli lihtne MVP valmistatud mõnest papist, lihtsast servost ja ESP WeMost. See kasutas servot, et pöörata ülemist konteinerit 180 kraadi võrra, et toitu väljastada.

Mikrokontroller oli ühendatud minu kohaliku WiFi-ühendusega ja suhtles MQTT-protokolli kaudu Smart Home serveriga, kus töötab HomeAssistant. Tänu sellele sain ma HomeAssistant'i automaatikasüsteemi kasutada Google Home'i käskude kaudu söötmise ja toidu väljastamise ajakava koostamiseks. Iga söötmine määratleti Google'i kalendris erisündmusena. See võimaldas mul hõlpsasti kontrollida kassi söötmise aega ja seda vajadusel muuta.

Loomulikult tekkis sellel põlvkonnal mõningaid probleeme:

Nagu enamiku MVPde puhul, kasutati seda ainult 2 aastat, kuni see purunes.

Teine põlvkond

Otsustasin, et järgmine kassisöötja peaks:

Alustasin kogu protsessi toidu jaotamise põhielementide kavandamisest. Seejärel, kui kujundused olid valmis, trükiti kõik elemendid Creality Ender-3 ja PLA abil.

Osad

Pärast seda, kui olin veendunud, et kõik töötab, asusin ülejäänud osade projekteerimise ja printimisega tegelema:

RaspberryPi baas (tase 0)

Sellel on spetsiaalsed kohad kruvide jaoks, mis aitavad Raspberry Pi paigaldamisel. Lisaks on esiküljel väike auk, et Raspberry Pi SD-kaardile oleks lihtne ligi pääseda.

Kausi hoidja

Seda plastist osa kasutatakse metallist toidukausi paigutamiseks (loomulikult on see trükitud kuldsetest kiududest, minu kassi kuulsuse ja hiilguse pärast). See on alusega ühendatud 2 neodüümimagneti abil.

Servohoidja (tase 1)

Seda tasandit kasutatakse servo hoidmiseks, samal ajal kui see pöörleb järgmisel tasandil asuvat detaili. Sellel on ka väike kalle toidu paremaks serveerimiseks.

Ratsioonimehhanismi konteiner (tase 2)

See on lihtne üldine tase, mis jagab toitu üleval asuvast konteinerist. Seda pööratakse servo abil.

Toidupakendite hoidja (tase 3)

Seda osa kasutatakse toidupakendi hoidmiseks. See on ainus plastmassist osa, mis ei ole 3D-trükitud. Tahtsin vähendada toiduga kokkupuutumist 3D-prinditud osadega. Teoreetiliselt ei ole läbipaistvas PLA-plastikus mingeid mürgiseid saasteaineid, kuid ma ostsin kõige odavama teravilja jaoturi ja võtsin toidu konteineri osa, lihtsalt selleks, et olla kindel. Samuti näeb see tõesti lahe välja.

Korpus ja kaas

Kaks viimast osa olid korpus ja kaas. Siin ei ole midagi erilist, välja arvatud rohkem kulda, et see näeks parem välja ja võidaks kassi imetlust.

Kõik osad

Lõplik kokkupanek

Tarkvara

Vaarika Pi töötab Raspbian, mis on ette nähtud kasutades ansible mänguraamat nende teenuste osutamiseks:

MotionEye

MotionEye on avatud lähtekoodiga tarkvara, mille abil saate luua oma isikliku seire. See tuvastab kõik Raspberry Pi'ga ühendatud kaamerad. Lisaks saate karbist välja liikumistuvastuse, lõpp-punkti voo jagamiseks ja webhooki toe.

Servo teenus

See teenus kontrollib servo pöörlemist. See on lihtne Python skript, mis ühendub MQTT-serveriga, kus töötab minu Smart House'i tarkvara, ja ootab sõnumit, et käivitada rotatsioon.

Juhitud teenus

Nii nagu servo teenus, rakendab see MQTT poolt juhitava valgusallika protokolli MQTT-s. HomeAssistent.

Koduassistendi automaatika

Ja lõpuks HomeAssistant automaatika, mis käivitab söötmise.

See käivitab toidu väljastamise kahes olukorras:

See automatiseerimine kood näeb välja selline:

- alias: Sööda kassi
päästik:
- platvorm: riik
entity_id: "binary_sensor.iss".
from: 'off'
to: "sisse
- platvorm: riik
entity_id: calendar.cat_feed_schedule
from: 'off'
to: "sisse
tegevus:
- teenus: script.feed_the_cat

Kokkuvõte

Ilmselt ei ole see versioon viimane. Aga see täidab oma eesmärki - kass on hästi toidetud ja mina saan oma laisad hommikud 🙂 .

Loe edasi:

E-commerce: Mängu uus seis 2020 (aruanne)

Kuidas juhtida äri kriisi ajal?

Ruby programmeerimine. Algaja terminal - 2. osa

etEstonian