Skip to the content
PCBKitNew board
2 layersCatFeeder, the printed circuit board in 3D

Project on esp32 to automate cat feeding

Copper layers
2
Thickness
1.6 mm
Parts
11
Nets
15
Pads
72
Tracks, vias
0, 0
Routed
Not yet
KiCad
KiCad 9.0 (file 20241229)
Created
20 Jun 2026
Updated
7 Jul 2026

Overview

CatFeeder is an open-source printed circuit board by 12romis, from the 12romis/CatFeeder repository on GitHub. It is a 2-layer board with 11 parts on 15 nets.

It is built around the TP4056. Its parts include 3 ICs, 2 capacitors, 1 resistor, 1 diode and 1 switch. It belongs with the ESP32 and RISC-V boards of this library.

Main components

1

README

README.md

Cat Feeder — ESP32-C3 automatic feeder

Automatic dry food dispenser. An ESP32-C3 SuperMini drives a 28BYJ-48 stepper motor through a ULN2003 module, turning a 3D-printed auger screw that dispenses food pellets. Feeding is triggered by a time schedule or by a physical button press. The device runs from a single 18650 cell and sleeps between events.


Hardware

RefComponentNotes
U2ESP32-C3 SuperMiniMCU + BLE 5.0
U1TP4056 module18650 charging + protection
U3AP3602A boost module5 V rail for motor
M1ULN2003 driver modulestepper driver
SM128BYJ-48 stepperauger drive
BT118650 Li-Ion cellmain power source
SW1Momentary push buttonmanual feed / wake
D1LEDstatus indicator
R1220 ΩLED current limit
C1100 nFpower decoupling
C21000 µFmotor current buffer

Wiring

See schematic in schema/KiCad/cat_feeder.pdf or open the KiCad project at schema/KiCad/CatFeeder.kicad_sch.

alt text alt text

Pin map (ESP32-C3 SuperMini):

GPIOConnects toDirection
2ULN2003 IN1OUT
3ULN2003 IN2OUT
4ULN2003 IN3OUT
5ULN2003 IN4OUT
8LED via 220 Ω to GNDOUT
9Button to GND (INPUT_PULLUP)IN / wake
10AP3602A boost ENOUT

Power path: 18650 → TP4056 → ESP32-C3 VIN (always on) and 18650 → TP4056 → AP3602A VIN → 5 V → ULN2003 + motor (switched via GPIO 10).


Software setup

Requirements

  • VS Code with the PlatformIO IDE extension
  • USB cable (the C3 SuperMini uses native USB — port appears as /dev/ttyACM0 on Linux)

Build and flash

  1. Open the CatFeeder/ folder in VS Code (it is the PlatformIO project root).
  2. Select the environment:
    • c3 — ESP32-C3 SuperMini (production target)
    • s3 — ESP32-S3 DevKitC-1 (breadboard test; same GPIO numbers)
  3. Click Upload in the PlatformIO toolbar, or run:
bash
pio run -e c3 --target upload
  1. Open the Serial Monitor at 115200 baud:
bash
pio device monitor -e c3

Flash mode on C3 SuperMini: if the board doesn't enter download mode automatically, hold BOOT (GPIO 9) while pressing RESET, then release RESET.


First-run configuration via Serial console

All configuration is done by typing commands in the PlatformIO Serial Monitor (line ending: \n or \r\n).

1. Configure Wi-Fi for automatic time sync (one-time setup)

The device has no RTC chip. On every cold boot (power-on after battery removed or discharged) it connects to Wi-Fi, fetches UTC time from NTP, then immediately disconnects. Wi-Fi is never used after deep-sleep wakes — only on cold boot.

text
WIFI_SSID MyNetwork
WIFI_PASS mypassword

Credentials are saved to flash and never need to be entered again. If Wi-Fi is unavailable, the device falls back to manual time entry:

text
SET_TIME 1750420800

Get the current Unix epoch in your terminal:

bash
date +%s

2. Set the feeding schedule

Times are in UTC. Up to 8 entries, space-separated.

text
SCHED 07:00 18:30

The schedule is saved to flash (NVS) and survives power-off.

Between scheduled feeds the device is in deep sleep. It wakes automatically at each scheduled time, runs the motor, then sleeps until the next entry.

Scheduled feed limits (config.h):

LimitDefaultDescription
MAX_PORTIONS_PER_DAY4Max scheduled feeds per day; extras are skipped
MIN_INTERVAL_SEC1800 sMin gap between scheduled feeds (30 min)

These limits apply only to the schedule. Button press and FEED serial command are always allowed regardless of how recently the motor ran.

3. Calibrate portion size

Portion size is defined in stepper steps, not time. Calibrate by weighing:

text
CAL 512       ← run motor 512 steps; weigh the dispensed food
CAL 768       ← try a different value
SAVE          ← commit the chosen step count to flash

Repeat CAL until the dispensed amount matches the desired portion weight. SAVE must be sent explicitly — until then the new value is not persisted.

4. Verify

text
STATUS        ← show time, steps, portionsToday, schedule with next feed countdown
FEED          ← manual feed (no limits)
RESET_DAY     ← zero portionsToday and lastFeedEpoch (for testing)

All Serial commands

CommandDescription
WIFI_SSID <ssid>Save Wi-Fi network name to flash
WIFI_PASS <pass>Save Wi-Fi password to flash
WIFI_SYNCConnect and sync time via NTP now
SET_TIME <epoch>Set wall clock manually (Unix seconds UTC)
SCHED HH:MM [HH:MM ...]Set feeding schedule (UTC, up to 8 entries)
CAL <steps>Run motor N steps without counting as a feed
SAVESave the last CAL step count to flash
FEEDDispense one portion (no limits)
STATUSPrint current device state incl. schedule and Wi-Fi SSID
RESET_DAYZero portionsToday and lastFeedEpoch

Button behaviour

PressAction
Short pressDispense one portion
Double click (gap < 300 ms)Dispense two portions
Long press ≥ 2 sEnter deep sleep immediately without feeding

Power notes

  • The device enters deep sleep between feeds. Wake sources: button or RTC timer.
  • The 5 V motor rail (boost converter) is switched on only during a dose, then cut.
  • Always-on current in deep sleep: ~50–100 µA (ESP32-C3 + LDO quiescent).
  • Expected battery life on 3000 mAh 18650 with 4 feeds/day: several months.

Parts

11
QtyValueFootprintReferences
11000uFCapacitor_THT:CP_Axial_L11.0mm_D8.0mm_P15.00mm_HorizontalC2
1100nFCapacitor_THT:CP_Radial_D4.0mm_P1.50mmC1
118650 3.7VBattery:BatteryClip_Keystone_54_D16-19mmBT1
1220Resistor_SMD:R_0201_0603MetricR1
128BYJ-48Resistor_SMD:R_0201_0603MetricSM1
1AP3602A Boost 5VRF_Converter:Anaren_0805_2012Metric-6U3
1Button (wake)Button_Switch_SMD:Nidec_Copal_CAS-120ASW1
1ESP32-C3 SuperMiniModule:Arduino_NanoU2
1LEDLED_THT:LED_BL-FL7680RGBD1
1TP4056Varistor:RV_Disc_D7mm_W3.4mm_P5mmU1
1ULN2003 Driver ModuleMotors:Vybronics_VZ30C1T8219732LM1

Questions

What parts does the CatFeeder use?

11 parts, built around the TP4056. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the CatFeeder KiCad files?

From the 12romis/CatFeeder repository on GitHub, at the commit this page was made from: the board is schema/KiCad/CatFeeder.kicad_pcb and its schematic schema/KiCad/CatFeeder.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the CatFeeder design in my own project?

Its repository states no licence, so its author keeps all rights: ask 12romis before reusing the design.

Similar boards

  • 2 layers80 × 129.1 mmSmart Plant, the printed circuit board in 3D

    Smart Plant

    JGAguado/Smart_Plant

    The Smart Plant is a board that can be plugged directly on the soil, close to the plant, that allows the measurement of the environment (soil moisture, environment temperature & illuminance), and presents the…

    75 parts303
  • 2 layers129.5 × 50.8 mmLilka, the printed circuit board in 3D

    Lilka

    lilka-dev/lilka

    Схема та документація ігрової консолі Lilka

    39 parts234GPL-2.0
  • 2 layers110 × 115 mmEsp32 keyboard v0.1, the printed circuit board in 3D

    Esp32 keyboard v0.1

    hhuysqt/esp32s3-keyboard

    USB/BLE keyboard driver based on ESP32S3-WROOM-1

    230 parts168GPL-3.0
  • 2 layers192.4 × 50 mmOmote, the printed circuit board in 3D

    Omote

    OMOTE-Community/OMOTE-Hardware

    Open Source Remote - Hardware

    187 parts157GPL-3.0
  • 2 layers316 × 119 mmTeensy Grovebox, the printed circuit board in 3D

    Teensy Grovebox

    jerry20091103/Teensy_Grovebox

    A portable synth and music multi-tool made with Teensy 4.1

    142 parts150MIT
  • 4 layers43 × 49 mmEsppdp, the printed circuit board in 3D

    Esppdp

    Spritetm/esppdp

    ESP32-based PDP11 simulator, based onSimH

    55 parts141
  • 2 layersCharger stepup, the printed circuit board in 3D

    Charger stepup

    Aplyard/Oled-Clicker

    Clicker Counter for Arduino Nano

    19 parts117BSD-3-Clause
  • 6 layers64.8 × 69.9 mmEzDV, the printed circuit board in 3D

    EzDV

    tmiw/ezDV

    A FreeDV device based on the ESP32.

    130 parts114