Introduction: Automated Pet Feeder

About: Graduate student at ASU Polytechnic working on my masters degree in Manufacturing (MSE). Additive manufacturing materials researcher. Nuclear Survivability Electrical Engineer by day and student/nerd by night.

I've wanted to make an automated dog feeder for a long time, so that my fuzzy friend will always get fed at the same time. She doesn't tend to come find us about food and water, so her feeding times vary by around 30 minutes each day. To solve this I decided to make an IOT enabled dog feeder that will feed her the specified amount of food at specified times.




  • NodeMCU ESP8266
  • Servo (standard size)
  • OLED display (128x64)
  • Pushbutton
  • Wire
  • 2.2K resistors
  • USB cable


  • PLA filament
  • Small screws
  • 2" PVC Tee
  • Servo horn
  • MDF
  • Medium Sized Plastic Container


  • 3D printer
  • Utility Knife
  • Flush Cutters
  • Soldering Iron and solder
  • Screwdriver
  • Super Glue
  • Wood Glue
  • USB Cable

Step 1: Printing the Parts

There are a total of 5 printed parts crucial for assembly. They are the servo mount, back cover, auger brace, and two parts of the auger. I split the auger into two parts so that they would require no support material in printing. The parts were designed to require a minimal amount of support material.

The two parts of the auger need to be glued together.

Step 2: Servo Modification

The servo needs to have continuous rotation for this to work. You can buy servos like that, or you can modify standard ones for that. It is a relatively simple process. I recommend checking out this video by GreatScott! on youtube that explains how to do it. His channel is an excellent source for things of this type.

To modify the servo you need to disassemble it and remove the pin that keeps it from rotating more than 180 degrees. You also need to remove the poteniometer, as keeping track of the position is not important anymore. The last step will be putting two 2.2K resistors into the servo in place of the potentiometer. These are to make the servo believe that it is always at the 90 degree position. The resistors should each go from the outside pins to the middle pins. After finishing up with the modification, close up the servo and it's good to go. While my process is slightly different than the one GreatScott! uses, it does the same thing in the end.

Step 3: Assembly of the Auger Mechanism

I designed the auger to be mounted on the 6 pointed servo bracket. To assemble the mechanism, attach the servo to the mount using the 4 included screws. You'll then need to attach the servo horn into the indent in the back of the auger using some small screws. The auger mechanism can then slide into the servo bracket and connect to the servo with the horn. Put the auger support onto the end of the PVC Tee and then insert the auger assembly into the Tee, making sure that the stick on the end of the auger is inserted into the hole of the support cap.

For the chamber that holds the food, I used an old clear plastic container with a hole drilled in the bottom. I then hot glued this to the top of the Tee so that the food would drop into the auger.

Step 4: Code

Plug the NodeMCU into your computer and open the Arduino software. Make sure that you have the NodeMCU board selected (if its not installed add it through the board manager). Choose the following setting as shown up above in the picture and then upload the code to the NodeMCU. This will take a little bit as the code takes a while to compile.

While the code is currently functional, I still have some polishing up to do in areas that I am not quite happy with yet; but currently, it does work as intended (or I just haven't found the bugs yet).

The code can be downloaded from my github, as it is multiple files and instructables does not allow zip files. Code

Step 5: The Electronics

The electronics are relatively simple. One thing to keep in mind is that if you ever update the code you need to make sure that the servo is unplugged from power. When starting code upload the ESP8266 sends a small PWM signal to the servo causing a reset.

The servo is connected to 5V, GND, and D4. The screen is connected to 3.3V, GND, SCL is connected to D5, and SDA is connected to D2. The button is connected to D7 and utilizes a pulldown resistor.

For power I chopped the end off of a USB cable and used the 5V and GND lines for power.

Step 6: Final Assembly

The auger mechanism will need a pedestal to sit on so that it is above the food bowl. I made a simple box that was bout 6" wide x 10" deep and about an inch taller than the food dish using some mdf I had laying around.

I then hot glued the mechanism to the base so that the output of the auger was at the edge of the box, above the bowl.

The only remaining work to do is to double-check that all joints and pieces are properly secured to each other so that the machine doesn't fall apart or jam.


Step 7: Connecting to WiFi

Upon powering up the feeder it will create a WiFi network called, Food-Dispenser. Connect to it, and it will redirect you to a setup page. If it doesn't redirect you go to the web page at

Press the configure WiFi button and login the feeder into your WiFi network. The feeder will kick you out of the portal once it is setup and tell you to log into the control page. After logging into your network, log your computer onto the same network as the feeder.

Step 8: Using the Feeder

The button on the back of the feeder will cause the feeder web address to show up on the feeder display. Go to that web address and go to the control page to control the feeder. The default username and password is admin and password. Once you are logged in you can then enter the days, times, and amount of food you want to be dispensed at the specified times. To delete a feeding time, change the dropdown to the feeding time you wish to delete and set the hours to 0.

Pets Speed Challenge

Participated in the
Pets Speed Challenge