Last year, Oscar the cat started waking me up between 5 and 6 to feed him. As all cat owners know, you can’t just close the door and be done with it. The cat will find a way to bother you until he gets what he wants. Well if he wants food at 5am, a robot can give it to him. A robot made out of legos and garbage. Read on to see how the automatic cat feeder works, including a video and my mods to make it feed two cats.
This turned out to be the perfect project to try to integrate my lego mindstorms robot parts that I’ve had for a few years. I bought a lego mindstorms motor shield, but in order to add remote functionality via openHAB, I needed to add a moteino. The mindstorm shield used up too much I/O to add a wireless transceiver to the same arduino.
The mindstorm shield had handling for two motors, so I decided to make a food shooter as well. Oscar was quite overweight at the time, and I thought it might be fun for everyone to make him run a little bit for his food. Originally, I wanted to try to train Oscar to push the arm that triggered the feeder. On the first four tries, it would shoot food using the shooter. The fifth time would dispense the full portion using the auto feeder. In the end, the shooter became a punching bag until all the food came out. It did make for some funny video clips though:
The fun challenge for the shooter was to get the conveyor belt to move slowly while making the “spinny smacker thing™” spin really quickly.
Feeder Take One
Version 1 of the auto feeder was composed of a takeout container, a chopped up kleenex box and a bunch of legos. The idea was that you can fill different compartments with food and cut out a quarter of the bottom of the takeout container. It handled two feedings per fill, so I only had to refill it every other day. The top of the devider had two magnets attached to it, and there was a reed switch just past the opening. Once the magnet reached the switch, it would stop spinning so that only one portion would be delivered. I also added a 10 second timeout in case the magnet didn’t trigger or it got jammed to keep the motor from burning out.
The feeder was sent a signal from openHAB at 5am every morning to trigger the it. It could also be triggered manually using a switch in openHAB. I also employed an “autofeed enable” button, just so I could shut it off remotely if I decided not to use it. This came in handy if the cat woke me up before it went off, because I could trigger the feeder (at 4:30am, for example) from my phone, then shut off the autofeed so it wouldn’t go off again 30 minutes later.
The first version worked very consistently, and for months it saved us from being woken up early. Then we got a kitten and all hell broke loose. The feeder had to be abandoned because I didn’t want the kitten eating big cat food. I also didn’t want there to be any fighting over food.
Recently, it dawned on me that Stella was getting close to being a real live cat (as opposed to a baby kitten). I decided it was a good time to try to mod the feeder to feed two cats. It didn’t take much (at least that’s what I thought at first). Here is a quick video of the dual feeder in action:
Stella has not been as kind to the feeder as Oscar was. Patient, patient Oscar would obediently wait for his food to be delivered. Stella on the other hand…
After velcroing the mat to the floor, zip-tying the the feeder to the mat, and zip-tying the feeder to itself to make it more secure, clearly, something else needed to be done. Enter version 2.5:
I added additional structural components around the outside of the holder and added additional cardboard to hide and protect everything. This also removed the need for the lid, which would sometimes cause the rotating divider to bind up. I installed the mods a few days, and every night I can hear Stella diligently trying to dismantle the thing. It’s only a matter of time before she does.
Ultimately, it appears I will have to redesign this thing and put it on an unreachable shelf somewhere. In the meantime I will try to make the current iteration last as long as possible. As usual, the code is posted here.