Smart cat treat dispenser for "one fast cat" wheel

A (mostly) 3d printed cat treat dispenser. Its specifically designed to mount to a wheel, but can be triggered via API
33
58
2
1172
updated June 23, 2025

Makes

Comments

This model is absolutely fantastic!

I recently picked up a running wheel for my two cats. I had the brilliant, completely original (😂) idea of creating a progressive training setup. Imagine my excitement when I came across your model; it’s like you read my mind!

Would you be open to sharing the source files? I’d love the opportunity to make a few small tweaks for my specific setup.

I’d like to add additional, larger channels for routing wiring more cleanly. As you can see from the pic, I had to hide a lot of it with electrical tape.
I’m also interested in trying to integrate the magnetic sensor on the back. I’ve found the flex of the wheel is just a bit different between my two cats, that sometimes it misses movement of the smaller one.

Thanks so much for sharing your awesome work with the community!

My own "customizations" include:

* Split vcc/gnd from light break sensors to resistors+leds to minimize wiring back to the esp32
* Custom ESPHome-based progressive trainer logic -- retains unified ESPHome setup, tweak parameters via Home Assistant device settings, etc (edited)

Image preview

@mannkind Hey, seeing your build reminded me to push the changes i had made in the past few months back up to the github project (internally, i do everything in a private gitlab, so the public code was the rushed code i put together to try and submit this in time for the printables competition)

Theres a bunch of bug fixes and stuff that i pushed in the last day, so check that out if you are having any issues.

As for the ESPHome stuff, did you replace the logic on the device, or did you just add new MQTT handlers that can update new distance targets and such? In the past, i had it auto increment the distance, but at some point my cat would stop running on it. idk if it was incrementing too fast and he thought it was broken - but i went back to manually updating it. My eventual plan was to add that feature back in, but im not personally using auto incrementing distance currently, so it has remained on the back burner.

The new code fixes a lot of the MQTT stuff though, so it would be easy to look at how I detect the mqtt manual treat dispense message, and modify it for other settings changes

@Methodical_160272 The ESPHome stuff is a separate implementation on the ESP32. Once I can really get my cats to use the wheel/trainer, I’ll probably share it. Currently it has:

* Progressive distance training
* Quiet hours (that servo is loud)
* Jiggling of the servo if no treat comes out after a timeout
* Direct integration with home assistant (allows tweaking most of the variables)
* Many bugs, I’m sure 😂

Image preview
View one more comment

Great project!
I really appreciate this project since I have two food motivated cats that could benefit from running.
------------------------------------------------------------------
Additional Notes:

- Attached a wiring chart based on the notes

- After connecting to the Cat_wheel_Network I had to manually go to 192.168.4.1 in order to connect to wifi (based on tzapu WifiManager project notes).

- He wasnt kidding about needing the motor to have its own power source, I intiially tried powering it off the board and it simply wouldn't run. I bought this to power the motor: https://a.co/d/dfiT60L
----------------------------------------------------------------------------------------
Some notes and questions based on the zipped images
- Step 7 - Does not specify what screw to use. It did not have a slot for an m3 screw.. However the piece friction fitted on so it doesn't currently seem to be a problem? 
- Step 11 - Did not specify what screw to use for the gear motor, however if seems you are intended to use the original little black screw that came with the motor kit. 
- Step 15- Does not specify what screw to use. It could be a m3*12 however no m3 nut so it may just be friction fit? 

-------------------------------------------------------------------
I have a One Fast Cat - Gen 7 and mine is completely smooth on the outside (no convenient holes for magnets). https://a.co/d/hgepfxn 

I assume both models are a 48" wheel.. UPDATE: There is a spot in the code to indicate how far apart the magnets are.. I imagine this can work with other type of cat wheels as well if you change that config.

The magnet sensor, Hall effect holder, seems to connect to the Gen 7 just fine. No alterations needed there.

The feeder itself will need modifications to attach to the wheel. I plan on just drilling through the side of the base. (edited)

Image preview
Image preview
Image preview
Image preview

@GoghGirl_203468
Hey! glad to see your build turned out well, and thank you so much for making a wiring diagram!

as for the issues you ran into, Sorry that the wheel mount changed. Im not sure what generation of wheel I have, but if it helps, theres a STEP file of the mount pattern, so you could perhaps make your own wheel mount instead of drilling.

As for the instructions:
* Step 7 does not need a screw, its just showing that the front cap dovetail should slide on the main body tube dovetail and not be bent.

* step 11: yeah, it should have mentioned that the screw was the one that came with the servo, but thats correct.

* step 15: the arduino cover is just friction fit, the sensor cover takes an m3x12. The hole in the front cap where the sensor fits should be a bit undersized so the bolt should cut its own threads. It got a bit tight in there, and there shouldn't be any force / weight on that, so it felt ok to just thread the plastic

btw, i love the colors on yours!

@Methodical_160272

Actually I'm still blocked!

At this point I got it printed and wired up, but unfortunately the combination of code + servo is not working for me.

I think I'm having the same issue as this person:
https://github.com/madhephaestus/ESP32Servo/issues/78

I made several small test programs just to check to make sure the servo can spin. I can get the continuous servo spinning if I use the Arduino IDE with standard continuous servo commands (myServo.writeMicroseconds etc) but as soon as I copy the code to a new project in Platform IO, the code just stops working...

At this point I'm not sure if it's truly an issue with the esp32servo library, platform IO, the continuous servo or what!

I've tried lots of different ways of controlling the servo with PlatformIO but the only thing I have found that can get the servo moving with Platform IO is with the PWM example.. but I really dont want to do it that way. https://github.com/madhephaestus/ESP32Servo/tree/master/examples

At this point I waiting for another servo to arrive (to see if it's the servo), otherwise I may see if I can deploy the code through Arduino IDE instead of VSCode PlatformIO.

---
In regards to the wiring

I used these https://a.co/d/06DWb1D pin terminals so I could screw the wires into the board and not solder them directly.

I also used a mini solderable pcb board https://a.co/d/4uXsvQI

Image preview
View 3 more comments