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

For Sp26 ECE445 Project - Griffin, Jackson, Tony

Copper layers
2
Thickness
1.6 mm
Parts
12
Nets
11
Pads
47
Tracks, vias
81, 3
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
24 Feb 2026
Updated
8 May 2026

Overview

IR Sensor is an open-source printed circuit board by RiceMiceA, from the RiceMiceA/ECE_445 repository on GitHub. It is a 2-layer board with 12 parts on 11 nets, routed with 81 tracks and 3 vias.

Its parts include 5 connectors, 4 resistors, 2 capacitors and 1 IC. It belongs with the sensors and measurement boards of this library.

README

README.md

NuChefTM - AI Culinary Assistant

Table of Contents

  1. Final Product
  2. How to use our repo?
  3. Third-Party Libraries & Licenses

1. Final Product

Photos

alt text alt text

YouTube Demo

NuChef Demo

2. How to use our repo?

2.1 Init

Freshly Clone 1st time
bash
git clone --recurse-submodules <repo-url>

This does everything:

  • clones the parent repo
  • initializes submodules
  • checks out the correct commits
Already cloned repo
bash
git submodule update --init --recursive

2.2 Managing the submodule Unity folder

2.2.1 Before Work/Update
In parent folder
bash
git pull
git submodule update --init --recursive
2.2.2 Post-work
bash
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 main

Verify Health

bash
git submodule status

Tip

bash
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 --remote

3. Network Configuration

Kill previous run

bash
kill $(lsof -t -i:8000) 

Update IP Address before operation

bash
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:

bash
# 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.py

4. Troubleshooting

Upload new ESP32 file

bash
~/.platformio/penv/bin/pio run 2>&1 | tail -20

ESP32 BLE not broadcasting / bridge can't find device

  1. Press the physical RESET button on the ESP32-S3 board. It will re-advertise as NuChef-Dispenser within a few seconds.
  2. If the bridge still can't find it, kill and restart ble_bridge.py. Linux's BlueZ stack sometimes caches stale BLE data.
  3. 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:

bash
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*

bash
sudo usermod -aG dialout $USER
# then log out & back in (or reboot) for the group to take effect

Bridge connects but dispense doesn't trigger from the UI

  • Make sure the backend (uvicorn) and ble_bridge.py are both running.
  • Verify BACKEND_URL in script.js is window.location.origin (not a hardcoded IP).
  • Check the bridge terminal for BLE CMD → and write OK logs when you click Dispense.

Quick sanity check (motor spin from CLI)

bash
# 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)

Meta Quest, "Unity-UtilityPackages," GitHub. [Online]. Available: https://github.com/meta-quest/Unity-UtilityPackages. [Accessed: May 7, 2026].

MIT License attribution:

text
Unity Utility Packages
Copyright (c) Meta Platforms, Inc. and affiliates.
Licensed under the MIT License.
https://github.com/meta-quest/Unity-UtilityPackages

Parts

12
QtyValueFootprintReferences
44.7kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR1, R2, R3, R4
2Conn_01x05_PinTerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-5_1x05_P5.00mm_HorizontalJ3, J4
1100nFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC1
14.7uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC2
1Conn_01x02_PinTerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2_1x02_P5.00mm_HorizontalJ5
1Conn_01x03_PinTerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-3_1x03_P5.00mm_HorizontalJ2
1Conn_01x07_PinTerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-7_1x07_P5.00mm_HorizontalJ1
1VL53L0CXV0DH1Sensor_Distance:ST_VL53L1xU1

Questions

What parts does the IR Sensor use?

12 parts. 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 IR Sensor KiCad files?

From the RiceMiceA/ECE_445 repository on GitHub, at the commit this page was made from: the board is Hardware/IR_Sensor/IR_Sensor.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 IR Sensor design in my own project?

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

More from RiceMiceA/ECE_445

1
  • 2 layers100 × 100 mmFood Dispenser Control, the printed circuit board in 3D

    Food Dispenser Control

    RiceMiceA/ECE_445

    For Sp26 ECE445 Project - Griffin, Jackson, Tony

    63 parts

Similar boards

  • 2 layersNrf bga, the printed circuit board in 3D

    Nrf bga

    github-linguist/linguist

    Language Savant. If your repository's language is being reported incorrectly, send us a pull request!

    12 parts14kMIT
  • 2 layers66.9 × 74.5 mmDeskHop, the printed circuit board in 3D

    DeskHop

    hrvach/deskhop

    Fast Desktop Switching Device

    12 parts7.9kGPL-3.0
  • 2 layers40 × 15 mmSensors, the printed circuit board in 3D

    Sensors

    google/mozc-devices

    Circuit diagrams and firmware source code for Gboard DIY keyboards

    12 parts3kApache-2.0
  • 2 layers42.7 × 56.5 mmTle6240 driver, the printed circuit board in 3D

    Tle6240 driver

    rusefi/rusefi

    rusefi - GPL internal combustion engine control unit

    12 parts1.2k
  • 2 layers49 × 25 mm5v boost regulator, the printed circuit board in 3D

    5v boost regulator

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    12 parts915
  • 2 layers28.3 × 10.3 mmTap Photosensor PCB, the printed circuit board in 3D

    Tap Photosensor PCB

    VoronDesign/Voron-Tap

    Tap is a nozzle-based z-probe for the V2 and Trident printer designs. The entire toolhead moves to trigger an optical switch. Tap offers many advantages:

    12 parts716GPL-3.0
  • 2 layers25.4 × 70.4 mmTpmsniffer, the printed circuit board in 3D

    Tpmsniffer

    stacksmashing/pico-tpmsniffer

    A simple, very experimental TPM sniffer for LPC bus

    12 parts696