

DS2 Addon
Tensile testing machine
- Size
- 47 × 25.4 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 35
- Nets
- 25
- Pads
- 86
- Tracks, vias
- 131, 14
- Pours
- 2
- Routed
- Yes
- KiCad
- KiCad 9.0 (file 20241229)
- Created
- 2 Apr 2021
- Updated
- 7 Nov 2026
Overview
DS2 Addon is an open-source printed circuit board by RileyMcCarthy, from the RileyMcCarthy/MaD repository on GitHub. It is a 2-layer board of 47 × 25.4 mm with 35 parts on 25 nets, routed with 131 tracks and 14 vias.
It is built around the ADS122U04IPW. Its parts include 12 capacitors, 10 resistors, 5 connectors and 1 IC.
Main components
1README
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
35| Qty | Value | Footprint | References |
|---|---|---|---|
| 9 | X | Capacitor_SMD:C_0805_2012Metric | C1, C2, C3, C7, C8, C9, C10, C11, C12 |
| 6 | X | Resistor_SMD:R_0805_2012Metric | R1, R2, R6, R7, R8, R9 |
| 3 | 0.1uF | Capacitor_SMD:C_0805_2012Metric | C4, C5, C6 |
| 3 | 47R | Resistor_SMD:R_0805_2012Metric | R3, R4, R5 |
| 1 | DS2_Addon:LOGO | LOGO | |
| 1 | 10k | Resistor_SMD:R_0805_2012Metric | R10 |
| 1 | A0_bypass | Jumper:SolderJumper-2_P1.3mm_Open_Pad1.0x1.5mm | JP1 |
| 1 | A1_bypass | Jumper:SolderJumper-2_P1.3mm_Open_Pad1.0x1.5mm | JP2 |
| 1 | A2_bypass | Jumper:SolderJumper-2_P1.3mm_Open_Pad1.0x1.5mm | JP3 |
| 1 | A3_bypass | Jumper:SolderJumper-2_P1.3mm_Open_Pad1.0x1.5mm | JP4 |
| 1 | ADS122U04 | Package_SO:TSSOP-16_4.4x5mm_P0.65mm | U1 |
| 1 | Analog1 | Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical | J2 |
| 1 | Analog2 | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J5 |
| 1 | Conn_01x03 | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | J3 |
| 1 | MCU | Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_Vertical | J1 |
| 1 | Reference | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J4 |
The 33 most common of 35 parts.
Questions
How big is the DS2 Addon PCB?
It measures 47 × 25.4 mm and has 2 copper layers, 1.6 mm thick.
What parts does the DS2 Addon use?
35 parts, built around the ADS122U04IPW. 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 DS2 Addon KiCad files?
From the RileyMcCarthy/MaD repository on GitHub, at the commit this page was made from: the board is Hardware/DS2Addon/KICAD/DS2_Addon.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 DS2 Addon design in my own project?
Its repository states no licence, so its author keeps all rights: ask RileyMcCarthy before reusing the design.
More from RileyMcCarthy/MaD
2- 4 layers144.1 × 93.3 mm

- 2 layers47 × 25.4 mm

Similar boards
- 2 layers107.3 × 24 mm

DualPressure RS422
LSDRM/DualPressure-Thermocouple_forVMCGUI
A customized DAQ board through UART protocol, embeding two pressure sensors and one thermocouple. Has been developed to be used with VMCGUI.
46 parts - 2 layers53 × 24 mm

CyclingPowerMeter 2023
takuhoTech/LagopusSystem-2023
Avionics for Human-Powered Aircraft, Including Bike Power Meter project.
35 parts3MIT - 2 layers97.2 × 59.1 mm

ArmLEDsPrototype
hackclub/OnBoard
💡 Join 1,000 teenagers and make your first PCB with a $100 grant!
35 parts915 - 2 layers62 × 42 mm

- 2 layers75 × 26 mm

DIY detector electron variant
ozel/DIY_particle_detector
A mobile low-cost spectrometer for measuring radioactivity and the energy of ionising radiation like alpha particles and electrons
35 parts558BSD-2-Clause - 2 layers45 × 25 mm

ReCamera Basically Board
Seeed-Studio/OSHW-reCamera-Series
reCamera is a series of open-source AI cameras.
35 parts495Apache-2.0 - 2 layers160.8 × 24.4 mm

- 2 layers75 × 50 mm
