

MaD Edge
Tensile testing machine
- Size
- 144.1 × 93.3 mm
- Copper layers
- 4
- Thickness
- 4.69 mm
- Parts
- 289
- Nets
- 246
- Pads
- 785
- Tracks, vias
- 1,731, 423
- Pours
- 51
- Routed
- Yes
- KiCad
- KiCad 9.0 (file 20241229)
- Created
- 2 Apr 2021
- Updated
- 7 Nov 2026
Overview
MaD Edge is an open-source printed circuit board by RileyMcCarthy, from the RileyMcCarthy/MaD repository on GitHub. It is a 4-layer board of 144.1 × 93.3 mm with 289 parts on 246 nets, routed with 1,731 tracks and 423 vias.
It is built around the UCC12040DVER, AM26LS31CD and SN74LVC1G14DBV, with the AM26C32IDRE4, APM4953 and SS36 among its other parts. Its parts include 41 ICs, 38 resistors, 31 capacitors, 23 diodes and 12 connectors.
Main components
6UCC12040DVER
SOIC-16-300milDC-DC ConvertersTexas InstrumentsAM26LS31CD
SOIC-160 0℃~+70℃ 4 4.75V~5.25V Driver SOIC-16 RS-485 / RS-422 ICs ROHSTexas InstrumentsBuffers / DriversSN74LVC1G14DBV
SOT-23-5-40℃~+85℃ 1 1 1.16V~3.33V 1.65V~5.5V 10uA 2.3V 32mA 32mA 390mV~1.87V 550mV 6.5ns@2.5V,50pF 74LVC Schmitt trigger 电源关断保护、噪声抑制功能 SOT-23-5 Inverters ROHSTexas InstrumentsInvertersAM26C32IDRE4
SOIC-16Enable shutdown、Tx/Rx enable SOIC-16 RS-485 / RS-422 ICs ROHSTexas InstrumentsRS-485/RS-422 ICsAPM4953
SOP8-55℃~+150℃ 1.5V 100pF 2 P-Channel 3.2W 30V 40mΩ@10V、55mΩ@4.5V 5.8A 520pF 65pF 9.2nC@10V P-Channel SOP8 MOSFETs ROHSElecSuperMOSFETsSS36
SMA(DO-214AC)-55℃~+125℃ 3A 500uA@60V 60V 700mV@3A Independent SMA(DO-214AC) Schottky Diodes ROHSMDDSchottky Diodes
README
README.mdMaD — Low-Cost Open-Source Tensile Testing Machine
A relatively low-cost (< $4,000), portable, spray-resistant, user-modifiable, open-source uniaxial tensile testing machine designed for low-modulus elastomeric and biologic materials.
📖 Documentation: https://rileymccarthy.github.io/MaD/ · 🚀 Run the control app: https://rileymccarthy.github.io/MaD/app/ (Chrome/Edge)
The full guides — first-time setup, every UI screen with screenshots, the architecture, and developer/reference material — live on the documentation site. This README is the quick map.
Specifications
| Parameter | Range |
|---|---|
| Strain Rate | 0 – 2 m/s |
| Force Measurement | 1 – 10 N |
| Gauge Length | 10 – 150 mm |
| Strain Length | 0 – 500 mm |
| Data Rate | 1000 samples/sec |
The control app runs in your browser
The control app — Control — is a frontend-only Progressive Web App. There is nothing to install: the browser talks straight to the Propeller 2 over the Web Serial API, and the protocol logic runs as WebAssembly compiled from the same Rust core used by the firmware tooling and the test rig.
Open https://rileymccarthy.github.io/MaD/app/ in Chrome or Edge, connect over USB, and run a test. See the operator quick-start.
Chromium-only: Web Serial and the File System Access API are available only in Chrome/Edge on desktop.
Repository structure
MaD/
├── Firmware/MaDCore/ Embedded C for the Propeller 2 (APP/DEV/IO/Library/HAL/HW)
├── Software/
│ └── Control/ Browser control app (Web Serial + WASM) — the app you ship
├── Protocol/ Schema + toolchain + Rust codec crate
│ ├── MaDProtocol.yaml Single source-of-truth schema
│ ├── rust/ The `protocol` crate — generated Rust codec (SIL workspace member)
│ └── ProtoEmb/ ⎘ submodule → github.com/RileyMcCarthy/protoemb (YAML→C/TS/Rust codegen + runtime)
├── SIL/ Software-in-the-loop test rig (Rust workspace)
│ ├── embsim/ ⎘ submodule → github.com/RileyMcCarthy/embsim (reusable SIL framework)
│ ├── models/ MaD physics models (gantry, sample, strain gauge)
│ ├── mad-catalog/ MaD's embsim kinds (carrier, add-on, ISS, machine); mad*.toml are the machine's projects
│ └── MaDSim/ The mad-emulator binary; no target runs it, and it retires (MaD #298)
├── Hardware/ KiCad PCB designs (EdgeBoard, DS2Addon)
└── docs/ + mkdocs.yml The documentation siteTwo components are git submodules (they are standalone open-source libraries):
Protocol/ProtoEmbandSIL/embsim. Clone withgit clone --recurse-submodules, or rungit submodule update --init --recursivein an existing checkout.
How it fits together
A single YAML schema (Protocol/MaDProtocol.yaml) generates the encode/decode
code for the firmware (C), the app (TypeScript + WASM), and the test rig (Rust),
so every layer agrees on the wire format byte-for-byte. The app and firmware speak
this ProtoEmb binary protocol over serial; motion profiles compile to G-code
that the firmware plays back from its SD card.
See How it works for the architecture with diagrams.
Quick start
Use the app
Open https://rileymccarthy.github.io/MaD/app/ in Chrome/Edge — no install.
Run the app from source
cd Software/Control
npm install
npm run build:wasm # compile the Rust protocol core → src/wasm/
npm run generate:proto # generate the TS codec from the YAML schema
npm run app # opens your browser; connect via Web SerialBuild the firmware
cd Firmware/MaDCore
pio run -e P2Eval # build for hardware
pio run -e P2Eval -t upload # flash a connected board
pio run -e MaDEdge # image the SIL emulator executes
pio test -e native_test # unit tests
pio check -e P2Eval --fail-on-defect=medium --fail-on-defect=high # MISRA (medium+high)Run the full simulation (no hardware)
cd SIL
make test # build both P2 images + the workspace, run the Rust test suite
make playground # the machine's project + the app in a Chrome window on the board's clock
make e2e # the e2e suite on the machine's project, mad-cosim.toml (SCENARIOS=… for a subset)Regenerate the protocol
After editing Protocol/MaDProtocol.yaml, regenerate all three targets so they
stay in lock-step (the firmware also regenerates its C target on every build):
# from repo root
python3 ./Protocol/ProtoEmb/core/generate.py --schema ./Protocol/MaDProtocol.yaml --target c --output ./Firmware/MaDCore/src/Generated --templates ./Protocol/ProtoEmb/core/templates
python3 ./Protocol/ProtoEmb/core/generate.py --schema ./Protocol/MaDProtocol.yaml --target ts --output ./Software/Control/src/protocol/generated --templates ./Protocol/ProtoEmb/core/templates
python3 ./Protocol/ProtoEmb/core/generate.py --schema ./Protocol/MaDProtocol.yaml --target rs --output ./Protocol/rust/src/generated --templates ./Protocol/ProtoEmb/core/templatesDocumentation
| If you want to… | Go to |
|---|---|
| Run your first test | Getting started |
| Learn every screen | User guide |
| Understand the design | How it works |
| Build & contribute | Developer guide |
| Look up the protocol / G-code / formats | Reference |
To work on the docs locally:
pip install -r docs/requirements.txt
mkdocs serve # http://127.0.0.1:8000CI/CD & releases
GitHub Actions builds and tests on every push/PR (.github/workflows/ci.yml) and
deploys the docs + app to GitHub Pages (.github/workflows/pages.yml). Releases
are cut with version tags:
Software/Control/scripts/release.sh patch --no-tag # bump package.json, then PR
Software/Control/scripts/release.sh --publish # tag origin/main as madcontrol-vX.Y.Z
git tag firmware-v1.0.0 && git push origin firmware-v1.0.0 # firmware binaries
git tag hardware-v1.0.0 && git push origin hardware-v1.0.0 # hardware manufacturing filesLicense
MIT
Parts
289| Qty | Value | Footprint | References |
|---|---|---|---|
| 22 | 0.1uF | Capacitor_SMD:C_0603_1608Metric | C10, C11, C12, C13, C14, C15, C18, C19, C20, C21, C22, C23, C24, C25, C26, C27 +6 |
| 21 | 220R | Resistor_SMD:R_0603_1608Metric | R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R21, R22, R30, R31, R32, R33 +5 |
| 21 | LED | LED_SMD:LED_0603_1608Metric | D3, D4, D10, D11, D12, D13, D15, D16, D18, D19, D20, D21, D22, D23, D24, D25 +5 |
| 21 | SN74LVC1G14DBV | Package_TO_SOT_SMD:SOT-23-5 | U10, U11, U12, U13, U14, U15, U16, U17, U18, U19, U21, U22, U27, U28, U29, U30 +5 |
| 9 | 1K | Resistor_SMD:R_0603_1608Metric | R1, R2, R3, R4, R5, R6, R7, R8, R25 |
| 8 | G*** | kibuzzard-64777688 | kibuzzard-64777688, kibuzzard-64777688, kibuzzard-64777688, kibuzzard-64777688, kibuzzard-64777688, kibuzzard-64777688, kibuzzard-64777688, kibuzzard-64777688 |
| 8 | G*** | kibuzzard-64777654 | kibuzzard-64777654, kibuzzard-64777654, kibuzzard-64777654, kibuzzard-64777654, kibuzzard-64777654, kibuzzard-64777654, kibuzzard-64777654, kibuzzard-64777654 |
| 8 | G*** | kibuzzard-64777629 | kibuzzard-64777629, kibuzzard-64777629, kibuzzard-64777629, kibuzzard-64777629, kibuzzard-64777629, kibuzzard-64777629, kibuzzard-64777629, kibuzzard-64777629 |
| 8 | NSI50010YT1G | NSI50010YT1G:SOD3716X135N | IC6, IC7, IC8, IC9, IC10, IC11, IC12, IC13 |
| 5 | 2.2K | Resistor_SMD:R_0603_1608Metric | R40, R41, R42, R43, R44 |
| 4 | 10uF | Capacitor_SMD:C_1206_3216Metric | C5, C6, C16, C17 |
| 4 | G*** | kibuzzard-647777A9 | kibuzzard-647777A9, kibuzzard-647777A9, kibuzzard-647777A9, kibuzzard-647777A9 |
| 4 | G*** | kibuzzard-64777781 | kibuzzard-64777781, kibuzzard-64777781, kibuzzard-64777781, kibuzzard-64777781 |
| 4 | G*** | kibuzzard-6477779F | kibuzzard-6477779F, kibuzzard-6477779F, kibuzzard-6477779F, kibuzzard-6477779F |
| 4 | G*** | kibuzzard-647777B2 | kibuzzard-647777B2, kibuzzard-647777B2, kibuzzard-647777B2, kibuzzard-647777B2 |
| 4 | MountingHole_Pad | MountingHole:MountingHole_4mm_Pad | H5, H6, H7, H8 |
| 4 | VO2631 | Package_DIP:DIP-8_W7.62mm | U5, U6, U7, U8 |
| 2 | 470uF | Capacitor_SMD:C_Elec_10x10.2 | C1, C2 |
| 2 | G*** | kibuzzard-64777339 | kibuzzard-64777339, kibuzzard-64777339 |
| 2 | G*** | kibuzzard-647770C7 | kibuzzard-647770C7, kibuzzard-647770C7 |
| 2 | G*** | kibuzzard-64777365 | kibuzzard-64777365, kibuzzard-64777365 |
| 2 | ISO6742DWR | ISO6742DWR:SOIC127P1030X265-16N | IC1, IC2 |
| 2 | SS36 | Diode_SMD:D_SMC | D1, D2 |
| 2 | UCC12040DVER | UCC12040DVER:SOIC127P1030X265-16N | IC3, IC4 |
| 1 | 0.1uF | Capacitor_SMD:C_0402_1005Metric | C30 |
| 1 | 0.2A/30V | Fuse:Fuse_1206_3216Metric | F1 |
| 1 | 10K | Resistor_SMD:R_0603_1608Metric | R39 |
| 1 | 180uF | Capacitor_SMD:CP_Elec_8x6.9 | C3 |
| 1 | 330uF | Capacitor_SMD:C_Elec_10x10.2 | C4 |
| 1 | 390R | Resistor_SMD:R_0603_1608Metric | R38 |
| 1 | 4.7K | Resistor_SMD:R_0603_1608Metric | R24 |
| 1 | 436500321 | Connector_Molex:Molex_Micro-Fit_3.0_43045-0618_2x03-1MP_P3.00mm_Vertical | J4 |
| 1 | 47uH/3A | Inductor_SMD:L_10.4x10.4_H4.8 | L2 |
| 1 | 68uH/3A | Inductor_SMD:L_10.4x10.4_H4.8 | L1 |
| 1 | 6N137 | Package_DIP:DIP-8_W7.62mm | U4 |
| 1 | AM26C32IDR | Package_SO:SOIC-16_3.9x9.9mm_P1.27mm | U25 |
| 1 | AM26LS31CD | Package_SO:SOIC-16_3.9x9.9mm_P1.27mm | U24 |
| 1 | APM4953 | Package_SO:SOP-8_3.9x4.9mm_P1.27mm | U3 |
| 1 | A_REF | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | JP2 |
| 1 | B_REF | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | JP3 |
| 1 | ChargePump | Connector_Molex:Molex_Micro-Fit_3.0_43650-0321_1x03_P3.00mm_Vertical | J10 |
| 1 | Debug | Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical | J1 |
| 1 | Door | Connector_Molex:Molex_Micro-Fit_3.0_43650-0321_1x03_P3.00mm_Vertical | J16 |
| 1 | ENC_PWR | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | J25 |
| 1 | ENDLower | Connector_Molex:Molex_Micro-Fit_3.0_43650-0321_1x03_P3.00mm_Vertical | J15 |
| 1 | ENDUpper | Connector_Molex:Molex_Micro-Fit_3.0_43650-0321_1x03_P3.00mm_Vertical | J14 |
| 1 | ESDActive | Connector_Molex:Molex_Micro-Fit_3.0_43650-0321_1x03_P3.00mm_Vertical | J13 |
| 1 | ESDLower | Connector_Molex:Molex_Micro-Fit_3.0_43650-0321_1x03_P3.00mm_Vertical | J12 |
| 1 | ESDUpper | Connector_Molex:Molex_Micro-Fit_3.0_43650-0321_1x03_P3.00mm_Vertical | J11 |
| 1 | Encoder | Connector_Molex:Molex_Micro-Fit_3.0_43045-1015_2x05_P3.00mm_Vertical | J20 |
| 1 | Force | Connector_Molex:Molex_Micro-Fit_3.0_43045-0615_2x03_P3.00mm_Vertical | J9 |
| 1 | G*** | kibuzzard-6477707F | kibuzzard-6477707F |
| 1 | G*** | kibuzzard-64777285 | kibuzzard-64777285 |
| 1 | G*** | kibuzzard-6474D10F | kibuzzard-6474D10F |
| 1 | G*** | kibuzzard-647778EA | kibuzzard-647778EA |
| 1 | G*** | kibuzzard-6474CF4E | kibuzzard-6474CF4E |
| 1 | G*** | kibuzzard-647778DF | kibuzzard-647778DF |
| 1 | G*** | kibuzzard-6477723E | kibuzzard-6477723E |
| 1 | G*** | kibuzzard-64777922 | kibuzzard-64777922 |
| 1 | G*** | kibuzzard-6474D2C7 | kibuzzard-6474D2C7 |
| 1 | G*** | kibuzzard-6477743C | kibuzzard-6477743C |
| 1 | G*** | kibuzzard-64777573 | kibuzzard-64777573 |
| 1 | G*** | kibuzzard-6474CE56 | kibuzzard-6474CE56 |
| 1 | G*** | kibuzzard-64777131 | kibuzzard-64777131 |
| 1 | G*** | kibuzzard-6474D36B | kibuzzard-6474D36B |
| 1 | G*** | kibuzzard-6474D298 | kibuzzard-6474D298 |
| 1 | G*** | kibuzzard-64777136 | kibuzzard-64777136 |
| 1 | G*** | kibuzzard-64777448 | kibuzzard-64777448 |
| 1 | G*** | kibuzzard-64777814 | kibuzzard-64777814 |
| 1 | G*** | kibuzzard-64777848 | kibuzzard-64777848 |
| 1 | G*** | kibuzzard-6474D3A4 | kibuzzard-6474D3A4 |
| 1 | G*** | kibuzzard-64777263 | kibuzzard-64777263 |
| 1 | G*** | kibuzzard-64777463 | kibuzzard-64777463 |
| 1 | G*** | kibuzzard-64777822 | kibuzzard-64777822 |
| 1 | G*** | kibuzzard-64777588 | kibuzzard-64777588 |
| 1 | G*** | kibuzzard-64777469 | kibuzzard-64777469 |
| 1 | G*** | kibuzzard-64777566 | kibuzzard-64777566 |
| 1 | G*** | kibuzzard-6474D2B0 | kibuzzard-6474D2B0 |
| 1 | G*** | kibuzzard-6474D12A | kibuzzard-6474D12A |
| 1 | G*** | kibuzzard-647772FA | kibuzzard-647772FA |
The 229 most common of 289 parts.
More from RileyMcCarthy/MaD
2- 2 layers47 × 25.4 mm

- 2 layers47 × 25.4 mm

Similar boards
- 2 layers55 × 90 mm

CCFL2LED
mijuc/CCFL2LED
Hi! I'm working on the R&D side of the Поново project. Through our initiative, where we upcycle old electronic devices in exchange for tree seedlings, we’ve noticed that LCD monitors are among the most common items…
82 parts7GPL-3.0 - 4 layers80 × 96 mm

- 4 layers143.1 × 87.6 mm

Thermistor Expansion Module
Gad9889/Thermistor-Expansion-Module
KiCad project files remain at the repository root. Hierarchical schematic sheets are organized under schematics/, with connector sheets in schematics/connectors/ and gate sheets in schematics/gates/.
114 parts - 2 layers102.9 × 167.6 mm

- 2 layers191.5 × 100 mm

HyperNet-2-MainBoard
TheStaticTurtle/HyperNet
HyperNet is an 8-in, 8-out open-source audio stagebox based on Ultranet
232 parts6MIT - 2 layers80 × 92 mm

- 4 layers126.5 × 63 mm

- 2 layers32 × 22 mm

Questions
How big is the MaD Edge PCB?
It measures 144.1 × 93.3 mm and has 4 copper layers, 4.69 mm thick.
What parts does the MaD Edge use?
289 parts, built around the UCC12040DVER, AM26LS31CD, SN74LVC1G14DBV and AM26C32IDRE4. 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 MaD Edge KiCad files?
From the RileyMcCarthy/MaD repository on GitHub, at the commit this page was made from: the board is Hardware/EdgeBoard/KiCad/MaD_Edge.kicad_pcb and its schematic Hardware/DS2Addon/KICAD/DS2_Addon.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the MaD Edge design in my own project?
Its repository states no licence, so its author keeps all rights: ask RileyMcCarthy before reusing the design.