

Food Dispenser Control
For Sp26 ECE445 Project - Griffin, Jackson, Tony
- Size
- 100 × 100 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 63
- Nets
- 86
- Pads
- 275
- Tracks, vias
- 432, 169
- Pours
- 2
- Routed
- Yes
- KiCad
- KiCad 9.0 (file 20241229)
- Created
- 24 Feb 2026
- Updated
- 8 May 2026
Overview
Food Dispenser Control is an open-source printed circuit board by RiceMiceA, from the RiceMiceA/ECE_445 repository on GitHub. It is a 2-layer board of 100 × 100 mm with 63 parts on 86 nets, routed with 432 tracks and 169 vias.
It is built around the ESP32-S3-WROOM-1-N8, DRV8833PW and HX711, with the AP2112K-3.3 among its other parts. Its parts include 21 capacitors, 19 resistors, 10 connectors, 7 ICs and 4 switches. It belongs with the ESP32 boards of this library.
Main components
4ESP32-S3-WROOM-1-N8
SMD,25.5x18mm-40℃~+85℃ -98.2dBm 2.4GHz 20.5dBm 355mA 3V~3.6V 95mA Bluetooth5.0 ESP32-S3 Chip On-board PCB Antenna UART、SPI、I2C、I2S、USB SMD,25.5x18mm WiFi Modules ROHSEspressif SystemsWiFi ModulesDRV8833PW
TSSOP-16-40℃~+85℃ 2 2.7V~10.8V 360mΩ 500mA Bipolar Driver Yes TSSOP-16 Stepper Motor Driver ROHSTexas InstrumentsStepper Motor DriverHX711
SOP-16-40℃~+85℃ 1.4mA 10Hz、80Hz 1MHz~20MHz、11.0592MHz 2 2.6V~5.5V 20mV、40mV、80mV 24 Built-in External、Built-in SPI Support Yes SOP-16 Analog to Digital Converters (ADC) ROHSAvia SemiconAnalog To Digital Converters (ADC)AP2112K-3.3
SOT253.3V 600mA CMOS Low Dropout Linear Regulator with EnableDiodes IncorporatedUncategorised
README
README.mdNuChefTM - AI Culinary Assistant
Table of Contents
1. Final Product
Photos

YouTube Demo
2. How to use our repo?
2.1 Init
Freshly Clone 1st time
git clone --recurse-submodules <repo-url>This does everything:
- clones the parent repo
- initializes submodules
- checks out the correct commits
Already cloned repo
git submodule update --init --recursive2.2 Managing the submodule Unity folder
2.2.1 Before Work/Update
In parent folder
git pull
git submodule update --init --recursive2.2.2 Post-work
cd path/to/submodule
git checkout main
git pull origin main
git add .
git commit -m "Update submodule"
git push origin main
cd /path/to/parent-repo
git add Software/src/Unity-PassthroughCameraApiSamples
git commit -m "Bump submodule"
git push origin mainVerify Health
git submodule statusTip
git config --global submodule.recurse true
# if we wanna track the specific branch
git submodule set-branch --branch tony Software/src/Unity-PassthroughCameraApiSamples
git submodule update --remote3. Network Configuration
Kill previous run
kill $(lsof -t -i:8000) Update IP Address before operation
Check the current ip address: When switching networks, update the backend IP (192.168.x.x) in these files:
Note: The ESP32 now communicates via BLE (not WiFi), so it no longer needs an IP address or network config.
Then start the backend and BLE bridge:
# Terminal 1 — backend
cd Software/src/web_app
source .env # loads OPENAI_API_KEY, OPENAI_MODEL, USE_LLM_PLANNER from .env file
uvicorn backend:app --host 0.0.0.0 --port 8000 --reload
# Terminal 2 — BLE bridge (connects to ESP32 over Bluetooth, forwards to backend)
pip install bleak httpx # first time only
python ble_bridge.py4. Troubleshooting
Upload new ESP32 file
~/.platformio/penv/bin/pio run 2>&1 | tail -20ESP32 BLE not broadcasting / bridge can't find device
- Press the physical RESET button on the ESP32-S3 board. It will re-advertise as
NuChef-Dispenserwithin a few seconds. - If the bridge still can't find it, kill and restart
ble_bridge.py. Linux's BlueZ stack sometimes caches stale BLE data. - As a last resort, power-cycle the ESP32 (unplug & replug USB).
Serial port changed (/dev/ttyACM0 ↔ /dev/ttyACM1)
After a reset or replug the port may shift. Check with:
ls /dev/ttyACM*Then update upload_port and monitor_port in Software/src/esp_driver/platformio.ini if you need to re-flash.
Permission denied on /dev/ttyACM*
sudo usermod -aG dialout $USER
# then log out & back in (or reboot) for the group to take effectBridge connects but dispense doesn't trigger from the UI
- Make sure the backend (
uvicorn) andble_bridge.pyare both running. - Verify
BACKEND_URLinscript.jsiswindow.location.origin(not a hardcoded IP). - Check the bridge terminal for
BLE CMD →andwrite OKlogs when you click Dispense.
Quick sanity check (motor spin from CLI)
# Direct BLE test — bypasses the backend entirely
python3 -c "
import asyncio
from bleak import BleakClient, BleakScanner
SVC = '4e7a9b1c-d203-4e2a-b8f1-67c1d9e3f5a0'
CMD = '4e7a9b1c-d203-4e2a-b8f1-67c1d9e3f5a1'
async def test():
dev = await BleakScanner.find_device_by_name('NuChef-Dispenser', timeout=10)
async with BleakClient(dev) as c:
await c.write_gatt_char(CMD, b'spin', response=True)
await asyncio.sleep(5)
await c.write_gatt_char(CMD, b'stop', response=True)
asyncio.run(test())
"5. Third-Party Libraries & Licenses
Unity Utility Packages (MIT)
- Repository: https://github.com/meta-quest/Unity-UtilityPackages
- Author: Meta Platforms, Inc. and affiliates
- License: MIT License
Meta Quest, "Unity-UtilityPackages," GitHub. [Online]. Available: https://github.com/meta-quest/Unity-UtilityPackages. [Accessed: May 7, 2026].
MIT License attribution:
Unity Utility Packages
Copyright (c) Meta Platforms, Inc. and affiliates.
Licensed under the MIT License.
https://github.com/meta-quest/Unity-UtilityPackagesParts
63| Qty | Value | Footprint | References |
|---|---|---|---|
| 9 | 0.1uF | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C8, C11, C13, C16, C18, C19, C21, C23, C25 |
| 6 | 10KOhms | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R15, R22, R25, R26, R29, R30 |
| 6 | 10uF | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C3, C12, C17, C20, C24, C26 |
| 3 | 2.2uF | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C10, C15, C22 |
| 3 | 200Ohms | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R14, R21, R24 |
| 3 | 22Ohms | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R1, R27, R28 |
| 3 | DRV8833PW | Package_SO:TSSOP-16_4.4x5mm_P0.65mm | U5, U6, U8 |
| 3 | Motor Output | TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-4_1x04_P5.00mm_Horizontal | J1, J8, J9 |
| 3 | SW_Push | Button_Switch_THT:SW_PUSH_6mm_H5mm | SW1, SW2, SW6 |
| 2 | 100KOhms | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R6, R10 |
| 2 | 1uF | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C1, C5 |
| 2 | 5.1kohms | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R19, R20 |
| 2 | Conn_01x01 | TestPoint:TestPoint_Pad_D1.5mm | J5, J6 |
| 2 | LED | LED_SMD:LED_0805_2012Metric_Pad1.15x1.40mm_HandSolder | D1, D3 |
| 1 | 0.1Ohms | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R23 |
| 1 | 4.7uF | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C14 |
| 1 | 68ohms | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R2 |
| 1 | 800Ohms | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R3 |
| 1 | AP2112K-3.3 | Package_TO_SOT_SMD:SOT-23-5 | U2 |
| 1 | Conn_01x02_Pin | TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2_1x02_P5.00mm_Horizontal | J3 |
| 1 | Conn_01x03_Pin | TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-3_1x03_P5.00mm_Horizontal | J10 |
| 1 | Conn_01x04_Pin | TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-4_1x04_P5.00mm_Horizontal | J7 |
| 1 | Conn_01x07_Pin | TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-7_1x07_P5.00mm_Horizontal | J4 |
| 1 | ESP32-S3-WROOM-1 | PCM_Espressif:ESP32-S3-WROOM-1 | U9 |
| 1 | HX711 | Package_SO:SOP-16_3.9x9.9mm_P1.27mm | U7 |
| 1 | MCP73831-2-OT | Package_TO_SOT_SMD:SOT-23-5 | U1 |
| 1 | SW_SPST | Button_Switch_THT:SW_DIP_SPSTx01_Slide_6.7x4.1mm_W7.62mm_P2.54mm_LowProfile | SW3 |
| 1 | USB_C_Receptacle_USB2.0_16P | Connector_USB:USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_Horizontal | J2 |
More from RiceMiceA/ECE_445
1- 2 layers

Similar boards
- 2 layers

- 2 layers133.1 × 90 mm

- 4 layers55 × 35 mm

CAPE B-1
Stab-Rabbit-coding/Serenity-UAV
A functional, security conscious, Unmanned Aerial Vehicle based on the Firefly Class spacecraft Serenity from the 2002 show..
33 parts1CERN-OHL-W-2.0 - 4 layers102 × 100 mm

Zelvicka
RoboticsBrno/Robutek
Robůtek je robotická platforma založená na čipu ESP32-S3. Je velice rozšitiřelný, ale ze základu umí jezdit, kreslit fixou, jezdit po čáře, pohybovat se bludištěm. Programování je přes Jaculus.
214 parts12 - 2 layers60 × 50 mm

Rove sv
crzhacko/rove-esp32s3
ROVE — ESP32-S3 voice-controlled RC car platform (monorepo: firmware + electronics)
27 parts - 4 layers100 × 74 mm

Mission board
tmb5932/fixed-wing-drone
The basics needed to allow a RC plane to be turned autonomous on signal.
128 parts - 2 layers30 × 50 mm

MINI. ESP S3
electromotif208/pcb-portfolio
👨💻 Electronics Engineer 📺 YouTube: ELECTROMOTIF 🔧 Tools: KiCad, EasyEDA 📡 Domains: Power Supply, ESP32, IoT, Embedded Hardware
13 parts - 2 layers70 × 50 mm

AT01 no ftdi
hshahzada/automated-tourniquet
2023/2024 Capstone Design Project for Biomedical Engineering
50 parts
Questions
How big is the Food Dispenser Control PCB?
It measures 100 × 100 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Food Dispenser Control use?
63 parts, built around the ESP32-S3-WROOM-1-N8, DRV8833PW, HX711 and AP2112K-3.3. 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 Food Dispenser Control KiCad files?
From the RiceMiceA/ECE_445 repository on GitHub, at the commit this page was made from: the board is Hardware/Food_Dispenser_Control/Food_Dispenser_Control.kicad_pcb and its schematic Hardware/Food_Dispenser_Control/Food_Dispenser_Control.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Food Dispenser Control design in my own project?
Its repository states no licence, so its author keeps all rights: ask RiceMiceA before reusing the design.
