The Codest Core Value #1
The Codest believes in four crucial values that are the core of all actions taken by The Codest teams. In this article, our CEO and co-founder, Greg Polec, explains what...
Imagine such a situation: it is 6:00 AM on a Saturday morning, you are laying comfortably in your bed, still sleeping soundly. Suddenly, you hear your cat scratching on the door, its loud meows become unbearable and your cat has all the time in the world to let you know what its needs. Do you know what it really needs?
Imagine such a situation: it is 6:00 AM on a Saturday morning, you are laying comfortably in your bed, still sleeping soundly. Suddenly, you hear your cat scratching on the door, its loud meows become unbearable and your cat has all the time in the world to let you know what its needs. Do you know what it really needs? I know – your cat wants food now! Right now! How do I know that? Because at some point I started feeding my cat at that time… And, of course, it became a new standard time for getting food.
This scenario inspired me to build an automatic cat feeder, which would remove the troubles of morning cat feeding and keep the cat happy.
The first generation of the cat feeder was a simple MVP made of some cardboard, simple servo and ESP WeMos. It used servo to rotate the top container by 180 degrees to dispense the food.
A microcontroller was connected to my local Wi-Fi and communicated with the Smart Home server running HomeAssistant over the MQTT protocol. Thanks to that, I was able to use the HomeAssistant automation system to schedule feeding and dispensing food through Google Home commands. Each feeding was defined as a special event in the Google Calendar. It allowed me to easily control the cat’s feeding time and change it when necessary.
Of course, this generation encountered some problems:
As with most MVPs, it was used for only 2 years until it broke.
I decided that next cat feeder should:
I started whole process from designing basic elements for food partitioning. Then, when the designs were ready, all elements were printed using the Creality Ender-3 and PLA
After ensuring that everything worked, I proceeded to designing and printing the rest of the parts:
It has special places for screws to help install Raspberry Pi. Additionally, on the front, there is a small hole for easy access to Raspberry Pi’s SD card.
This plastic part is used for placing a metal food bowl (of course, it was printed with gold filaments, for my cat’s fame and glory). It is connected with the base using 2 neodymium magnets.
This level is used for holding the servo while it rotates the part on the next level. It also has a small slope for better food serving.
This is a simple generic level that portions food from a container placed above. It is rotated by the servo.
This part is used for holding the food container. It is the only plastic part that was not 3D printed. I wanted to minimize food contact with 3D printed parts. In theory, transparent PLA plastic doesn’t have any toxic contaminants, but I bought the cheapest cereal dispenser and took the food container part, just to be on the safe side. Also, it looks really cool.
The last two parts were the housing and the lid. Nothing special here, except for more gold to make it look better and win the cat’s admiration.
Raspberry Pi is running a Raspbian provisioned using the ansible playbook to run these services:
MotionEye is an open source software for building your own private monitoring. It detects any camera connected to Raspberry Pi. Additionally, out of the box, you get motion detection, an endpoint for sharing the stream and webhook support.
This service controls the rotation of the servo. It is a simple Python script that connects to the MQTT server running my Smart House software and awaits for a message to trigger the rotation.
Just as the servo service, it implements a protocol for light source controlled by the MQTT in HomeAssistant.
And, finally, the HomeAssistant automation that triggers feeding.
It triggers food dispensing in two situations:
This automation code looks like this:
– alias: Feed the cat
trigger:
– platform: state
entity_id: ‘binary_sensor.iss’
from: ‘off’
to: ‘on’
– platform: state
entity_id: calendar.cat_feed_schedule
from: ‘off’
to: ‘on’
action:
– service: script.feed_the_cat
Obviously, this version isn’t the last one. But it serves its purpose – the cat is well nourished and I have my lazy mornings 🙂
Read more:
– E-commerce: New state of the game 2020 (report)
– How to run a business during the crisis?
– Ruby programming. Beginner’s terminal – part 2