Forestil dig en sådan situation: Klokken er 6:00 en lørdag morgen, du ligger behageligt i din seng og sover stadig godt. Pludselig hører du din kat kradse på døren, dens høje mjaven bliver uudholdelig, og din kat har alverdens tid til at fortælle dig, hvad den har brug for. Ved du, hvad den virkelig har brug for? Jeg ved det - din kat vil have mad nu! Lige nu! Hvordan kan jeg vide det? Fordi jeg på et tidspunkt begyndte at fodre min kat på det tidspunkt ... Og det blev selvfølgelig et nyt standardtidspunkt for at få mad.
Dette scenarie inspirerede mig til at bygge en automatisk kattefoderautomat, som ville fjerne besværet med at fodre katten om morgenen og gøre den glad.
Første generation
Den første generation af kattefoderautomaten var en simpel MVP lavet af noget pap, en simpel servo og ESP WeMos. Den brugte en servo til at dreje den øverste beholder 180 grader for at dosere maden.
En mikrocontroller var forbundet til mit lokale Wi-Fi og kommunikerede med Smart Home-serveren, der kører HomeAssistant, via MQTT-protokollen. Takket være det kunne jeg bruge HomeAssistant-automatiseringssystemet til at planlægge fodring og udlevering af mad via Google Home-kommandoer. Hver fodring blev defineret som en særlig begivenhed i Google-kalenderen. Det gav mig mulighed for nemt at kontrollere kattens fodringstidspunkt og ændre det, når det var nødvendigt.
Selvfølgelig stødte denne generation på nogle problemer:
- kunne den øverste beholder nogle gange løsne sig fra servohåndtaget og spilde hele maden (jeg kaldte det "Jackpot-effekten"),
- Den havde ikke det bedste design,
- begyndte pappet at blive dårligere.
Som med de fleste MVP'er blev den kun brugt i 2 år, før den gik i stykker.
Anden generation
Jeg besluttede, at den næste kattefoderautomat skulle:
- bygges af 3D-printede dele,
- Brug Raspberry Pi 3,
- har et lille kamera til at se, hvordan katten reagerede, og hvad dyret gjorde.
Jeg startede hele processen med at designe grundelementer til opdeling af maden. Da designene var klar, blev alle elementer printet med Creality Ender-3 og PLA.
Dele
Efter at have sikret mig, at alt fungerede, gik jeg i gang med at designe og printe resten af delene:
Base for RaspberryPi (niveau 0)

Den har særlige steder til skruer, som hjælper med at installere Raspberry Pi. På forsiden er der desuden et lille hul, som giver nem adgang til Raspberry Pi's SD-kort.
Skålholder
Denne plastikdel bruges til at placere en madskål i metal (den er selvfølgelig printet med guldfilamenter til ære for min kat). Den er forbundet med basen ved hjælp af 2 neodymmagneter.

Servoholder (niveau 1)
Dette niveau bruges til at holde servoen, mens den roterer delen på det næste niveau. Det har også en lille hældning for bedre at kunne servere maden.

Beholder til rationeringsmekanisme (niveau 2)
Dette er et simpelt generisk niveau, som portionerer mad fra en beholder placeret ovenover. Den drejes af servoen.

Holder til madbeholder (niveau 3)
Denne del bruges til at holde madbeholderen. Det er den eneste plastikdel, der ikke er 3D-printet. Jeg ønskede at minimere fødevarekontakt med 3D-printede dele. I teorien indeholder gennemsigtig PLA-plast ingen giftige stoffer, men jeg købte den billigste korndispenser og tog delen til madbeholderen for at være på den sikre side. Og så ser den virkelig cool ud.

Hus og låg
De sidste to dele var huset og låget. Ikke noget særligt her, bortset fra mere guld for at få det til at se bedre ud og vinde kattens beundring.

Alle dele

Endelig samling

Software
Raspberry Pi kører en Raspbian, der er provisioneret ved hjælp af ansible playbook til at køre disse tjenester:
MotionEye
MotionEye er en open source-software til at bygge din egen private overvågning. Den registrerer ethvert kamera, der er tilsluttet Raspberry Pi. Derudover får du bevægelsesdetektering, et slutpunkt til deling af strømmen og understøttelse af webhook.
Servo-service
Denne service styrer servoens rotation. Det er en simpel Python script, der opretter forbindelse til MQTT-serveren, der kører min Smart House-software, og venter på en besked, der kan sætte gang i rotationen.
Ledende service
Ligesom servotjenesten implementerer den en protokol til lyskilder, der styres af MQTT i HomeAssistant.
Automatisering af hjemmeassistent
Og endelig HomeAssistant-automatikken, der udløser fodring.
Den udløser madudlevering i to situationer:
- når fodringstiden dukker op i kalenderen,
- når den internationale rumstation befinder sig over mit hjem.
Denne automatisering Kode ser sådan her ud:
- alias: Giv katten mad
udløser:
- platform: stat
entity_id: 'binær_sensor.iss'
fra: 'off'
til: 'on'
- platform: stat
entity_id: calendar.cat_feed_schedule
fra: 'off'
til: 'on'
handling:
- service: script.feed_the_cat
Sammenfatning
Denne version er naturligvis ikke den sidste. Men den tjener sit formål - katten er velernæret, og jeg har mine dovne morgener 🙂 .
Læs mere om det:
– E-commerce: Ny tilstand i spillet 2020 (rapport)
– Hvordan driver man en virksomhed under krisen?
– Programmering i Ruby. Begynderens terminal - del 2