Introduction: Dogduino:The Automatic Dog Feeder

Picture of Dogduino:The Automatic Dog Feeder

Tired of having to find the dog food to feed the dog? Tired of having to get up early so your dog doesn't attack you for his food? Are just plain lazy? If you answered yes to any of these questions, this instructable is for you. Powered by the intelligent Arduino, this gadget will automatically dispense measured amounts of dog food at user designated times. No longer the days of manually feeding your dog. Join the Revolution! Build this so you will never have to bust out the measuring cup or manually feed your dog again!

This instructable is part of the Sparkfun and Epilog challenge so if you like it, vote for it. Also you can  leave a comment or rate or subscribe!

Also a video of this in action will come in a little bit

Step 1: Bill of Supplies

Picture of Bill of Supplies


Materials
1 x Bucket
1 x Standard 3 pin servo (This is the one I am using)
1 x Blank or unwanted CD
1 x Arduino or ATmega328 (I am using the Arduino Uno)
1 x 10K Ohm Resistor
1x Proto/Maker Shield or breadboard (You could use a Etched board, but it would be a lot easier to use aThe Makers Shield or Protoshield)
1 x Push button (This will be a override button)
1 x Sharpie Marker
1 x Large Cardboard Container (I used a Chips box from Costco)
Extra cardboard
1 x 9V arduino Battery pack or Wall Adapter
Hardwood Strips


Tools
1 x Hot Glue Gun
1 x Dremel w/cutting wheel
1 x Soldering Iron
1 x Scissors

Step 2: Cutting the CD

Picture of Cutting the CD

Before we do anything, we must cut the opening in the CD for the food to go through. This will be slightly difficult, as we want a straight line. You may want an extra CD in case you make an error


Step 3: Affixing the CD to the Servo Head

Picture of Affixing the CD to the Servo Head

This step is kind of self explanatory, All you need to do is glue the servo head to the inner rim of the cut CD


Step 4: The Circuit

Picture of The Circuit

Make the circuit from the schematic in the second picture. You can use a breadboard or Proto/MakerShield for the circuit.

Step 5: Making a Bracket for the Servo

Picture of Making a Bracket for the Servo

We don't want the servo turning around, so we have to make something to hold it in place.

Make one of the things in picture 2 with hardwood, make sure the servo fits in it. Then cut two long pieces of wood and glue them on the side. Lastly, glue two more pieces on the pieces you just glued. Use picture one as a reference.

Step 6: Preparing the Container

Picture of Preparing the Container

For this step, you will cut the extra cardboard up, so the box will funnel toward the opening at the front. Make sure you cut the pieces of cardboard so the length is 8 inches and the height is around the height of the container. Hot glue it so the side that is eight inches long is parallel to the bottom of the box.

MAKE SURE THAT BEFORE YOU GLUE IN THE CARDBOARD, YOUR ARDUINO AND CIRCUIT WILL FIT INSIDE THE CORNER COVERED BY THE CARDBIARD LIKE IN PICTURE 3

Next staple the servo cord up so it doesn't fall into the food. Then glue in the servo inside its mounting bracket from step 5 and slide another piece of hardwood under the top of the bracket like in picture 5

Now, Mark and cut a whole where the CD slit will be when its fully turned like in pictures 6 and 7.

Step 7: Adding the Chute

Picture of Adding the Chute

This is the last step of assembling. All you have to do is attach the chute (Make one like shown in the picture by folding cardboard in half or gluing two pieces in a V shape) to the front of the box. Make it as long as you want to

Step 8: Coding the Arduino

Picture of Coding the Arduino

The only thing complicated about this step is installing the libraries. In the download, I made it easier by including them. Just copy the 3 Libraries from the Library folder in the .zip into the Libraries folder in the Arduino IDE folder. Then just open the .pde file in the IDE and hit upload to board.

(For more help on libraries see my instructable about that here )

WHEN YOU CODE THE ARDUINO, MAKE SURE ITS PLUGGED INTO THE POWER AS WHEN IT RESETS, IT WILL RESET TO THE TIME GIVEN IN THE SKETCH

Step 9: Start It Up (And Some Final Words)

Picture of Start It Up (And Some Final Words)

 Just prop it up on an angle and press the button to test. If you find it dispenses too much, just make the number after the delays in the code smaller, and re sync it with the correct time.

Also if you have a container with edges in the box that stop the flow of food, glue a piece of paper over this.

Happy Building!

Comments

AngelA49 (author)2015-10-26

i got a problem when i tried to upload the code to the arduino uno R3, the console says:

C:\Program Files (x86)\Arduino\libraries\Time/Time.h:122:9: note: candidate expects 6 arguments, 3 provided

no matching function for call to 'setTime(<unresolved overloaded function type>, <unresolved overloaded function type>, <unresolved overloaded function type>)'

what it means, can somebody help me please?

DiegoI (author)2015-10-25

Any reason why you use a servo instead of a stepper? I would imagine the stepper would have enough torque at a lower price.

BenP8 (author)2015-03-18

PLEASE HELP,

I thought you invention is amazing so i wanted to build it but everytime i go to compile the code i get error

Arduino: 1.6.0 (Windows 7), Board: "Arduino Uno"

In file included from C:\Users\Benjamin F. Pettis\Documents\Arduino\libraries\Time\DateStrings.cpp:10:0:

C:\Users\Benjamin F. Pettis\Documents\Arduino\libraries\Time\DateStrings.cpp:18:18: error: variable 'monthStr1' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

char monthStr1[] PROGMEM = "January";

^

C:\Users\Benjamin F. Pettis\Documents\Arduino\libraries\Time\DateStrings.cpp:19:18: error: variable 'monthStr2' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

char monthStr2[] PROGMEM = "February";

^

C:\Users\Benjamin F. Pettis\Documents\Arduino\libraries\Time\DateStrings.cpp:20:18: error: variable 'monthStr3' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

char monthStr3[] PROGMEM = "March";

^

C:\Users\Benjamin F. Pettis\Documents\Arduino\libraries\Time\DateStrings.cpp:21:18: error: variable 'monthStr4' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

char monthStr4[] PROGMEM = "April";

^

C:\Users\Benjamin F. Pettis\Documents\Arduino\libraries\Time\DateStrings.cpp:22:18: error: variable 'monthStr5' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

char monthStr5[] PROGMEM = "May";

^

C:\Users\Benjamin F. Pettis\Documents\Arduino\libraries\Time\DateStrings.cpp:23:18: error: variable 'monthStr6' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

char monthStr6[] PROGMEM = "June";

^

C:\Users\Benjamin F. Pettis\Documents\Arduino\libraries\Time\DateStrings.cpp:24:18: error: variable 'monthStr7' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

char monthStr7[] PROGMEM = "July";

^

C:\Users\Benjamin F. Pettis\Documents\Arduino\libraries\Time\DateStrings.cpp:25:18: error: variable 'monthStr8' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

char monthStr8[] PROGMEM = "August";

^

C:\Users\Benjamin F. Pettis\Documents\Arduino\libraries\Time\DateStrings.cpp:26:18: error: variable 'monthStr9' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

char monthStr9[] PROGMEM = "September";

^

C:\Users\Benjamin F. Pettis\Documents\Arduino\libraries\Time\DateStrings.cpp:27:19: error: variable 'monthStr10' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

char monthStr10[] PROGMEM = "October";

^

C:\Users\Benjamin F. Pettis\Documents\Arduino\libraries\Time\DateStrings.cpp:28:19: error: variable 'monthStr11' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

char monthStr11[] PROGMEM = "November";

^

C:\Users\Benjamin F. Pettis\Documents\Arduino\libraries\Time\DateStrings.cpp:29:19: error: variable 'monthStr12' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

char monthStr12[] PROGMEM = "December";

^

C:\Users\Benjamin F. Pettis\Documents\Arduino\libraries\Time\DateStrings.cpp:31:22: error: variable 'monthNames_P' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

PGM_P monthNames_P[] PROGMEM =

^

C:\Users\Benjamin F. Pettis\Documents\Arduino\libraries\Time\DateStrings.cpp:37:26: error: variable 'monthShortNames_P' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

char monthShortNames_P[] PROGMEM = "ErrJanFebMarAprMayJunJulAugSepOctNovDec";

^

C:\Users\Benjamin F. Pettis\Documents\Arduino\libraries\Time\DateStrings.cpp:39:16: error: variable 'dayStr0' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

char dayStr0[] PROGMEM = "Err";

^

C:\Users\Benjamin F. Pettis\Documents\Arduino\libraries\Time\DateStrings.cpp:40:16: error: variable 'dayStr1' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

char dayStr1[] PROGMEM = "Sunday";

^

C:\Users\Benjamin F. Pettis\Documents\Arduino\libraries\Time\DateStrings.cpp:41:16: error: variable 'dayStr2' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

char dayStr2[] PROGMEM = "Monday";

^

C:\Users\Benjamin F. Pettis\Documents\Arduino\libraries\Time\DateStrings.cpp:42:16: error: variable 'dayStr3' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

char dayStr3[] PROGMEM = "Tuesday";

^

C:\Users\Benjamin F. Pettis\Documents\Arduino\libraries\Time\DateStrings.cpp:43:16: error: variable 'dayStr4' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

char dayStr4[] PROGMEM = "Wednesday";

^

C:\Users\Benjamin F. Pettis\Documents\Arduino\libraries\Time\DateStrings.cpp:44:16: error: variable 'dayStr5' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

char dayStr5[] PROGMEM = "Thursday";

^

C:\Users\Benjamin F. Pettis\Documents\Arduino\libraries\Time\DateStrings.cpp:45:16: error: variable 'dayStr6' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

char dayStr6[] PROGMEM = "Friday";

^

C:\Users\Benjamin F. Pettis\Documents\Arduino\libraries\Time\DateStrings.cpp:46:16: error: variable 'dayStr7' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

char dayStr7[] PROGMEM = "Saturday";

^

C:\Users\Benjamin F. Pettis\Documents\Arduino\libraries\Time\DateStrings.cpp:48:20: error: variable 'dayNames_P' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

PGM_P dayNames_P[] PROGMEM = { dayStr0,dayStr1,dayStr2,dayStr3,dayStr4,dayStr5,dayStr6,dayStr7};

^

C:\Users\Benjamin F. Pettis\Documents\Arduino\libraries\Time\DateStrings.cpp:49:24: error: variable 'dayShortNames_P' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

char dayShortNames_P[] PROGMEM = "ErrSunMonTueWedThrFriSat";

^

Error compiling.

This report would have more information with

"Show verbose output during compilation"

enabled in File > Preferences.

adam.lucke.9 (author)BenP82015-04-19

You have to go to:

https://www.pjrc.com/teensy/td_libs_Time.html

&

https://www.pjrc.com/teensy/td_libs_TimeAlarms.html

and download the latest version of the libraries that the OP gives. That should clear up a lot of your errors.

Dsutton123 (author)2014-12-01

What is the time intervals on the code set for?

Raakone (author)2014-05-27

This is awesome. Just wondering, woudl there be a way to have an "extension" for the button? My brother wants something like this, the idea being that his dog gets excited when anyone is at the door, if the button was pressable from the door, but the Dogduino at the other end of the room, let's say, the idea being that the dog gets less excited about who's at the door when some food comes along.

Zachattack2002 (author)2013-11-02

One word awesome

nattyD96 (author)2013-06-04

I am currently working on the circuit but from the picture you give and the schematics you also give, there seems to be a lot more connections than in the schematics and i can't seem to figure out where the connections are coming from and going to. Besides the critical components shown in the schematics. HELP soon! please! this is for my school project due next week and all i need to finish is the circuit! THANK YOU!

rachilio (author)2012-01-10

Is it a robot or a cardbord box?

IgnorantZebra (author)rachilio2013-05-07

both.

Paschenberger (author)2012-10-31

Hi there,

Do you know if it is possible to hook up a wireless card to this, so that it can be controlled via the internet rather than a button?
What a great project, looks so simple - congrats!

this was a while ago, but probably, it wouldnt even take much coding

mmc1234 (author)2013-04-21

Hi! when i try to upload the sketch to my Arduino, appears a problem, what does that mean?
C:\Users\User\Desktop\Arduino\arduino-1.0.3\libraries\TimeAlarms\/TimeAlarms.h:49: error: candidate is: AlarmID_t TimeAlarmsClass::create(time_t, void (*)(), uint8_t, uint8_t, uint8_t)

tmilham (author)2012-03-01

What servo do you use?

nbagf (author)2011-02-10

what does the button do?

IgnorantZebra (author)nbagf2011-02-10

runs the servo, so it manually dispenses

About This Instructable

83,418views

56favorites

License:

More by IgnorantZebra:How to Fix Dead EarphonesDogduino:The Automatic Dog FeederHow to Install Libraries in the Arduino
Add instructable to: