barbell probe (wip)

x 0.35 · purpose 0.70 · t 2 s · scope 0.40

from 2026-10

ESP32-C3 · ICM-42688-P · BLE · C++

A lift is a repeated movement, but most workout records contain only weight and repetition count. The barbell probe is an ESP32-C3 motion tracker that attaches to a barbell or moving weight stack and turns each repetition into a path, a tempo and a set of measurable phases.

a rep as a trajectory

Barbell bench press, 8 reps. The bar path at 1:1 in the device's frame: the bar descends about 37 cm from its start, reverses and returns, drifting -4 to 26 mm sideways. Beside it, each rep's vertical travel against time, with earlier reps kept faint and each reversal marked.

data
reprom (cm)lower (s)lift (s)cycle (s)counted at (s)reversal z (mm)reversal x (mm)
137.21.080.812.493.21-375.019.2
238.01.100.842.525.76-383.119.4
337.51.130.872.578.33-377.217.3
436.51.120.892.5910.93-367.417.5
537.11.150.912.6313.57-373.515.3
635.71.180.952.7316.29-359.518.6
734.81.201.002.7819.09-352.018.5
835.51.231.072.9221.98-358.420.1
a repetition becomes a line with a beginning, reversal and return.

The main object is the movement itself: a thin trace written across an otherwise empty frame. Position advances with time, pauses at the end of the range and returns. Previously completed reps remain as faint references, so the movement reads without a photo of the gym or the device.

an entire set

Cable-row weight stack, 10 reps over 30.7 s. The stack rises above its start on every rep, so its trace runs upward. Range of motion 43.1 cm on average (2.45% variation); each rep's range and lowering and lifting time sit under it.

data
repstart (s)rom (cm)lower (s)lift (s)cycle (s)counted at (s)
11.0043.41.240.832.653.23
23.6544.21.250.842.695.90
36.3443.81.270.872.758.66
49.0944.71.290.852.7411.41
511.8343.11.310.902.8414.23
614.6743.91.330.922.8817.12
717.5542.61.340.962.9320.05
820.4842.31.361.003.0123.05
923.4941.81.371.033.0426.11
1026.5341.21.411.083.1729.25
range, pace and movement phase accumulate across the set.

Alongside the primary trace sit small fields for repetition number, range of motion, direction, and lifting and lowering time. The examples are a bench-press set and a moving cable-row stack; the two traces run in opposite signed directions relative to their starting position.

device to phone

The ESP32-C3 reads its ICM-42688-P at 100 Hz, marks each motion phase on the device and sends the phone a BLE notification every 100 ms: 234 frames and 8 counted reps in the bench-press set, from connect and tare to save. The load is entered in the phone; the sensor measures motion only.

data
sett (s)fromtoevent
BP-0420.00phonedeviceble connect
BP-0420.12devicephoneready
BP-0420.20phonedeviceset config
BP-0420.26phonedevicetare
BP-0421.00devicephonetare ok
BP-0421.15phonedevicestart set
BP-0421.20devicephoneset started
BP-0423.21devicephonerep 1 · 37.2 cm
BP-0425.76devicephonerep 2 · 38.0 cm
BP-0428.33devicephonerep 3 · 37.5 cm
BP-04210.93devicephonerep 4 · 36.5 cm
BP-04213.57devicephonerep 5 · 37.1 cm
BP-04216.29devicephonerep 6 · 35.7 cm
BP-04219.09devicephonerep 7 · 34.8 cm
BP-04221.98devicephonerep 8 · 35.5 cm
BP-04223.33devicephoneset ended
BP-04223.36phonedevicesave set
BP-04223.43phoneset saved
WS-0160.00phonedeviceble connect
WS-0160.12devicephoneready
WS-0160.20phonedeviceset config
WS-0160.26phonedevicetare
WS-0160.80devicephonetare ok
WS-0160.95phonedevicestart set
WS-0161.00devicephoneset started
WS-0163.23devicephonerep 1 · 43.4 cm
WS-0165.90devicephonerep 2 · 44.2 cm
WS-0168.66devicephonerep 3 · 43.8 cm
WS-01611.41devicephonerep 4 · 44.7 cm
WS-01614.23devicephonerep 5 · 43.1 cm
WS-01617.12devicephonerep 6 · 43.9 cm
WS-01620.05devicephonerep 7 · 42.6 cm
WS-01623.05devicephonerep 8 · 42.3 cm
WS-01626.11devicephonerep 9 · 41.8 cm
WS-01629.25devicephonerep 10 · 41.2 cm
WS-01630.70devicephoneset ended
WS-01630.73phonedevicesave set
WS-01630.80phoneset saved
the sensor measures motion; the phone keeps the set.

An IMU provides accelerometer and gyroscope readings, while the phone receives motion and rep events over BLE. The device interprets relative movement; the user enters the load separately, because the sensor never measures the weight being lifted.