A simple device to track whether the pups have been fed breakfast and dinner


Our family members have differing schedules, but the pups will have none of that. They want kibble regardless of who wakes up first. While they would never complain about getting a second breakfast, we want to ensure we’re feeding them a healthy amount and not doubling up meals. The days of sticky notes to communicate dog meal status are over!

This was a fun little project to make, bringing in a little bit of electronics, a little bit of programming, and a little bit of wood working.


Source code, design files, and enclosure layout is avilable in the hc-dog-meal-tracker GitHub repository.


solderless breadboard
point to point soldered circuit

The system is controlled by an Arduino board. Development ran on an Arduino Nano clone using a solderless breadboard. Testing and production runs on Adafruit 5v Trinket, chosen for the small compact size, and the fact that I had one in inventory, just begging for a project. The production circuit uses point-to-point soldering.

Additional electronics:

  • Push Button - digital read, debounced via hc-bouncy-button library.
  • Two Status LEDs - one for breakfast, one for dinner.
  • Power On Indicator - connected through a digital output pin, current firmware simply turns this on and leaves it on.


blind pockets routed in pallet wood
cnc engraver with raw wood
close up of raw wood before finishing
first coat of dark stain
base coat of polycrylic sealer

I had some reclaimed pallet wood from another project, seemed perfect for this project. It took a little more sanding than expected, resulting in not thick enough for the pushbutton and its leads to fit inside. A small piece of scrap poplar from the discard bin to the rescue. Glued it to the top of the enclosure, destined to live between the top and bottom, turning the grain perpendicular, a make-shift plywood.

Set up my X Carve CNC router to carve blind pockets in the top and bottom to make space for the electronics. X axis drive belt snapped right away. Rather than wait the week for replacement belt to arrive, I simply routed it by hand. Not pretty by any stretch, but this only needs to work, the visual will be hidden in the final assembly. Used the drill press to allow four wood screws to hold the top and bottom together, counter sunk so the screw heads will disappear into the base.

Once the replacement GT-2 belt for the CNC x axis was installed, time to engrave the face plate. Two simple jobs to carve (A) the lettering and hole locations, and (B) paw print artwork. Hand drilled out the three holes for the LEDs and push button. Design work in InkScape and g-code generated with F-Engrave.

Some sanding (100 grit through 220), dark stain (two coats), Polycrylic sealer (4 coats), enamel paint, more Polycrylic (3 coats) to make the enclosure really pop! I’m really happy with how beautiful the grain of the pallet wood looks when finished.


The Arduino firmware controls the logic. The sketch is simple enough, waiting for a button press, updating indicator LEDs, and resetting each day for some hungry pups.


There are four states:

  • 0 - no meals served, dogs mean serious business
  • 1 - Breakfast - dogs had breakfast today, OK for now but getting anxious for their supper
  • 2 - Dinner Only - dogs definitely had dinner, but when the human servant arrived at the Dog Meal Tracker, the breakfast light was not illuminated. Either a forgetful human servant did not press the button at breakfast, or maybe a really weird day where the duration between breakfast and dinner exceeded the timeout and the system resetting
  • 3 - Breakfast and Dinner - the dogs are happy and full, but they’ll never object to some treats

Pressing the button simply cycles through the states, wrapping back to zero.

Daily Reset

There are inactivity timeouts to reset the indicator daily:

  • Spend no more than 15 hours in state 1
  • Spend no more than 8 hours in states 2/3
  • Whenever a state expires, reset back to 0

Usage Examples

Consider a standard use case:

  • Breakfast is served around 7am. If nothing else happens that day, reset after 15 hours, at 10pm.
  • Dinner is served around 6pm. Well within the breakfast timeout, now the timer resets after 8 hours, at 2am.

Early breakfast use case:

  • Breakfast served at 5am. reset after 15 hours, 8pm.
  • As long as dinner is served before 8pm, we’re fine.

Late breakfast use case:

  • Breakfast served at noon. Whew, really slept in there, didn’t we? If nothing else that day, reset after 15 hours, at 3am.

Late dinner use case:

  • Luck pups really never get their supper later than 8pm, which coincides with the early breakfast use case. I think the pups are golden!

Plus, in extreme cases the family is likely communicating about schedules anyway since they’re out of the ordinary routine.