

Main controller
Compile recipes, then execute cocktails at rumtime.
- Size
- 76.7 × 51.1 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 28
- Nets
- 54
- Pads
- 144
- Tracks, vias
- 156, 0
- Pours
- 1
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 18 Jun 2026
- Updated
- 7 Nov 2026
Overview
Main controller is an open-source printed circuit board by cjlawson02, from the cjlawson02/Rumtime repository on GitHub, published under the MIT licence. It is a 2-layer board of 76.7 × 51.1 mm with 28 parts on 54 nets, routed with 156 tracks and 0 vias.
It is built around the SS14. Its parts include 13 connectors, 7 resistors, 3 diodes and 1 switch.
Main components
1README
README.mdRumtime
Rumtime is a modular cocktail execution engine: ingredients are registered as services, recipes are resolved at runtime, and beverages are dispensed through a scalable ESP32-powered pump architecture.
This repo holds Rumtime documentation, Phase 0 bench-rig firmware, and KiCad PCB specifications. CAD and full product firmware are still in progress. The v1 hardware design uses food-safe tubing, Kamoer KPHM100-class reversible peristaltic pumps, modular 4-pump cartridges, and an ESP32-S3 controller. Software stack direction (Cloudflare kiosk UI, ESP32 dispense engine) and locked firmware runtime model (ControlTask + command queue on FreeRTOS) are in docs/16-firmware-and-software-architecture.md. Kiosk UX and React + shadcn stack in docs/17-kiosk-ui-plan.md; production app at ui/kiosk/. Provisional device HTTP contract in docs/18-kiosk-device-api.md.
Current design snapshot
- Version 1 pump count: 8 installed pumps.
- Expansion target: 12 total pumps via one additional 4-pump module.
- Control platform: ESP32-S3 or similar ESP32 board, Wi-Fi only.
- Pump strategy: One reversible peristaltic pump per ingredient.
- Measurement strategy: Timed dispensing after calibration; load cell required for glass/ice detection, flow-gated pour start, and sanity checks.
- Carbonation: Do not pump carbonated mixers in v1. Software should instruct the user to top off manually.
- Cleaning: Moderate-effort cleaning with warm-water flush and Star San/session sanitizer workflow.
- Budget target: About $500 max for v1, excluding liquor and ingredients.
- Build style: Finished-looking countertop dispenser, with external bottles and replaceable tubing.
Document map
| File | Purpose |
|---|---|
AGENTS.md | Coding-agent and contributor behavior rules based on the requested Karpathy-style guidelines. |
docs/00-project-brief.md | Scope, goals, assumptions, and non-goals. |
docs/01-decisions.md | All captured design decisions from the planning conversation. |
docs/02-system-architecture.md | Hardware architecture and module layout. |
docs/03-parts-list-bom.md | Initial parts list with budget notes and sourcing guidance. |
docs/04-plumbing-and-fluid-path.md | Tubing, fittings, bottles, nozzles, and ingredient compatibility. |
docs/05-electronics-and-pcb.md | Electrical design and 4-pump PCB guidance. |
docs/06-flow-calibration-and-inventory.md | Timed flow calibration, flow-gated dispense, load cell, and inventory tracking. |
docs/07-cleaning-and-food-safety.md | Cleaning workflow, sanitizer handling, and maintenance assumptions. |
docs/08-mechanical-design.md | Enclosure, pump cartridges, drip tray, nozzle cluster, and fridge notes. |
docs/09-build-plan-and-verification.md | Staged build plan with success criteria and test checks. |
docs/10-open-questions-and-v2.md | Deferred decisions, v2 ideas, and risks. |
docs/11-sourcing-notes.md | Sourcing notes and search terms for pumps, tubing, fittings, electronics, and enclosure parts. |
docs/12-phase-0-decisions.md | Research-backed Phase 0 part decisions (pump, PSU, KiCad). |
docs/13-phase-0-mini-bom.md | Phase 0 shopping list (~2-pump bench rig). |
docs/14-bench-test-protocol.md | Bench tests, pass criteria, and session log template. |
docs/15-project-timeline.md | Gantt chart, milestones, and procurement log (order/receive dates). |
docs/16-firmware-and-software-architecture.md | Software stack decisions, firmware layers, sequence runner, NVS ownership, migration from bench rig. |
docs/17-kiosk-ui-plan.md | Locked kiosk UX, connectivity, and guest/setup flows. |
ui/kiosk/ | Production kiosk PWA — see ui/kiosk/README.md. |
firmware/bench-rig/ | ESP32-S3 + TB6612 bring-up firmware (PlatformIO). |
firmware/controller/ | ESP32-S3 product firmware scaffold (ControlTask runtime; pump subsystem implemented). |
hardware/kicad/ | KiCad 4-pump module project, schematic spec, and kicad-cli scripts. |
hardware/cad/ | build123d parametric CAD (src/), dimension refs (refs/), export scripts; Onshape for assembly review only. |
Design philosophy
Build the simplest version of Rumtime that can make repeatable drinks, clean up reasonably, and expand without rewiring everything. Avoid premature complexity such as inline flow meters, shared manifolds, fridge drilling, carbonated pumping, or fully custom embedded module networks until the basic 8-pump machine has been validated.
Current status
Next action: Fit-check/measure the assembled load-cell cantilever, then solder the bar to HX711 (E+/E−/A+/A−) and run Tests 7–9. Parallel: finish 4-pump PCB layout (silkscreen/placement). Schematic v1 is ERC-clean. Bar 75 mm, holes 5 / 15 / 59 / 69, M4 tapped — hardware/cad/refs/estardyn-load-cell.md. HX711↔MCU already wired (GPIO 8/9). Sessions: 06 (measure + print) · 07 (assembled, not measured).
Done so far: 8× correct 12 V HB pumps are on hand and the 2 wrong 24 V units were returned. P1 + P2 are bench-validated @ 1.75 ml/s; dual-pump ~0.4 A; anti-drip 100 ms; P2 sequential 50 ml target → ~45 ml (anti-drip); host CLI benchctl.py + proto=2 serial parser. The other 6 pumps still need incoming inspection and variance testing.
Decisions are locked in docs/12-phase-0-decisions.md (KPHM100-HBB10 pump, TB6612 breakout, ESP32-S3-DevKitC-1, KiCad for Phase 2 PCB).
First prototype goal
Validate the core liquid path with 2–4 pumps. Module schematic v1 is done (ERC clean). Layout/silkscreen in progress. Fab waits on DRC (I2C bring-up is Test 10 on the first board).
- Dispense 15 ml, 30 ml, and 60 ml targets by time after calibration.
- Validate flow-gated dispense vs timed-only on de-primed and post–anti-drip lines (Test 9) — v1 pour default, not a PCB gate.
- Reverse briefly after pours to reduce drips; document sequential pour drift (Test 4b).
- Flush simple syrup and grenadine adequately with warm water.
- Confirm tubing and nozzles do not retain obvious flavor or clog during a normal session.
- Confirm load cell detects glass, ice tare, flow onset, and no-flow conditions (Tests 7–9) — v1 pour, not a PCB gate.
- I2C pump control is proven on the first assembled module (Test 10), not a pre-fab MCP23017 breakout.
After DRC, fabricate the 4-pump module (hardware/kicad/) and proceed to the finished enclosure.
Parts
28| Qty | Value | Footprint | References |
|---|---|---|---|
| 4 | 10k | Resistor_SMD:R_0805_2012Metric | R1, R4, R5, R6 |
| 2 | 2.2k | Resistor_SMD:R_0805_2012Metric | R2, R3 |
| 2 | MountingHole | MountingHole:MountingHole_3.2mm_M3 | H1, H2 |
| 2 | MountingHole_Pad | MountingHole:MountingHole_3.2mm_M3_Pad | H3, H4 |
| 1 | 12V FUSED | TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal | J1 |
| 1 | 330 | Resistor_SMD:R_0805_2012Metric | R7 |
| 1 | BUCK_ESP Mini560 5V | Rumtime:Mini560 | J3 |
| 1 | BUCK_USB Mini560 5V | Rumtime:Mini560 | J4 |
| 1 | BUS1 | Connector_Molex:Molex_Micro-Fit_3.0_43045-0612_2x03_P3.00mm_Vertical | J7 |
| 1 | BUS2 | Connector_Molex:Molex_Micro-Fit_3.0_43045-0612_2x03_P3.00mm_Vertical | J8 |
| 1 | BUS3 | Connector_Molex:Molex_Micro-Fit_3.0_43045-0612_2x03_P3.00mm_Vertical | J13 |
| 1 | BUS4 | Connector_Molex:Molex_Micro-Fit_3.0_43045-0612_2x03_P3.00mm_Vertical | J14 |
| 1 | CELL XH | Connector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_Vertical | J10 |
| 1 | DevKit J1 left | Connector_PinSocket_2.54mm:PinSocket_1x22_P2.54mm_Vertical | J5 |
| 1 | DevKit J3 right | Connector_PinSocket_2.54mm:PinSocket_1x22_P2.54mm_Vertical | J6 |
| 1 | HX711 analog | Connector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_Vertical | J9 |
| 1 | HX711 digital | Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical | J12 |
| 1 | KINDLE CHARGE | Connector_USB:USB_C_Receptacle_GCT_USB4125-xx-x-0190_6P_TopMnt_Horizontal | J11 |
| 1 | MAIN 10A DC | TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal | SW1 |
| 1 | PWR | LED_THT:LED_D3.0mm | D2 |
| 1 | SS14 | Diode_SMD:D_SMA | D1 |
| 1 | STATUS | LED_THT:LED_D3.0mm | D3 |
Questions
How big is the Main controller PCB?
It measures 76.7 × 51.1 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Main controller use?
28 parts, built around the SS14. 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 Main controller KiCad files?
From the cjlawson02/Rumtime repository on GitHub, at the commit this page was made from: the board is hardware/kicad/main-controller/main-controller.kicad_pcb and its schematic hardware/kicad/4-pump-module/4-pump-module.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Main controller design in my own project?
Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).
More from cjlawson02/Rumtime
1- 2 layers84.7 × 20.9 mm

Similar boards
- 2 layers80 × 129.1 mm

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 layers128 × 88 mm

Fireball revD
ugcs/ddc
Drone Show Software is software designed for drone shows, allowing flight path planning as well as control of dozens of drones simultaneously in a synchronized manner.
64 parts223 - 4 layers113.5 × 105.5 mm

Multistepper
eddyem/stm32samples
Code samples and ready projects based on bare-metal STM32
243 parts208 - 2 layers66.8 × 34 mm

- 2 layers40 × 53.6 mm

- 2 layers99.1 × 76.2 mm

Pico dev
execuc/u2if
USB to interfaces implementing MicroPython "machine" module functionalities on a computer.
36 parts182 - 2 layers40 × 100 mm

Back pcb
ZeroPhone/ZeroPhone-PCBs
PCB files for ZeroPhone - for gerbers and schematics, go to "Releases" tab!
118 parts148GPL-3.0 - 2 layers100 × 85 mm
