Kuvittele tällainen tilanne: kello on 6:00 lauantaiaamuna, makoilet mukavasti sängyssäsi ja nukut yhä syvään. Yhtäkkiä kuulet kissasi raapivan ovea, sen kovaääniset määkimiset muuttuvat sietämättömiksi ja kissallasi on kaikki maailman aika kertoa sinulle, mitä se tarvitsee. Tiedätkö, mitä se todella tarvitsee? Tiedän - kissasi haluaa nyt ruokaa! Juuri nyt! Mistä minä sen tiedän? Koska jossain vaiheessa aloin ruokkia kissaani juuri tuohon aikaan... Ja siitä tuli tietenkin uusi vakioaika ruoan saamiselle.
Tämä skenaario innoitti minua rakentamaan automaattisen kissanruokinta-automaatin, joka poistaisi kissan aamuruokintaan liittyvät ongelmat ja pitäisi kissan tyytyväisenä.
Ensimmäinen sukupolvi
Ensimmäisen sukupolven kissansyöttölaite oli yksinkertainen... MVP tehty pahvista, yksinkertaisesta servosta ja ESP WeMosista. Se käytti servoa kääntämään yläastiaa 180 astetta ruoan jakamiseksi.
Mikrokontrolleri oli kytketty paikalliseen Wi-Fi-yhteyteeni ja kommunikoi HomeAssistantia käyttävän Smart Home -palvelimen kanssa MQTT-protokollan kautta. Tämän ansiosta pystyin käyttämään HomeAssistant-automaatiojärjestelmää ruokinnan ja ruoan annostelun ajoittamiseen Google Home -komennoilla. Jokainen ruokinta määriteltiin erityiseksi tapahtumaksi Google-kalenterissa. Näin pystyin helposti valvomaan kissan ruokinta-aikaa ja muuttamaan sitä tarvittaessa.
Tämä sukupolvi kohtasi tietysti joitakin ongelmia:
- yläsäiliö irtosi joskus servokahvasta ja kaatoi koko ruoan (kutsuin sitä "Jackpot-ilmiöksi"),
- sen muotoilu ei ollut paras mahdollinen,
- pahvi alkoi rapistua.
Kuten useimpia MVP-laitteita, sitä käytettiin vain kaksi vuotta, kunnes se hajosi.
Toinen sukupolvi
Päätin, että seuraavan kissan syöttölaitteen pitäisi:
- rakennetaan 3D-tulostetuista osista,
- käytä Raspberry Pi 3:a,
- on pieni kamera, jolla voi seurata, miten kissa reagoi ja mitä eläin teki.
Aloitin koko prosessin ruoan jakamisen peruselementtien suunnittelusta. Kun mallit olivat valmiit, kaikki elementit tulostettiin Creality Ender-3:lla ja PLA:lla.
Osat
Kun olin varmistanut, että kaikki toimi, jatkoin loput osat suunnittelua ja tulostamista:
RaspberryPi-alusta (taso 0)

Siinä on erityiset paikat ruuveille Raspberry Pi:n asentamisen helpottamiseksi. Lisäksi etupuolella on pieni reikä, josta pääsee helposti käsiksi Raspberry Pi:n SD-korttiin.
Kulhon pidike
Tätä muoviosaa käytetään metallisen ruokakupin sijoittamiseen (tietysti se tulostettiin kultaisilla filamenteilla kissani maineen ja kunnian vuoksi). Se on liitetty pohjaan 2 neodyymimagneetilla.

Servopidike (taso 1)
Tätä tasoa käytetään servon pitämiseen, kun se pyörittää seuraavalla tasolla olevaa osaa. Siinä on myös pieni kaltevuus ruoan tarjoilun helpottamiseksi.

Annosmekanismin säiliö (taso 2)
Tämä on yksinkertainen yleinen taso, joka jakaa ruokaa yläpuolella olevasta astiasta. Sitä pyörittää servo.

Elintarvikesäiliön pidike (taso 3)
Tätä osaa käytetään ruoka-astian pitämiseen. Se on ainoa muoviosista, jota ei ole 3D-tulostettu. Halusin minimoida ruokakontaktin 3D-tulostettujen osien kanssa. Teoriassa läpinäkyvässä PLA-muovissa ei ole myrkyllisiä epäpuhtauksia, mutta ostin halvimman muroannostelijan ja otin ruokasäiliön osan varmuuden vuoksi. Lisäksi se näyttää todella siistiltä.

Kotelo ja kansi
Kaksi viimeistä osaa olivat kotelo ja kansi. Ei mitään erikoista tässä, paitsi lisää kultaa, jotta se näyttäisi paremmalta ja voittaisi kissan ihailun.

Kaikki osat

Lopullinen kokoonpano

Ohjelmisto
Vadelma Pi on käynnissä Raspbian provisioitu käyttäen the ansible-pelikirja käyttää näitä palveluja:
MotionEye
MotionEye on avoimen lähdekoodin ohjelmisto oman yksityisen seurannan rakentamiseen. Se havaitsee minkä tahansa Raspberry Pi:hen liitetyn kameran. Lisäksi saat valmiiksi liikkeentunnistuksen, päätepisteen streamien jakamiseen ja webhook-tuen.
Servopalvelu
Tämä palvelu ohjaa servon pyörimistä. Se on yksinkertainen Python skripti, joka muodostaa yhteyden MQTT-palvelimeen, jolla Smart House -ohjelmistoni toimii, ja odottaa viestiä, joka käynnistää kierron.
Johdettu palvelu
Aivan kuten servopalvelu, se toteuttaa protokollan MQTT:n ohjaamaa valonlähdettä varten. HomeAssistent.
Kodin avustajan automaatio
Ja lopuksi HomeAssistant-automaatio, joka käynnistää ruokinnan.
Se käynnistää ruoan annostelun kahdessa tilanteessa:
- kun ruokinta-aika ilmestyy kalenteriin,
- kun kansainvälinen avaruusasema on kotipaikkani yläpuolella.
Tämä automaatio koodi näyttää tältä:
- alias: Syötä kissa
laukaista:
- foorumi: valtio
entity_id: "binary_sensor.iss".
from: 'off'
to: 'on'
- foorumi: valtio
entity_id: calendar.cat_feed_schedule
from: 'off'
to: 'on'
toiminta:
- palvelu: script.feed_the_cat
Yhteenveto
Tämä versio ei tietenkään ole viimeinen. Mutta se palvelee tarkoitustaan - kissa on hyvin ravittu ja minulla on laiskat aamut 🙂 .
Lue lisää:
– E-commerce: Pelin uusi tila 2020 (raportti)
– Miten johtaa yritystä kriisin aikana?
– Ruby-ohjelmointi. Aloittelijan terminaali - osa 2