Software apps and online services
My two pet feeders are working flawlessly for the past 7 months. We care for our pets during the day of course but they now get at regular times their feed. Very happy with the system!
My version of a pet feeder is based on an Arduino microcontroller. The materials used are relatively cheap and I think it's easy to build!
Of course there are many version around but I could not find a complete project, ready to build with the features I needed so I started from scratch.
These are the features:
- *Accurate portions* delivered each time! (by using a Hall sensor)
- Two feeding times a day
- *Extremely* accurate Real Time Clock (Only with genuine DS3231 chip)
- You can cancel an upcoming feeding individually for both timers with display and Led indicator. Cancelling is automatically reset after the set time has passed.
- Manual feed function (one portion per button press)
- Adjustable portions for each of the two feeding times (1-9 portions)
- Overview of all set parameters in the main screen
- Easy to navigate menu system
- LED indication if feeding was successful
- LCD backlight timer (off after 30 sec, on with any button press)
- Time and other settings are safely stored in memory (EEPROM)
- 1x Cereal dispenser (cheap on Ebay)
- some (scrap) wood to build the cereal dispenser mount
- 1x Arduino Uno
- 1x I2C DS3231 (extremely accurate) or DS1307 Real Time Clock
- 1x LCD display 16 characters / 2 lines
- 1x I2C backpack for the LCD display
- 1x Continues rotation Servo (buy a good one!)
- 1x Honeywell SS443R Unipolar Hall sensor
- 1x 12Volts/1 Amp external power supply (wall wart)
- 7x Push Buttons - Momentary
- 6x LED (2x RED, 3x GREEN, 1 YELLOW)
- 2x resistor 1KΩ (for the red led’s)
- 4x resistor 560Ω (for the green and yellow led’s)
- 1x enclosure for the electronics
- power plug female and connectors to connect the external servo and hall sensor
- lots and lots of HOT GLUE.
It is best to use a higher voltage for the servo if possible. More power! My HSR-2645CRH Servo can take 7,4 Volts so if you also want to do this you need:
- Perf board
- LM317T Variable voltage regulator
- 3 resistors to set the output voltage (1KΩ, 150kΩ and 4K7)
- 2 polarized capacitors (220µF, 10µF)
- heat sink not needed, the servo will rotate1-2 only seconds each day ;)
Online you can find many LM317 calculators.
The cheapest and easiest to use are the cereal dispensers you can find in many stores and on Ebay. I bought a dual cereal dispenser on Ebay for 15 euro's including shipment (UK to The Netherlands)
The challenge was to make a mount for the feeder and looking around on the internet did not help me much so I looked around in my shed and found some beautiful pieces of Cedar wood.
The wood holding the plastic cereal dispenser is 3 cm thick so no wobbling! You need to be sure the hole (my feeder base is 86mm) is tight so measure before drilling! Better to drill a smaller hole and shape it a bit than a hole which is too big.
Look at the photo's to get the idea why and how it fits together.
Many pictures are better that a bunch of words:
Be sure to buy a good servo. First I bought a MG996R servo which I modified for continous rotation but that was a waste of money... Then I got quality ones, in my case the HSR-2645CRH Servo
It HAS TO BE a continuous rotation model!! Do not attempt to modify a normal servo as I did. It performed not nearly good enough and when stopping, it was not immediate.
The HSR-2645CRH Servo is very accurate and has a good idle point where it really do stop and stay put:
The Servo connection to the dispenser paddle wheel
So now was the question: how to connect the servo to the feeder paddle wheel? It seemed at first the hardest part of the project but it was in fact very simpel.
I took a piece of 5mm Polycarbonate and with a fretsaw I cut out a round disc of about 6 cm's. In the center I drilled a hole of 8 mm (the thickness of the feeder axis. This plastic axis is removable from the paddle wheel)
At the outside I drilles 6 holes of 3 mm, the thickness of the magnets. These are used to give the Arduino feedback about the position of the feeder peddle wheel.
Because the paddle wheel had 6 rubber paddles I used 6 magnets and divide them around the edge of the polycarbonate disc. 360 degrees divided by 6 is 60 degrees. The rod magnets will fit in snugly.
The hall sensor will detect each of the 6 magnets so we can use that information to precisely position and stop the paddle wheel. The servo stop delay time variable is used to add a delay after feeding, before stopping the servo. So with this delay you can tweak the exact position of the paddle wheel. This is important because if the 'stop' position is wrong, the feed will not exit the paddle wheel completely. Also the position of the hall sensor may be different in your case. Tweaking the servo stop delay variable time will solve this.
Now we can glue the paddle wheel axis into the polycarbonate disc.
Notice the comments under the pictures!
The white round servo horn is bolted on the polycarbonate disc with 3 M3 bolts. use some extra nuts as spacers and don't over tighten!
Now the servo is part of the feeder assembly so we can put it in the wooden mount and measure how tall the wood piece has to be under the servo.
The hall sensor I used is of the UNIPOLAR type. It will give a LOW output if a magnet is near and DOES NOT need the reverse polarity of the magnet to reset the output to HIGH again. So use a Unipolar hall sensor, much easier.
!!! The hall sensor needs a 10KΩ pull up resistor.
I fitted a 0805 SMD resistor right on top of the hall sensor but you can do it your way. Don't forget this resistor!
Then I took an old ballpoint pen and used the plastic as a holder for the sensor.
I used a Hammond ABS housing with flange. 120 x 65 x 40 mm
for the external connections I used female precision socket connectors, not the cheap chinese ones. I use these a lot in all my projects. Nothing worse than bad connections causing (hard to find) faillures.
On the servo and hall sensor cables I soldered these quality pin headers.
The housing and wiring:
To make programming the Arduino easier, I have an external FTDI connection:
I tried a lot of way to make a cheap and good looking front panel...
First I used Mod Podge to glue a paper laserprint on the front of the housing and cover it with more Mod Podge. --> FAIL
Then I tried a clear varnish, based on polyurethan acrylate dispersion. Very durable and strong when dried. I glued the paper very well on the housing and varnishing the upper side of the front panel print looked very good BUT it would not adhere to the laserprinter toner parts of the print. --> FAIL
After that, I took the laser print of the front panel and only laminated the top with laminating pcv. very nice finish, protecting the front and lifting the colors beautifully. Then again, I glued the laminated paper on the housing with the varnish. My idea was that the varnish would permeate the paper making it water resistant. But because I used thick paper that did not work and making it wet to test water resistance, the paper curled off the housing. --> PARTLY FAIL, to be investigated further.
Another attemp: I bought special aluminium foil, made for laser printing. 2,25 euro's per sheet. The result was great but I wanted to protect the toner with a special clear foil. That was no succes because I could not get rid of the imperfections as seen on photo 1:
Then another attempt to protect with the clear varnish, It made the alu foil very high gloss! BUT... again, the varnish would not adhere to the toner so I gave up on the varnish permanently...
FINALLY... I used the foil print without protection... It will show vinger prints when handled often (look under the BACK button of the photo at the top of this page, housing in the chicken feed) so not ideal but still good enough for me.
More photo's are not allowed apparently so...
That's all folks... have fun!