Inspiration
Commercial vertical jump measurement tools — the Vertec and similar systems — cost hundreds of dollars and require a spotter. Jump mats and force plates run even higher. I wanted to build a self-contained, sub-$20 system that an athlete could set up alone, with no external equipment, and get an accurate result in seconds. The goal was to prove that a VL53L0X time-of-flight sensor and an Arduino could replace an expensive piece of athletic equipment.
What it does
JumpMetrics detects when an athlete leaves and re-enters the detection zone of a ground-mounted VL53L0X sensor and uses the measured airtime to calculate vertical jump height. The result — height in inches and airtime in seconds — is displayed instantly on an LCD. Two status LEDs guide the user through a five-stage state machine: Idle → Waiting → Ready → In Air → Result. No calibration is required from the user; the system self-initializes and prompts through the measurement cycle at the press of a button.
How we built it
The system is built around an Arduino Uno, a VL53L0X time-of-flight sensor, a 16×2 LCD, and two indicator LEDs. The VL53L0X is mounted 610 mm (2 feet) off the ground and aimed parallel to the floor. A five-state machine controls system flow. The sensor polls ranging data every 20 ms; a STABLE_COUNT of 3 consecutive valid readings is required before any state transition fires — this acts as a hardware debounce to prevent noise from triggering false positives. The height calculation derives directly from free-fall kinematics. If total airtime is t, the athlete spends t/2 seconds rising and t/2 seconds falling. Setting velocity to zero at peak height and solving h = ½ × g × (t/2)² simplifies to h = g × t² / 8. In code: h = (G * t * t) / 8.0 * M_TO_IN, where G = 9.81 m/s² and M_TO_IN = 39.3701 converts meters to inches. Jumps under 120 ms of airtime are rejected as noise. A 1000 µF electrolytic capacitor was added between the 5V and GND rails to suppress power fluctuations causing LCD and LED flicker during sensor polling.
Challenges we ran into
The most significant challenge was sensor orientation. The VL53L0X ships with vertical pin headers, meaning the laser fires perpendicular to the PCB — pointing upward by default, not horizontally. Getting the beam parallel to the floor required rotating the board 90 degrees and fabricating a mount from female-to-male jumper wires and a mini breadboard. A subtler problem was false-positive detection: early testing showed the system triggering a jump when the user bent down to press the button. Adding the MIN_AIRTIME_MS = 120 threshold filters these out — any event shorter than 120 ms is discarded before the height calculation runs.
Accomplishments that we're proud of
The system produces results consistent with the kinematic model across repeated trials. An airtime of 0.50 seconds yields a calculated height of 12.3 inches; 0.70 seconds yields 24.1 inches — both matching the expected physics. The state machine transitions reliably, and the capacitor fix eliminated all display flicker without any software changes.
What we learned
Sensor geometry is not an afterthought. The VL53L0X emission cone angle means that if the beam isn't oriented correctly relative to the target, nothing else about the design works. The second takeaway is the value of a stability filter — raw sensor output has enough noise that a single-reading state transition makes the system unusable. Requiring three consecutive consistent readings before committing to a state change was the fix that made the system actually reliable.
What's next for JumpMetrics
The immediate hardware improvement is a 3D-printed bracket with 90-degree pin headers to replace the current jumper-wire mount. For software, the next step is replacing the button-initiated flow with an ESP32 variant using wireless triggering — so athletes can start a measurement without bending down and disturbing their position. Longer term, adding a session log over Bluetooth would let coaches track jump performance across training sets.
Log in or sign up for Devpost to join the conversation.