

SmartBall PCB
Reproducibility materials for the MS thesis An Instrumented Baseball for Per-Finger Grip Force Measurement: Finger Force Tracks Delivery Effort Rather Than Release Velocity (Keaton Ruthardt, MS Computer Science — Data…
- Size
- 25 × 20 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 46
- Nets
- 76
- Pads
- 195
- Tracks, vias
- 395, 68
- Pours
- 2
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 14 Aug 2026
- Updated
- 14 Aug 2026
Overview
SmartBall PCB is an open-source printed circuit board by Keaton-Ruthardt, from the Keaton-Ruthardt/Masters_Thesis repository on GitHub, published under the MIT licence. It is a 2-layer board of 25 × 20 mm with 46 parts on 76 nets, routed with 395 tracks and 68 vias.
It is built around the NRF52840-QIAA-R, AP2112K-3.3 and MCP73831T-2ACI/OT-HXY, with the PAD1, ANT016008LCS2442MA1 and X50328MSB2GI among its other parts. Its parts include 14 capacitors, 7 resistors, 5 ICs and 1 inductor. It belongs with the nRF52 and nRF5x boards of this library.
Main components
6NRF52840-QIAA-R
AQFN-73-EP(7x7)-95dBm 1.7V~5.5V 2.4GHz 2.4GHz~2.4835GHz 2Mbps 4.82mA 6.26mA 8dBm SPI、USB、UART、ADC、I2S、PWM ZigBee、Bluetooth、LoRa、ISM transceiver AQFN-73-EP(7x7) RF Transceiver ICs ROHSNORDICRF Transceiver ICsAP2112K-3.3
SOT253.3V 600mA CMOS Low Dropout Linear Regulator with EnableDiodes IncorporatedUncategorisedMCP73831T-2ACI/OT-HXY
SOT-23-5LBattery ManagementHXY MOSFETPAD1
TO-18Low Leakage Pico-Amp (-1pA) DiodeINTERFET CORPORATIONUncategorisedANT016008LCS2442MA1
SMD-6P,1.6x0.8mm-40℃~+85℃ 0.4mm 0.8mm 1.6dBi 1.6mm 2.442GHz 3 50Ω 800mW 84MHz SMD-6P,1.6x0.8mm Antennas ROHSTDKAntennasX50328MSB2GI
SMD5032-2P-40℃~+85℃ 20pF 80Ω 8MHz Crystal Oscillator ±10ppm ±20ppm SMD5032-2P Crystals ROHSYXCCrystals
README
README.mdAn Instrumented Baseball for Per-Finger Grip Force Measurement
Reproducibility materials for the MS thesis An Instrumented Baseball for Per-Finger Grip Force Measurement: Finger Force Tracks Delivery Effort Rather Than Release Velocity (Keaton Ruthardt, MS Computer Science — Data Science, Oral Roberts University, 2026).
A regulation baseball instrumented with four thin-film force sensors under the leather cover, sampling all channels at 480 Hz and streaming over Bluetooth Low Energy, paired per pitch with TrackMan radar release velocity.
What the study found
Measured the way the field currently measures it — with a graded submaximal effort ladder — grip force predicts release velocity strongly and broadly: index + middle force at release reaches r = 0.59, and 15 of 20 grip features remain significant after Holm correction.
Holding commanded effort fixed removes that association. Index + middle force at release falls to r = 0.33 (n.s.), and its unique contribution to velocity variance is ΔR² = 0.000, against 0.743 for commanded effort alone. A mixed-effects model agrees (χ²(1) = 0.47, p = 0.49).
Three thumb-dominated features survive Benjamini–Hochberg correction (q = 0.035); none clears family-wise correction, and all are reported as exploratory.
The conclusion is that finger grip force, measured under a submaximal effort protocol, is largely a readout of delivery effort rather than a determinant of release velocity.
Layout
| Path | Contents |
|---|---|
thesis/ | The thesis (MSCS_Paper.docx) and its Quarto source, bibliography, and CSL style |
defense/ | Defense presentation, including a copy with speaker notes |
Masters_Thesis_and_Defense.zip | Thesis and presentation bundled together |
firmware/ | Arduino sketches for the Seeed XIAO nRF52840 |
acquisition/ | ble_logger.py — BLE client, writes raw counts to CSV |
calibration/ | Per-sensor calibration procedure, fitting script, factors, raw captures |
analysis/ | Feature extraction, statistics, and figure generation |
analysis/results/ | Derived, de-identified data and generated statistical reports |
figures/ | Figures as they appear in the thesis |
hardware/ | KiCad PCB project, schematic and layout PDFs, bill of materials |
docs/ | Illustrated build guides, project plan, proposal |
Firmware
pressure_logger_480/— deployed acquisition firmware. 480 Hz, four samples per packet.pressure_logger/— earlier 120 Hz single-sample version; the host logger supports both.isolation_test/— channel-isolation gate.sensor_test/,single_sensor/,calibrate_sensors/— bench-check sketches.
Built with the Arduino IDE and the Seeed nRF52 mbed-enabled board package. The non-mbed package fails to link.
Wire protocol
The pressure characteristic carries a 36-byte packet: a 32-bit unsigned microsecond timestamp for the first sample in the batch, followed by four sample groups of four 16-bit unsigned ADC values each, little-endian, in channel order S1 through S4. Sample k within a batch occurs at the batch timestamp plus k × 2083 µs.
The earlier firmware sends a 12-byte packet: a 32-bit millisecond timestamp followed by
four 16-bit ADC values. ble_logger.py derives the batch size from the packet length
and works against either version without modification.
Data dictionary
Each logged CSV row contains:
| Column | Meaning |
|---|---|
wall_iso | Host wall-clock time, ISO 8601, UTC |
wall_unix_ms | Host wall-clock time, integer ms since the Unix epoch |
ball_t_ms | The instrument's own timebase in ms — the authoritative timing column |
s1–s4 | Raw ADC counts, 0–4095, in channel order |
s1_N–s4_N | Convenience force values in newtons |
marker | Operator-typed per-pitch tag (pitch id, effort, outcome) |
Raw counts are the archived source of truth. Calibration is applied downstream in analysis, never on the ball, so it can be revised without re-collecting data.
Force conversion
For a sensor of resistance Rₛ in series with a fixed 10 kΩ resistor, the divider node read by the 12-bit ADC gives a conductance ratio
G = ADC / (4095 - ADC)
F = c * Gwhere c is the per-sensor calibration factor in calibration/calfactors_v3.csv,
fitted through the origin by least squares over twenty applied-mass trials per sensor
(R² = 0.961 to 0.995).
Reproducing the analysis
pip install numpy pandas scipy statsmodels matplotlib
cd analysis
python thesis_analysis_v2.py # feature extraction -> results/
python advanced_stats.py # corrections, variance decomposition, bootstrap
python make_thesis_figures.py # figuresA fixed random seed (20260805) makes every reported p-value reproducible: 20,000 permutations and 10,000 bootstrap resamples throughout.
Note that thesis_analysis_v2.py reads raw session captures, which are not distributed
here (see below). The derived feature table it produces, analysis/results/per_pitch_features.csv,
is included, and advanced_stats.py and make_thesis_figures.py run from it directly.
Participant data
Raw per-pitch session captures are not included, in accordance with the participant-privacy commitments described in the thesis. Participants consented to their data being used in the study; that consent did not extend to public redistribution of raw records.
Derived, de-identified summary data sufficient to reproduce the reported figures and
models are provided in analysis/results/. Pitchers are identified only as P1, P2, P3.
Licensing
- Code and firmware — MIT License
- Documentation, figures, and build records — CC BY 4.0
Both are permissive and allow reuse with attribution, which is the intent for a reproducibility release: you should be able to rebuild the instrument and re-run the analysis without seeking further permission.
Third-party software is used in accordance with its own licenses, none of which impose copyleft obligations on this project's code. TrackMan, PitchLogic, Kookaburra, FlexiForce, Tekscan, Seeed, and Nordic Semiconductor are trademarks of their respective owners, used nominatively to identify the products actually used or discussed. No endorsement is implied.
Safety
The instrument places a lithium-polymer cell and rigid electronics inside a ball thrown
at speed. If you rebuild it, read docs/BALL_INTEGRATION_GUIDE.md first. Epoxy is poured
in ~15 g layers with each cured before the next, because the exotherm of a single large
pour is a genuine thermal hazard to an enclosed LiPo cell, and the cell is wrapped before
potting. The ball is retired — not repaired — if the cover is breached, the potted block
loosens, the cell swells or fails to hold charge, or the channel-isolation test fails
after an impact. The cell cannot be removed once potted, so retirement means disposal of
the whole assembly through appropriate lithium-battery disposal.
Citation
@mastersthesis{ruthardt2026instrumented,
author = {Ruthardt, Keaton},
title = {An Instrumented Baseball for Per-Finger Grip Force Measurement:
Finger Force Tracks Delivery Effort Rather Than Release Velocity},
school = {Oral Roberts University},
year = {2026},
type = {MS thesis}
}Parts
46| Qty | Value | Footprint | References |
|---|---|---|---|
| 15 | PAD1 | TestPoint:TestPoint_Pad_D1.5mm | 3V3, A0, A1, A2, A3, CLK, G, G, Qi5v, RST, SWDIO, V, V, V, V |
| 5 | 100nF/16V | Capacitor_SMD:C_0402_1005Metric | C1, C2, C4, C5, C14 |
| 4 | 10K | Resistor_SMD:R_0402_1005Metric | R1, R2, R3, R4 |
| 2 | 12pF/16V | Capacitor_SMD:C_0402_1005Metric | C6, C7 |
| 2 | 1uF/10V X7R | Capacitor_SMD:C_0402_1005Metric | C12, C13 |
| 2 | 4.7K | Resistor_SMD:R_0402_1005Metric | R5, R6 |
| 2 | 4.7uF/16V X5R | Capacitor_SMD:C_0402_1005Metric | C9, C10 |
| 2 | PAD1 | TestPoint:TestPoint_Pad_D2.0mm | -, + |
| 1 | 10uF/10V X5R | Capacitor_SMD:C_0402_1005Metric | C8 |
| 1 | 1pF/50V | Capacitor_SMD:C_0402_1005Metric | C11 |
| 1 | 1uF/16V X7R | Capacitor_SMD:C_0402_1005Metric | C3 |
| 1 | 2.2uH | Inductor_SMD:L_0402_1005Metric | L1 |
| 1 | 2K | Resistor_SMD:R_0402_1005Metric | R7 |
| 1 | ANT016008LCS2442MA1 | ANT016008LCS2442MA1:ANT_ANT016008LCS2442MA1 | ANT1 |
| 1 | AP2112K-3.3 | Package_TO_SOT_SMD:SOT-23-5 | U1 |
| 1 | H3LIS331DLTR | H3LIS331DLTR:QFN300X300X100-16N | U3 |
| 1 | LIS3MDLTR | LIS3MDLTR:XDCR_LIS3MDLTR | U4 |
| 1 | MCP73831T-2ACI_OT | MCP73831T-2ACI_OT:SOT95P280X145-5N | U5 |
| 1 | NRF52840-QIAA-R | NRF52840-QIAA-R:XCVR_NRF52840-QIAA-R | U2 |
| 1 | X50328MSB2GI | X50328MSB2GI:XTAL_MSB2GI_YXC | XTAL1 |
Similar boards
- 2 layers76.1 × 87.9 mm

- 2 layers67.1 × 23.4 mm

AFE4404-tri PPG
ShifatHossain/AFE4404-tri-PPG
An AFE4404 and ESP32 PICO D4/V3 based device to acquire three wavelength PPG signal.
34 parts2 - 4 layers45 × 49 mm

Swarm drone
aniranaway/Drone_Swarm
A fully custom, low-level embedded hardware and firmware platform designed for autonomous multi drone swarms. The system integrates custom STM32-based flight controller PCBs, coreless DC motor drive arrays for a micro…
108 parts - 4 layers50 × 6 mm

- 4 layers65.1 × 25.1 mm

- 2 layers180 × 110 mm

ISD1700 sampler main board
hiro-akihabara/OpnBeat
OpnBeat is open source Lo-fi sampler project
180 parts67GPL-3.0 - 2 layers87.3 × 86.3 mm

- 2 layers424 × 139.2 mm

Questions
How big is the SmartBall PCB PCB?
It measures 25 × 20 mm and has 2 copper layers, 1.6 mm thick.
What parts does the SmartBall PCB use?
46 parts, built around the NRF52840-QIAA-R, AP2112K-3.3, MCP73831T-2ACI/OT-HXY and PAD1. 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 SmartBall PCB KiCad files?
From the Keaton-Ruthardt/Masters_Thesis repository on GitHub, at the commit this page was made from: the board is hardware/SmartBall_PCB.kicad_pcb and its schematic hardware/SmartBall_PCB.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the SmartBall PCB design in my own project?
Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).