An Android mobile app that measures vertical jump height using phone sensors (accelerometer + gyroscope).
It records each jump, shows detailed time-series charts, and estimates the mechanical work performed during take-off.
- Jump height measurement
- maximum height
h_maxfor each recorded jump
- maximum height
- Charts
- vertical acceleration
a(t) - vertical velocity
v(t) - height over time
h(t)
- vertical acceleration
- Work estimate
W = m · g · h_max(based on user-provided mass)
- Jump history
- save a jump under a chosen name and browse previous records
The core idea is to reconstruct the vertical motion of the jump from discrete sensor samples.
The accelerometer returns acceleration in the device coordinate system (x, y, z), which changes orientation while the person moves.
To obtain vertical acceleration, the app projects the measured acceleration onto the global vertical axis Z using the rotation matrix R (from a sensor fusion / gyroscope-based rotation estimate):
a_vert = a_x · R[6] + a_y · R[7] + a_z · R[8]
Here, R[6], R[7], R[8] correspond to the components describing the world Z axis orientation in the device frame.
Sensor data arrives in discrete time steps Δt, so velocity and height must be computed numerically.
The app uses Velocity Verlet (more stable than Euler, reduces drift from cumulative integration error):
h_{n+1} = h_n + v_n Δt + 1/2 · a_n (Δt)^2
v_{n+1} = v_n + (a_n + a_{n+1})/2 · Δt
The algorithm operates as a small real-time state machine:
-
Rest / Calibration
The app estimates accelerometer offset (sensor bias) and subtracts it from subsequent samples. -
Take-off
Recording starts when vertical acceleration exceeds an experimentally chosen threshold
(in our tests: 3.0 m/s²). -
Flight
Once airborne, the app assumes the only acceleration is gravity and ignores noisy sensor readings.
Integration usesg ≈ 9.81 m/s²until velocity reachesv = 0(apex). -
Landing
Detected by a strong acceleration spike (impact) together with negative velocity.
After landing, the app finalizes the jump and resets integration state.
Assuming kinetic energy is ~0 at the top of the jump, work is estimated from potential energy gain:
W = m · g · h_max
where m is the user’s mass (entered in the UI).
- Tap the green start button.
- The app starts a 5-second countdown so you can position the phone close to your body.
- After a beep, the jump measurement begins.
- The measurement stops automatically after landing.
- You can name the jump to store it in your history.
Tips for more stable results:
- keep the screen on during measurement,
- after the beep, wait ~1 second before take-off (helps stabilize sensor sampling).
- Tap My records to see saved jumps.
- Open a jump to view charts (
h(t),v(t),a(t)) and provide your mass to computeW.
- Sensor sampling frequency on many phones can be too low for consistently accurate results.
- Results may be overestimated, especially for jumps with very sharp acceleration peaks (fast take-off).
- Double integration amplifies noise and drift; the app mitigates this using:
- coordinate projection via rotation matrix,
- Velocity Verlet,
- a flight phase model using
ginstead of raw accelerometer values.
This is a measurement/estimation tool—not a calibrated lab instrument.
- Open the project in Android Studio
- Run on a physical Android device (sensor access required)
- Grant sensor permissions if requested