Skip to the content
4 layers144.1 × 93.3 mmMaD Edge, the printed circuit board in 3D

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

6

README

README.md

MaD — 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

ParameterRange
Strain Rate0 – 2 m/s
Force Measurement1 – 10 N
Gauge Length10 – 150 mm
Strain Length0 – 500 mm
Data Rate1000 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

text
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 site

Two components are git submodules (they are standalone open-source libraries): Protocol/ProtoEmb and SIL/embsim. Clone with git clone --recurse-submodules, or run git submodule update --init --recursive in 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

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

Build the firmware

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

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

bash
# 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/templates

Documentation

If you want to…Go to
Run your first testGetting started
Learn every screenUser guide
Understand the designHow it works
Build & contributeDeveloper guide
Look up the protocol / G-code / formatsReference

To work on the docs locally:

bash
pip install -r docs/requirements.txt
mkdocs serve     # http://127.0.0.1:8000

CI/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:

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

License

MIT

Parts

289
QtyValueFootprintReferences
220.1uFCapacitor_SMD:C_0603_1608MetricC10, C11, C12, C13, C14, C15, C18, C19, C20, C21, C22, C23, C24, C25, C26, C27 +6
21220RResistor_SMD:R_0603_1608MetricR10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R21, R22, R30, R31, R32, R33 +5
21LEDLED_SMD:LED_0603_1608MetricD3, D4, D10, D11, D12, D13, D15, D16, D18, D19, D20, D21, D22, D23, D24, D25 +5
21SN74LVC1G14DBVPackage_TO_SOT_SMD:SOT-23-5U10, U11, U12, U13, U14, U15, U16, U17, U18, U19, U21, U22, U27, U28, U29, U30 +5
91KResistor_SMD:R_0603_1608MetricR1, R2, R3, R4, R5, R6, R7, R8, R25
8G***kibuzzard-64777688kibuzzard-64777688, kibuzzard-64777688, kibuzzard-64777688, kibuzzard-64777688, kibuzzard-64777688, kibuzzard-64777688, kibuzzard-64777688, kibuzzard-64777688
8G***kibuzzard-64777654kibuzzard-64777654, kibuzzard-64777654, kibuzzard-64777654, kibuzzard-64777654, kibuzzard-64777654, kibuzzard-64777654, kibuzzard-64777654, kibuzzard-64777654
8G***kibuzzard-64777629kibuzzard-64777629, kibuzzard-64777629, kibuzzard-64777629, kibuzzard-64777629, kibuzzard-64777629, kibuzzard-64777629, kibuzzard-64777629, kibuzzard-64777629
8NSI50010YT1GNSI50010YT1G:SOD3716X135NIC6, IC7, IC8, IC9, IC10, IC11, IC12, IC13
52.2KResistor_SMD:R_0603_1608MetricR40, R41, R42, R43, R44
410uFCapacitor_SMD:C_1206_3216MetricC5, C6, C16, C17
4G***kibuzzard-647777A9kibuzzard-647777A9, kibuzzard-647777A9, kibuzzard-647777A9, kibuzzard-647777A9
4G***kibuzzard-64777781kibuzzard-64777781, kibuzzard-64777781, kibuzzard-64777781, kibuzzard-64777781
4G***kibuzzard-6477779Fkibuzzard-6477779F, kibuzzard-6477779F, kibuzzard-6477779F, kibuzzard-6477779F
4G***kibuzzard-647777B2kibuzzard-647777B2, kibuzzard-647777B2, kibuzzard-647777B2, kibuzzard-647777B2
4MountingHole_PadMountingHole:MountingHole_4mm_PadH5, H6, H7, H8
4VO2631Package_DIP:DIP-8_W7.62mmU5, U6, U7, U8
2470uFCapacitor_SMD:C_Elec_10x10.2C1, C2
2G***kibuzzard-64777339kibuzzard-64777339, kibuzzard-64777339
2G***kibuzzard-647770C7kibuzzard-647770C7, kibuzzard-647770C7
2G***kibuzzard-64777365kibuzzard-64777365, kibuzzard-64777365
2ISO6742DWRISO6742DWR:SOIC127P1030X265-16NIC1, IC2
2SS36Diode_SMD:D_SMCD1, D2
2UCC12040DVERUCC12040DVER:SOIC127P1030X265-16NIC3, IC4
10.1uFCapacitor_SMD:C_0402_1005MetricC30
10.2A/30VFuse:Fuse_1206_3216MetricF1
110KResistor_SMD:R_0603_1608MetricR39
1180uFCapacitor_SMD:CP_Elec_8x6.9C3
1330uFCapacitor_SMD:C_Elec_10x10.2C4
1390RResistor_SMD:R_0603_1608MetricR38
14.7KResistor_SMD:R_0603_1608MetricR24
1436500321Connector_Molex:Molex_Micro-Fit_3.0_43045-0618_2x03-1MP_P3.00mm_VerticalJ4
147uH/3AInductor_SMD:L_10.4x10.4_H4.8L2
168uH/3AInductor_SMD:L_10.4x10.4_H4.8L1
16N137Package_DIP:DIP-8_W7.62mmU4
1AM26C32IDRPackage_SO:SOIC-16_3.9x9.9mm_P1.27mmU25
1AM26LS31CDPackage_SO:SOIC-16_3.9x9.9mm_P1.27mmU24
1APM4953Package_SO:SOP-8_3.9x4.9mm_P1.27mmU3
1A_REFConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJP2
1B_REFConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJP3
1ChargePumpConnector_Molex:Molex_Micro-Fit_3.0_43650-0321_1x03_P3.00mm_VerticalJ10
1DebugConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ1
1DoorConnector_Molex:Molex_Micro-Fit_3.0_43650-0321_1x03_P3.00mm_VerticalJ16
1ENC_PWRConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ25
1ENDLowerConnector_Molex:Molex_Micro-Fit_3.0_43650-0321_1x03_P3.00mm_VerticalJ15
1ENDUpperConnector_Molex:Molex_Micro-Fit_3.0_43650-0321_1x03_P3.00mm_VerticalJ14
1ESDActiveConnector_Molex:Molex_Micro-Fit_3.0_43650-0321_1x03_P3.00mm_VerticalJ13
1ESDLowerConnector_Molex:Molex_Micro-Fit_3.0_43650-0321_1x03_P3.00mm_VerticalJ12
1ESDUpperConnector_Molex:Molex_Micro-Fit_3.0_43650-0321_1x03_P3.00mm_VerticalJ11
1EncoderConnector_Molex:Molex_Micro-Fit_3.0_43045-1015_2x05_P3.00mm_VerticalJ20
1ForceConnector_Molex:Molex_Micro-Fit_3.0_43045-0615_2x03_P3.00mm_VerticalJ9
1G***kibuzzard-6477707Fkibuzzard-6477707F
1G***kibuzzard-64777285kibuzzard-64777285
1G***kibuzzard-6474D10Fkibuzzard-6474D10F
1G***kibuzzard-647778EAkibuzzard-647778EA
1G***kibuzzard-6474CF4Ekibuzzard-6474CF4E
1G***kibuzzard-647778DFkibuzzard-647778DF
1G***kibuzzard-6477723Ekibuzzard-6477723E
1G***kibuzzard-64777922kibuzzard-64777922
1G***kibuzzard-6474D2C7kibuzzard-6474D2C7
1G***kibuzzard-6477743Ckibuzzard-6477743C
1G***kibuzzard-64777573kibuzzard-64777573
1G***kibuzzard-6474CE56kibuzzard-6474CE56
1G***kibuzzard-64777131kibuzzard-64777131
1G***kibuzzard-6474D36Bkibuzzard-6474D36B
1G***kibuzzard-6474D298kibuzzard-6474D298
1G***kibuzzard-64777136kibuzzard-64777136
1G***kibuzzard-64777448kibuzzard-64777448
1G***kibuzzard-64777814kibuzzard-64777814
1G***kibuzzard-64777848kibuzzard-64777848
1G***kibuzzard-6474D3A4kibuzzard-6474D3A4
1G***kibuzzard-64777263kibuzzard-64777263
1G***kibuzzard-64777463kibuzzard-64777463
1G***kibuzzard-64777822kibuzzard-64777822
1G***kibuzzard-64777588kibuzzard-64777588
1G***kibuzzard-64777469kibuzzard-64777469
1G***kibuzzard-64777566kibuzzard-64777566
1G***kibuzzard-6474D2B0kibuzzard-6474D2B0
1G***kibuzzard-6474D12Akibuzzard-6474D12A
1G***kibuzzard-647772FAkibuzzard-647772FA

The 229 most common of 289 parts.

More from RileyMcCarthy/MaD

2
  • 2 layers47 × 25.4 mmDS2 Addon, the printed circuit board in 3D

    DS2 Addon

    RileyMcCarthy/MaD

    Tensile testing machine

    35 parts3
  • 2 layers47 × 25.4 mm00 fanout, the printed circuit board in 3D

    00 fanout

    RileyMcCarthy/MaD

    Tensile testing machine

    31 parts3

Similar boards

  • 2 layers55 × 90 mmCCFL2LED, the printed circuit board in 3D

    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 layers143.1 × 87.6 mmThermistor Expansion Module, the printed circuit board in 3D

    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 mmPower, the printed circuit board in 3D

    Power

    RileyMcCarthy/MaD-Power-Board

    61 parts
  • 2 layers191.5 × 100 mmHyperNet-2-MainBoard, the printed circuit board in 3D

    HyperNet-2-MainBoard

    TheStaticTurtle/HyperNet

    HyperNet is an 8-in, 8-out open-source audio stagebox based on Ultranet

    232 parts6MIT
  • 2 layers80 × 92 mmCTC CU, the printed circuit board in 3D

    CTC CU

    MichaelPrader/sig-ctc-CU

    PCB

    78 parts
  • 4 layers126.5 × 63 mmCmc, the printed circuit board in 3D

    Cmc

    STMBL/stmbl-hw

    174 parts
  • 2 layers32 × 22 mmDiff driver, the printed circuit board in 3D

    Diff driver

    rene-dev/stmbl

    AC Servo Driver for STM32F4

    14 parts990GPL-3.0

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.