AutoCAT

March 22, 2025
Description
Summary
I started this project for about a year ago. It's designed to feed my cats at the same times every day. You can configure the number of meals in a day, the number of portions by meal and the time.
The tank is a rectangular tube measuring 150x75x200 mm. You can expand its capacity whenever you want by printing more than one tank and connecting them with a “TankUnion”. The capacity of a single tank is approximately 1 kg of cat food.
The project's development was based on a series of requirements that had to be met:
- Easy to print. Try to avoid the need for supports and large parts or parts with difficult-to-print geometries as much as possible.
- Durable and reliable. The parts it's made of should not break easily and should be durable. Operation is precise and safe, without jams or breakdowns.
- Easy to assemble and repair. Modular design: tank, dispenser, electronics, and stand.
- Easy to configure. The Wi-Fi network is configured using a JSON configuration file. Other functionalities are web-based.
- Easy to use. A very simple web interface that can be used from any mobile device.
- Cheap. I tried to optimize the price of both the electronic components and the amount of filament.
Functions
- Dispense configurable portions of food at scheduled time.
- Web interface based
BOM
3D Parts:
# | PART NAME | INFILL | PERIMETERS | SUPPORT | MATERIAL | REQUIRED | QNT. |
---|---|---|---|---|---|---|---|
1 | TankLidHandle | 10% | 4 | No | PLA | Yes | 1 |
2 | TankLid | 10% | 4 | No | PLA | Yes | 1 |
3 | TankLidMark | 10% | 4 | No | PLA | Yes | 1 |
4 | TankBottom | 10% | 4 | No | PLA | Yes | 1 |
5 | Tank | 100% | 2 | No | PETG / PLA | Yes | 1 |
TankUnion | 100% | 4 | No | PETG / PLA | No | 0-1 | |
6 | DispenserTop | 10% | 4 | No | PLA | Yes | 1 |
7 | DispenserBody | 10% | 4 | No | PLA | Yes | 1 |
8 | ElectronicsBox | 10% | 4 | Yes | PLA | Yes | 1 |
9 | DispenserOutput | 10% | 4 | Yes | PLA | Yes | 1 |
10 | Foot | 10% | 4 | Yes | PLA | Yes | 1 |
11 | PushBlade | 100% | - | No | TPU / PLA | Yes | 1 |
12 | CleanBlade | 100% | - | No | TPU / PLA | Yes | 1 |
13 | FoodPlateBase | 10% | 4 | No | PLA | No | 0-1 |
14 | FoodPlateBed | 10% | 4 | No | PLA | No | 0-1 |
15 | ChargeCellMock1kG | 10% | 4 | No | PLA | No | 0-1 |
16 | ChargeCellSeparator | 10% | 4 | No | PLA | No | 0-1 |
If you need a simple cats feeder you only need to print required parts, other parts are optional like: food plate, tank expansion.
Food plate actually is used to prevent your pet moves food plate. Is ready to include an scale.
If you buy a standard rectangular tube of 150x75mm you don't need to print "tank" part. Remember to use a material food safe approved. If you print the tank in a transparent or translucid material you can see how full is the tank.
You can print the blades in PLA, but using TPU 83 Shore D makes them operate more smoothly and prevents potential jams.
Electronics:
# | COMPONENT | MODEL | SUPPLIER | QNT. |
---|---|---|---|---|
1 | Arduino Nano | ESP 32 | Arduino | 1 |
2 | Servo Motor | DS3218Pro-180 / DS3218Pro-270 | Aliexpress | 1 |
3 | Electrolytic Capacitor | From 470uF - 25V to 1000uF - 36V | Aliexpress | 1 |
4 | Wires | Wires for servo | Aliexpress | 1 |
5 | Servo Round Support | RCmall - Servo Support M3.8 | Aliexpress | 1 |
In this design, I have used the waterproof DS3218 servo because I have it at home. It will probably work with a servo that has less torque. This would mean cost savings. If a different servo is used, it will be necessary to print a part to adapt it to the existing slot.
Compatible microcontrollers:
- Arduino nano esp32 (recommended)
- Any ESP32 board with Wifi.
Screws:
# | SIZE | 3D PART | DESCRIPTION | QNT. |
---|---|---|---|---|
1 | M3x10mm | Dispenser | Decorative screws to fixed tank with dispenser | 2 |
2 | M4x50mm | Dispenser | Join dispenser with electronic box | 4 |
3 | M3x10mm | E. Box | Hexagonal head. Join dispenser output with electronic box | 2 |
4 | M4x20mm | E. Box | Join foot with electronic box. Join foot with food plate | 6 |
5 | M3x20 | Dosificator | Join PushBlade with servo | 4 |
6 | M3x20 | Dosificator | Join CleanBlade with PushBlade | 2 |
7 | M3 | E. Box | M3 standar nuts | 2 |
8 | M1x2 | E. Box | Fixed Arduino Nano into electronic box | 2 |
9 | M3 Nuts | Dispenser | M4 Insertion Nuts. Like this | 2 |
10 | M4 Nuts | Dispenser | M4 Insertion Nuts. Like this | 8 |
Other:
- If you prefer to buy the tank instead of print is a rectangular tube of 150x75mm.
- 4 Rubber pads. For foots. 4 extra if you print food plate.
- 5x1 cm double-sided tape.
Wiring
The wiring is very simple, you only need to include capacitor in parallel with Servo to protect Arduino Nano from peak tensions.
Signal pin could be any output pin of Arduino Nano. Remember to config pin number in config.json (see Usage and Configure section).
Code
It's developed with MicroPhyton so your Arduino Nano ESP32 must have Micropython installed. All code is on github repository: Juan1ll0/AutoCAT. I'm open to accept security updates, bugfixes, improves…etc.
To make this device up and running you must copy all files and folders of the repository into the device root folder. Then make changes in config files (see Usage and Configure section) to establish network and hardware params.
Once here disconnect the Arduino Nano ESP32 from your computer and connect again to make a hard reset and check if Web UI is running.
Assembly Instructions
My recommendations for this project are:
- If you are not familiar with Arduino or ESP devices, is better to start with electronics and software installation.
- When you have all parts printed insert all nuts in parts.
- Start with electronic box mount.
- Mount output using two M3x10mm screws with nuts.
- Fix servo with double-sided tape
- Fix Arduino Nano ESP32 with box using M1x10 tiny screws.
- Dispenser.
- Mount “Dispenser Body” on top of “Electronic Box”. Dispenser hole must be in front of electronic box hole.
- Put “PushBlade” inside dispenser and screw to servo (previously mounted with Servo round support) with M3x20mm
- Mount Dispenser top.
- Mount “CleanBlade” and screw to “PushBlade” with two M3x20mm screws.
- Union dispenser with electronic box using M4x50mm screws.
- Tank.
- Glue Tank-bottom and TankLidSupport to tank.
- Assembly all.
- Assemble Tank with dispenser using two decorative M3x10mm Screws
- Assemble Electronic Box with Foot using M4x20mm screws.
- Food Plate (Optional)
- Union “food plate base” with “foot” with two M4x20mm screw.
- Screw cell charge to “food plate base”
- Screw cell charge to "food plate bed". Between two parts include “ChargeCellSeparator”
Usage and configure
First of all you can ask me any problem with the design.
Once you have all code uploaded into device, you need to configure your wifi network and servo.
You can schedule more than 1 time in day and setup the number or rations per meal.
Network
For networking configuration edit file “config.json” section “network”. Inside this file you must configure your wifi credentials and network configuration:
{
…
"network": {
"ssid": "your-ssid",
"passwd": "your-password",
"config": {
"static_ip": "your-private-network-ip",
"subnet_mask": "your-private-network-masl",
"gateway": "gateway-ip",
"dns": "your-dns"
}
}
}
*Note: “config” is optional, if you ignore this field DCHP will be used. Configuration file without static IP looks like this:
{
…
"network": {
"ssid": "your-ssid",
"passwd": “your-password”
}
}
Servo
To setup pin and angle for servo signal yo must set inside “config.json” section “servo”:
{
"servo": {
"pin": 5,
"angle": 270,
},
…
}
Scheduler
You can configure scheduler from “scheduler.json”. You can add or delete events:
[
{
"name": "Breakfast",
"quantity": 3,
"time": "09:55"
},
{
"name": "Meal",
"quantity": 1,
"time": "13:00"
},
{
"name": "Lunch",
"quantity": 2,
"time": "19:00"
}
]
WEB UI
This first version includes a Web Interface on port 5000 to schedule meals. So if you have your device configured on IP 192.168.1.25 you can access with this URL: http://192.168.15.230:5000
Image of interface: