Skip to the content
4 layers96.4 × 76.1 mmEmbo, the printed circuit board in 3D

[SUTD 30.007] Embolisation agent characterisation and automated mixing system

Size
96.4 × 76.1 mm
Copper layers
4
Thickness
1.6 mm
Parts
132
Nets
96
Pads
440
Tracks, vias
847, 522
Pours
13
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
25 Jun 2026
Updated
16 Aug 2026

Overview

Embo is an open-source printed circuit board by markantosa, from the markantosa/embo repository on GitHub. It is a 4-layer board of 96.4 × 76.1 mm with 132 parts on 96 nets, routed with 847 tracks and 522 vias.

It is built around the ESP32-S3-WROOM-1-N8, LM2596S-5.0 and AMS1117-3.3, with the BAV99, AO4407A and BAT54 among its other parts. Its parts include 14 connectors, 5 ICs, 1 transistor and 1 fuse. It belongs with the ESP32 boards of this library.

Main components

8

README

README.md

EMBO — Embolization Particle Sizing System

SUTD 30.007 Engineering Design Innovation | Team EMBO | Week 13 of 13

EMBO is a closed-loop medical device that automates and quality-controls the preparation of gelatin foam embolic agents for interventional radiology procedures. It is the first device of its kind to measure and control particle size during embolic agent preparation in real time.

EMBO fully assembledEMBO electrical assembly
Fully assembled deviceElectrical assembly

CAD renders

IsometricFrontSheet-metal enclosure
First concept render (Blender)First concept render (Blender)CAD (Fusion 360)

The Problem

Embolization procedures use tiny gelatin foam particles (embolic agents) to deliberately block blood vessels — treating tumours, fibroids, and bleeding. Before every procedure, a clinician manually prepares a particle slurry by pumping two syringes back and forth until the mixture reaches a "pudding consistency." There is no measurement, no standard, and no quality check. Two clinicians doing this side by side produce slurries with completely different particle size distributions. Particle size directly affects clinical outcomes: wrong sizes can cause tissue death in unintended areas or fail to block the target vessel.

No device currently exists to measure or control particle size during this preparation step. Gelfoam has been used since the 1970s with the preparation method unchanged.


What EMBO Does

EMBO replaces manual syringe pumping with a controlled, sensor-guided system that:

  1. Automates mixing — two stepper motors drive syringe plungers back and forth with precise speed, stroke, and cycle control
  2. Measures particle size using two independent sensing modalities:
    • Ultrasound attenuation (UAS) — a 1 MHz acoustic signal chain measures how much sound energy the slurry absorbs; larger particles attenuate more. This is the closed-loop measurement the mixing stop condition actually runs on.
    • Computer vision (verification only) — a Raspberry Pi Zero 2W + OV9281 global-shutter mono camera captures a frame on demand and runs it through a Roboflow-hosted instance-segmentation model, reporting median particle size and IQR plus a segmentation-blob-annotated photo. This is an optional, operator-triggered check, not a continuous control input — see "Sensing System" below for why.
  3. Stops automatically when the target particle size is reached, using a closed-loop control scheduler on the ESP32-S3 driven by the UAS delta-voltage size equation, adjusting stroke-by-stroke based on live sensor feedback. The target is adjustable per procedure (50–1000 µm, set via the touchscreen/encoder), since the ideal size depends on which vessels are being treated.

System Architecture

text
┌─────────────────────────────────────────────────────────────────┐
│                        EMBO Device                              │
│                                                                 │
│  ┌──────────────────┐          ┌──────────────────────────────┐ │
│  │ Raspberry Pi     │◄─UART──►│     ESP32-S3 MCU Board       │ │
│  │ Zero 2W          │          │                              │ │
│  │  - Roboflow      │          │  - Scheduler control loop    │ │
│  │    hosted CV     │          │    (UAS delta-V closed loop) │ │
│  │    (on-demand)   │          │  - 2× TMC2209 motor drivers  │ │
│  │  - Particle size │          │  - UAS signal chain          │ │
│  │    + annotated   │          │  - ILI9341 TFT UI (LovyanGFX)│ │
│  │    photo         │          │  - BLE debug (NimBLE)        │ │
│  │  - OV9281 CSI    │          │                              │ │
│  │    mono camera   │          │                              │ │
│  └──────────────────┘          └──────────────────────────────┘ │
│           │                             │           │            │
│           ▼                             ▼           ▼            │
│    [Camera + LED]              [Stepper motors] [UAS Transducers]│
│    [Backlight panel]           [Limit switches] [SMA connectors] │
└─────────────────────────────────────────────────────────────────┘

Particle Size Model

Mixing follows first-order breakage kinetics:

text
D(N) = D_min + (D₀ − D_min) × e^(−kN)

Where N is stroke count, k is a shear constant (measured empirically), D₀ is initial particle size, and D_min is the minimum achievable size. The mixing scheduler uses live measurements of D(N) (via the UAS delta-V equation) to decide when to stop.


Repository Structure

text
EMBO/
├── README.md
├── .gitignore
│
├── docs/                              # Design documents and briefs
│   ├── EMBO_Project_Overview.md       # Project context — public/general audience
│   ├── EMBO_PCB_Design_Brief_v3_4.txt # Complete electrical design spec (current)
│   ├── EMBO_PCB_Design_Brief_v3_4.docx / .pdf
│   ├── EMBO_PCB_Design_Brief_v2.51.txt# Superseded — kept for reference
│   └── EMBO_Pinout_Cheatsheet.txt     # Quick GPIO and connector reference (being updated for v3.4)
│
├── hardware/
│   ├── electrical/                    # KiCad schematics + PCB layout — 2 boards:
│   │   │                              #   main board (v3.4, current) + display breakout
│   │   └── README.md
│   └── mechanical/                    # CAD files (SolidWorks / Fusion 360)
│                                      #   Final Pure Assembly.f3z is the current top-level assembly
│       └── README.md
│
├── firmware/
│   └── esp32/                         # ESP32-S3 Arduino/C++ firmware (PlatformIO)
│       ├── README.md                  # Flash guide and peripheral notes
│       └── ../FIRMWARE_TODO.md        # Build-up task list + hardware checklist
│

Note: TFT touchscreen UI code lives in firmware/esp32/src/ui.cpp and is tracked in firmware/FIRMWARE_TODO.md — there's no separate software/ui/ folder, since that code only runs on the ESP32, not the Pi.


Hardware Overview

Main MCU Board (ESP32-S3) — v3.4

SubsystemComponents
MicrocontrollerESP32-S3-WROOM-1-N4 (4MB flash, no PSRAM, BLE 5.0, USB-C native programming) — corrected from N8 in v3.3, no pinout impact
Motor drivers2× MKS TMC2209 V2.0 plug-in modules in 2×8 sockets, field-replaceable; MS1/MS2 jumpers (new v3.4) make both modules interchangeable across UART addresses
Ultrasound signal chainAD9833 DDS → OPA2354 Tx (G=4.9, 2.96Vpp) → transducer → OPA2354 Rx (G=100, interstage AC-coupled) → BAT54 envelope → GPIO1 ADC
Turbidity sensingAPDS9960 (I2C 0x39, ALS transmission) + MAX30102 (I2C 0x57, backscatter), shared I2C bus
Force sensing2× load cell + HX711 amplifier, socketed, shared-clock bit-bang driver — hardware fallback for StallGuard SG_RESULT
DisplayILI9341 SPI TFT + XPT2046 resistive touch via 20-pin IDC ribbon to breakout board
Power24V PSU → F1 (off-board T5A fuse) → F2 (on-board 8A backstop, new v3.4) → AO4407A reverse polarity protection → LM2596 buck (5V) → AMS1117 LDO (3.3V)
CommsUART2 to Raspberry Pi (921600 baud, GPIO47/48); BLE UART debug stream (NimBLE)

v3.4 is a hardware-hardening pass: 12× 220Ω GPIO protection resistors on every ESP32-to-TMC2209 control line (added after a hot-swap/spark incident on the fabricated v2.51 board), the PDN_UART pin correction (module pin 5, not pin 4), and a full reference-designator naming pass. See hardware/electrical/README.md for the complete changelog.

v3.4 PCB front renderv3.4 PCB back renderv3.4 PCB trace routing, layers 1 and 4
3D render, front3D render, backKiCad trace routing — L1 + L4 (L2 GND, L3 3V3 hidden for clarity)
v3.4 PCB bring-upv3.4 PCB wired up
Fabricated board — bring-upFabricated board — wired up

GPIO Assignments (key signals)

GPIOSignalNotes
1UAS_ADCADC1_CH0 — envelope detector output
3/43I2C_SDA/SCLShared bus, APDS9960 (0x39) + MAX30102 (0x57), 400kHz
4/44TMC_UART TX/RXHalf-duplex, shared PDN bus, via 1kΩ + 220Ω GPIO protection per module
5/8STEP_M1/M2Hardware timer — step pulse generation, 220Ω GPIO protection
6/9DIR_M1/M2Motor direction, 220Ω GPIO protection
7/10EN_M1/M2Motor enable (active LOW, 10kΩ pull-up at IC), 220Ω GPIO protection
14/15LIMIT_M1/M2Limit switch inputs (internal pull-up)
19/20USB D−/D+Fixed USB PHY — no UART bridge chip needed
21/37/42HX711_2_DT / SCK (shared) / HX711_1_DT2× load cell amplifiers, shared clock
35/36SPI MOSI/CLKShared: AD9833 (Mode 2) + ILI9341 + XPT2046 (Mode 0)
47/48RPi TX/RXUART2 to Raspberry Pi, 921600 baud

Display Breakout Board — 2-layer PCB

ILI9341 TFT + XPT2046 touch controller on a separate board, connected to the main MCU board via a 20-pin IDC ribbon.

Display breakout layoutDisplay breakout 3D view
PCB layout3D render

Sensing System

Ultrasound Attenuation Sensing (UAS):

  • AD9833 generates 1 MHz sine wave → OPA2354 Tx amp (G=4.9, 2.96Vpp output) → J1 SMA → transducer
  • Received signal → J2 SMA → BAV99 protection → OPA2354 two-stage Rx (10× + 10× = 100× total) → BAT54 envelope detector → GPIO1
  • Firmware reads attenuation ratio vs saline baseline to track particle size change

Computer Vision (verification, not closed-loop control):

  • Raspberry Pi Zero 2W + OV9281-110 global-shutter mono CSI camera — no dye/contrast agent added to the slurry (real medical-device material), so contrast comes entirely from dark-field/oblique illumination and software-side local-contrast enhancement
  • Operator-triggered only: the ESP32 sends CAPTURE over UART, the Pi captures + median-stacks frames (noise reduction), runs instance segmentation via a Roboflow-hosted model (RF-DETR, trained on ~100 collected samples), and replies with SIZE <median_um> <iqr_um> plus a downscaled photo with segmentation blob outlines baked in — both rendered on the touchscreen's Camera Verify screen side by side, with an IN SPEC/OUT OF SPEC check
  • Not a fusion input — unlike UAS, a CV result never drives the mixing stop condition; worst case for a failed/slow capture is a timeout notice, not a stalled run. See software/cv_verify/TODO.md for the full reasoning
  • Diffused LED panel (5V, J8) backlit behind syringe for particle contrast

Turbidity Sensing (added v3.2, hardened v3.4):

  • APDS9960 (I2C 0x39) reads ALS clear-channel transmission through the syringe; external LED hardwired on
  • MAX30102 (I2C 0x57) reads backscatter using its own onboard 660/880nm LEDs
  • Shared I2C bus (GPIO3/GPIO43, 400kHz); independent of the UAS acoustic path — a second, optical estimate of slurry turbidity
  • Live readings viewable on the BLE Telemetry Dashboard (firmware/esp32/web/) as Optical Sensor 1/2, alongside every other sensor — see "Getting Started" below
  • Like CV, not yet part of the mixing stop condition — the fusion calibration table (calibration.cpp) is still unfilled placeholder data for every channel, so only UAS drives the closed loop today

Force Sensing (added v3.2):

  • 2× load cell + HX711 24-bit amplifier at the syringe plunger contact point
  • Shared-clock, per-channel data line — custom bit-bang driver (standard HX711 libraries assume one dedicated clock per chip)
  • Hardware fallback for TMC2209 StallGuard SG_RESULT if the UART-based reading proves unreliable

Firmware Status

ModuleFileStatus
TMC2209 UART, SpreadCycle, StallGuardsrc/motors.cpp✅ Done
LEDC step generation, limit switch ISRssrc/motors.cpp✅ Done
Homing routine + stroke countersrc/motors.cpp✅ Done
AD9833 1MHz DDS, UAS ADC calibrationsrc/uas.cpp✅ Done
NimBLE wireless debug UART + binary telemetry servicesrc/ble_debug.cpp, src/ble_binary_telemetry.cpp✅ Done
RPi UART: SIZE reply parsing + on-demand IMG (annotated photo) receivesrc/rpi_uart.cpp✅ Done
Mixing scheduler: adjustable setpoint (50–1000µm), closed-loop UAS delta-V stop conditionsrc/scheduler.cpp✅ Done — replaces the old PID design
TFT UI: encoder-driven menus, live verify screen (photo + PSD/IQR), start/stop-estopsrc/ui.cpp, src/ui/screens/⚠️ Touch input still stub (encoder-only works)
Turbidity sensors (APDS9960 + MAX30102)src/turbidity.cpp✅ Done — feeds the BLE Telemetry Dashboard; not yet a fusion input (calibration table unfilled)

See firmware/FIRMWARE_TODO.md for the full task list and hardware bring-up checklist, and firmware/esp32/README.md for the doctor-facing operational workflow (boot → home → set target → run → stop/e-stop).


Software Stack

LayerPlatformLanguageKey Libraries
Computer vision (on-demand verification)Raspberry Pi Zero 2WPython 3picamera2, Pillow, NumPy, requests (Roboflow hosted inference — see software/cv_verify/detection.py)
Firmware / mixing schedulerESP32-S3C++ (Arduino)TMCStepper, NimBLE, LovyanGFX, AD9833
Touchscreen UIESP32-S3C++LovyanGFX
BLE debug + telemetryESP32-S3C++NimBLE

Critical firmware notes:

  • SPI2 is shared between AD9833 (Mode 2, ~10MHz), ILI9341 (Mode 0, 20MHz max via ribbon), and XPT2046 (Mode 0, 2MHz). Each library switches mode per transaction via SPI.beginTransaction().
  • TMC2209 uses a half-duplex UART bus (GPIO4 TX / GPIO44 RX as of v3.4). Raspberry Pi uses UART2 (GPIO47/48). These are separate peripherals — do not reassign.
  • ADC1 (GPIO1) is safe while BLE is active. ADC2 cannot be used for analog during BLE — no ADC2 pins are used for analog in this design.
  • SpreadCycle must be written via UART to both TMC2209 modules at every boot (no SPREAD pin on the MKS V2.0 modules). BLE log confirms success.
  • HX711 reads are pinned to core 1 and short-critical-sectioned — PD_SCK must never sit HIGH past ~60µs or the chip powers itself down mid-read.

Team Structure

Sub-teamResponsibilitiesMembers
MechanicalFrame, syringe holders, motor mounts, 3D printed enclosure (FDM + SLA resin), DOE (Design of Experiments)Alvin, Victoria, Tian Wen
Electrical & SoftwareKiCad schematics + PCB layout (main board + display breakout), component sourcing, board bring-up/testing, ESP32-S3 firmware (mixing scheduler, motor control, UAS), RPi CV verification pipeline (Roboflow), TFT UIVincent, Ren Jie, Audrey, Aditi

Project Timeline

MilestoneWeekStatus
System Requirements Review5✅ Complete
Recess week — build sprint7✅ Complete
PCB schematic freezeEnd of 7✅ Complete
System Design Review9✅ Complete
Final Exhibition13✅ Current

Getting Started

Firmware (ESP32-S3)

Requires VS Code + PlatformIO extension. See firmware/esp32/README.md for the full flash guide.

bash
# Quick start
cd firmware/esp32
pio run --target upload   # build and flash
pio device monitor        # serial monitor at 115200

Hold BOOT + press RESET for manual bootloader entry if auto-reset fails.

Computer Vision Pipeline (Raspberry Pi Zero 2W)

bash
cd software/cv_verify
python3 -m venv .venv --system-site-packages   # --system-site-packages: sees apt-installed picamera2
source .venv/bin/activate
pip install -r ../requirements.txt
export ROBOFLOW_API_KEY=<your key>             # not stored in any committed file
python3 main.py

See software/cv_verify/SETUP.md for full Pi Zero 2W bring-up (camera/UART dtoverlays, etc.) and software/cv_verify/SESSION_HANDOFF.md for current working state and known issues.

Electrical

PCB files live in hardware/electrical/ — two boards: the main board (embo main MCU PCB v3_4/, current revision) and the display breakout. Open with KiCad 10. The full design spec including component values, GPIO assignments, layout rules, BOM, and the pre-submission checklist is in docs/EMBO_PCB_Design_Brief_v3_4.txt.

Telemetry Dashboard (real firmware)

firmware/esp32/web/index_logging to record UAS csv data.html is a Web Bluetooth dashboard for the actual production firmware (not the bench-test project below) — live UAS envelope, both load cells, and both optical/turbidity sensors (labeled Optical Sensor 1/2), plus motor jog/home controls and the automated UAS frequency sweep. Requires BLE to be enabled on-device first (Settings → Developer mode → UAS debug mode), and must be served over http(s) — Web Bluetooth silently fails under a file:// URL:

bash
cd firmware/esp32/web
python3 -m http.server 8000
# open http://localhost:8000/index_logging%20to%20record%20UAS%20csv%20data.html

PCB Bench-Test Firmware + Dashboard

testing/PCB_Test_Firmware_v3_4/ is a separate, standalone PlatformIO project for bringing up an assembled v3.4 board pre-final-firmware: reads every sensor (UAS envelope, both load cells, both turbidity channels, both StallGuard results, limit switches), drives the two steppers, and streams it all over BLE to its own Web Bluetooth dashboard (web/index.html) with live strip-charts alongside the raw numbers.


Key References

  • Yamagami et al., The Size of Gelatin Sponge Particles, CardioVascular and Interventional Radiology, 2006
  • Yamamoto et al., CVIR 1997 — liver necrosis vs particle size
  • PMC8670118 — hemorrhoidal embolization outcomes
  • TMC2209 Datasheet — StallGuard4, SpreadCycle, UART addressing
  • AD9833 Datasheet — DDS signal generator, SPI Mode 2
  • OPA2354 Datasheet — 250MHz GBW dual op-amp, single-supply operation
  • HX711 Datasheet (Avia Semiconductor) — 24-bit ADC, load-cell amplifier
  • APDS-9960 Datasheet (Broadcom) — ALS/gesture/proximity sensor
  • MAX30102 Datasheet (ADI/Maxim) — pulse oximetry / heart-rate, used here in backscatter mode

SUTD 30.007 Engineering Design Innovation — Team EMBO — 2026

Parts

132
QtyValueFootprintReferences
1910kΩ 0402Resistor_SMD:R_0402_1005Metric_Pad0.72x0.64mm_HandSolderR_BOOT1, R_EN1, R_EN2, R_EN3, R_envRC1, R_gate1, R_LEDpw1, R_M1S1, R_M1S2, R_M2S1, R_M2S2, R_PDN_UP1, RbiasO1_1, RbiasO1_2, RbiasO2_1, RbiasO2_2 +3
17100nF X7RCapacitor_SMD:C_0402_1005Metric_Pad0.74x0.62mm_HandSolderC_adc1, C_BOOT1, C_inBU_C1, CdecAD_C1, CdecES_C1, CdecO1_C1, CdecO2_C1, CdecT1_C1, CdecT2_C1, CinAC_C1, Clim1_C1, Clim2_C1, CouAC_C1, CouAC_C2, CouBU_C1, CouLD_C1 +1
9Conn_01x01Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJdo_TMC1_extra1, Jdo_TMC1_extra2, Jdo_TMC2_extra1, Jdo_TMC2_extra2, JGPIO45, Jup_TMC1_extra1, Jup_TMC1_extra2, Jup_TMC2_extra1, Jup_TMC2_extra2
6Conn_01x03Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJMP_MS1_T1, JMP_MS1_T2, JMP_MS2_T1, JMP_MS2_T2, JMP_PDN_T1, JMP_PDN_T2
410µF X5R 0805Capacitor_SMD:C_0805_2012MetricCdecAD_C8, CdecES_C8, CdecO1_C8, CdecO2_C8
4Conn_01x04Connector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_VerticalJ4, J5, J15_1, J15_2
4Conn_01x08Connector_PinSocket_2.54mm:PinSocket_1x08_P2.54mm_VerticalSK1_T1, SK1_T2, SK2_T1, SK2_T2
4MountingHole_3.2mm_M3MountingHole:MountingHole_3.2mm_M3M3, M3, M3, M3
3100ΩResistor_SMD:R_0402_1005Metric_Pad0.72x0.64mm_HandSolderRgO1_1, RgO2_A1, RgO2_B1
2100µF 35V electrolytic radialCapacitor_SMD:CHEMI-HA0CdecT1_E1, CdecT2_E1
210µF 10V tantalum Case ACapacitor_Tantalum_SMD:CP_EIA-3216-18_Kemet-A_HandSolderCinLD_T1, CouLD_T1
25.1kΩResistor_SMD:R_0402_1005Metric_Pad0.72x0.64mm_HandSolderR_cc1, R_cc2
26×6mm tactileButton_Switch_THT:SW_PUSH_6mmSW_boot1, SW_reset1
2910ΩResistor_SMD:R_0402_1005Metric_Pad0.72x0.64mm_HandSolderRfO2_A1, RfO2_B1
2BAV99Package_TO_SOT_SMD:SOT-23Drx1, Drx2
2Conn_01x02Connector_PinSocket_2.54mm:PinSocket_1x02_P2.54mm_VerticalJ_extra_T1_fem1, J_extra_T2_fem1
2Conn_01x02Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ_extra_T1_mal1, J_extra_T2_mal1
2Conn_01x04Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_VerticalSK4, SK5
2Conn_CoaxialConnector_Coaxial:SMA_Molex_73251-1153_EdgeMount_HorizontalJ1, J2
2OPA2354Package_SO:SOIC-8_3.9x4.9mm_P1.27mmIC1, IC2
1100 µF 50 V radialCapacitor_THT:C_Radial_D8.0mm_H11.5mm_P3.50mmC_inBU_E1
1100µHInductor_SMD:L_Bourns_SRR1260Lbuck1
1100Ω 0402Resistor_SMD:R_0402_1005Metric_Pad0.72x0.64mm_HandSolderR_in1
110nF X7RCapacitor_SMD:C_0402_1005MetricC_envRC1
11N5819Diode_SMD:D_SOD-123Dusb1
11kΩ 0402Resistor_SMD:R_0402_1005Metric_Pad0.72x0.64mm_HandSolderR_UART1
11nF X7RCapacitor_SMD:C_0402_1005Metric_Pad0.74x0.62mm_HandSolderCsnub1
11µF X7RCapacitor_SMD:C_0402_1005Metric_Pad0.74x0.62mm_HandSolderC_EN1
1220µF 10V low-ESR electrolytic radialCapacitor_THT:C_Radial_D8.0mm_H11.5mm_P3.50mmCouBU_E1
124 V PSU inputTerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_HorizontalJ14
13.3V outConnector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJ16
1330ΩResistor_SMD:R_0402_1005Metric_Pad0.72x0.64mm_HandSolderR_statLED1
1390ΩResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalRfO1_1
14.7kΩResistor_SMD:R_0402_1005Metric_Pad0.72x0.64mm_HandSolderRbleed1
147ΩResistor_SMD:R_0402_1005Metric_Pad0.72x0.64mm_HandSolderR_TL1
15A littlefuseFuse:Fuse_2512_6332MetricF2
15V outConnector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJ8
1AMS1117-3.3Package_TO_SOT_SMD:SOT-223-3_TabPin2U3
1AO4407APackage_SO:SOIC-8_3.9x4.9mm_P1.27mmQ1
1BAT54Diode_SMD:D_SOD-123Denv1
1BZX84C15, 15 V Zener, SOT-23Package_TO_SOT_SMD:SOT-23Dprot1
1Conn_01x03Connector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_VerticalJ3
1Conn_01x07Connector_PinSocket_2.54mm:PinSocket_1x07_P2.54mm_VerticalJ_AD9833
1Conn_02x10_Odd_EvenConnector_IDC:IDC-Header_2x10_P2.54mm_VerticalJ9
1ESP32-S3-WROOM-1RF_Module:ESP32-S3-WROOM-1U1
1LED_pwrLED_SMD:LED_0805_2012MetricLED_pwr1
1LM2596S-5Package_TO_SOT_SMD:TO-263-5_TabPin3U2
1LOGOEMBO_Custom_Footprints:EMBO LOGOG***
1LOGOEMBO_Custom_Footprints:PROFS2G***
1LOGOEMBO_Custom_Footprints:EMBO7G***
1SMBJ28ADiode_SMD:D_SMADclamp1
1SS34ADiode_SMD:D_SMADcatch1
1USB_C_Receptacle_USB2.0_16PConnector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12J13
1green LEDLED_SMD:LED_0805_2012MetricLED_stat1
1motor 1Connector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJ6
1motor 2Connector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJ7

The 128 most common of 132 parts.

More from markantosa/embo

9
  • 4 layers96.4 × 48.3 mmEmbo, the printed circuit board in 3D

    Embo

    markantosa/embo

    [SUTD 30.007] Embolisation agent characterisation and automated mixing system

    98 parts
  • 2 layers52 × 62.5 mmDisplay breakout small, the printed circuit board in 3D

    Display breakout small

    markantosa/embo

    [SUTD 30.007] Embolisation agent characterisation and automated mixing system

    22 parts
  • 2 layers126 × 62.5 mmDisplay breakout, the printed circuit board in 3D

    Display breakout

    markantosa/embo

    [SUTD 30.007] Embolisation agent characterisation and automated mixing system

    22 parts
  • 2 layers16.7 × 21.1 mmRg PCB, the printed circuit board in 3D

    Rg PCB

    markantosa/embo

    [SUTD 30.007] Embolisation agent characterisation and automated mixing system

    10 parts
  • 2 layers36.8 × 17.8 mmMAX30102, the printed circuit board in 3D

    MAX30102

    markantosa/embo

    [SUTD 30.007] Embolisation agent characterisation and automated mixing system

    5 parts
  • 2 layers30.2 × 17.8 mmAPDS9960, the printed circuit board in 3D

    APDS9960

    markantosa/embo

    [SUTD 30.007] Embolisation agent characterisation and automated mixing system

    4 parts
  • 2 layers15.9 × 17.1 mmLED PCB, the printed circuit board in 3D

    LED PCB

    markantosa/embo

    [SUTD 30.007] Embolisation agent characterisation and automated mixing system

    4 parts
  • 2 layers29.2 × 15.6 mmLimit switch board, the printed circuit board in 3D

    Limit switch board

    markantosa/embo

    [SUTD 30.007] Embolisation agent characterisation and automated mixing system

    4 parts
  • 2 layers27 × 13.5 mmPiezo RX connector, the printed circuit board in 3D

    Piezo RX connector

    markantosa/embo

    [SUTD 30.007] Embolisation agent characterisation and automated mixing system

    2 parts

Similar boards

  • 2 layers100 × 68 mmSI4684 SMD, the printed circuit board in 3D

    SI4684 SMD

    PE5PVB/SI4684-DAB-Receiver

    SI4684 ESP32 DAB Receiver

    91 parts135GPL-3.0
  • 4 layers120 × 80 mmBrain, the printed circuit board in 3D

    Brain

    etiennechlt/electronic-chess

    Générée par tools/boardgen (module power). 100 x 60 mm, 2 couches, plan de masse en face arrière. Elle gère trois cellules plates 1S 5 Ah.

    113 parts
  • 4 layers102.4 × 83.1 mmPLC4UNI, the printed circuit board in 3D

    PLC4UNI

    0sirys/Juan_Pimentel_Electiva_2026_C2

    209 partsMIT
  • 4 layers90.5 × 67 mmAS 4, the printed circuit board in 3D

    AS 4

    beaked99/air-scales

    2025-11-20. Updated all the footprints and symbols to their proper layouts. no more fkn errors. Hallefuckinglujah. Fucked up with LM74610 not using the right footprint. minor fix. 2025-11-16.

    131 parts
  • 2 layers102.1 × 82.7 mmPLC Electiva, the printed circuit board in 3D

    PLC Electiva

    JosueHerrera05/Josue_Herrera_Electiva_2026_C2

    Repositorio Electíva Diseño Mecatrónico 2026-C2

    198 partsMIT
  • 4 layers102.4 × 83.1 mmPLC4UNI GC1, the printed circuit board in 3D

    PLC4UNI GC1

    paulmartinezcuenta/PLC4UNI

    Development of programmable logic controller, product for mechatronic design.

    179 partsMIT
  • 2 layers74.1 × 51.3 mmESP32, the printed circuit board in 3D

    ESP32

    ashton6student/ece445

    Note: each subfolder has its own README.md file that forms the ECE 445 notebook, in addition to this top-level file.

    45 parts

Questions

How big is the Embo PCB?

It measures 96.4 × 76.1 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Embo use?

132 parts, built around the ESP32-S3-WROOM-1-N8, LM2596S-5.0, AMS1117-3.3 and BAV99. 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 Embo KiCad files?

From the markantosa/embo repository on GitHub, at the commit this page was made from: the board is hardware/electrical/embo main MCU PCB v3_4/embo.kicad_pcb and its schematic hardware/electrical/APDS9960 PCB/APDS9960/APDS9960.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Embo design in my own project?

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