Capture plan
{{ settings.duration }} s check

Check browser-reported tilt, heading and motion. Keep the phone secure while moving it gently.

Local onlyNo hardware diagnosis

Synthetic example — not a hardware measurement

{{ stageText }}
Right {{ levelReady?number(values.level.x)+'°':'—' }}Top {{ levelReady?number(values.level.y)+'°':'—' }}Heading {{ values.compass.status==='Received'?number(values.compass.heading,1)+'°':'—' }}

{{ state==='running'?'Capture active.':stageText }}

Phone sensor capture settings
Start requests access only where the browser offers a permission method. New Start replaces the previous capture. Changes apply to the next capture. Acceleration axes follow natural device orientation; the level follows the screen. Rotation-rate labels preserve API members; documentation and browsers disagree on physical-axis mapping. User zero is relative, and heading has no true-North correction.
{{ environment }}. Orientation access: {{ orientationAccess }}. Motion access: {{ motionAccess }}.{{ session.reason }}{{ notice }}
Choose which received motion channels to inspect. This changes the trace and its exports without altering recorded samples.

{{ exportStatus }}

Channel / sourceValueUnitStatusCopy
{{ r.channel }}{{ sourceLabel(r.source) }}{{ number(r.value) }}{{ r.unit }}{{ r.status }}

{{ exportStatus }}

No numeric {{ signal.label.toLowerCase() }} samples were received.

Trace renderer unavailable. Received samples remain available.

{{ exportStatus }}

Time (ms)Event / channelValueUnitReferenceScreen (deg)Copy
{{ number(r.time_ms,1) }}{{ r.source }} / {{ r.channel }}{{ number(r.value) }}{{ r.unit }}{{ r.reference }}{{ number(r.screen_angle) }}
No received samples.

{{ exportStatus }}

{{ values.report }}

Similar tools

A phone held at an angle can be perfectly still. Its tilt can remain nonzero while its rotation rate settles near zero, and its acceleration reading may still include gravity. These observations describe different aspects of the same position and movement. Understanding the difference helps when checking a motion-controlled website, investigating readings that seem stuck, or comparing how browsers respond to the same gentle movement.

Orientation
Angles describe how the device is turned relative to a reference. They are measured in degrees and can remain steady while the phone is held in one position.
Rotation rate
Rotation rate measures how quickly the device is turning, in degrees per second. Its sign distinguishes opposite directions of rotation.
Acceleration without gravity
This describes changes in velocity with the gravity contribution removed, in metres per second squared (m/s²). A supported, stationary phone would ideally report values near zero.
Acceleration including gravity
This retains the gravity contribution. Its combined magnitude on a supported, stationary phone is generally nonzero, even when the phone is not moving.

A browser receives processed observations that may combine information from several sensors. It does not provide an inventory of installed hardware. Missing data can reflect access settings, browser support or an unavailable channel, so an absent reading alone cannot identify a broken sensor. Numeric zero has a different meaning: the browser supplied a value of zero for that channel.

Directions also need a reference. Acceleration uses axes attached to the device in its natural orientation, with x pointing right, y toward the top and z out through the display. Rotating the displayed screen from portrait to landscape does not rename those axes. A level that follows the displayed screen must account for that rotation before describing a lean toward screen-right or screen-top.

Natural device axes on a phone viewed from the front: x points right, y points toward the top, and the circled dot marks z pointing out toward the viewer.
Natural device axes, illustrated with a portrait-natural phone. These acceleration axes stay attached to the device when the displayed screen rotates.

A relative level measures a change from a chosen starting pose. Zeroing on a sloping surface makes subsequent readings relative to that slope without establishing a horizontal surface or correcting sensor errors. For comparisons, the reference pose and screen orientation matter as much as the displayed number.

Compass direction needs an additional reference to North. Relative orientation can track turning from an arbitrary starting direction, but that starting direction does not establish North. A magnetic heading refers to magnetic North, which differs from geographic true North, and nearby magnetic interference can affect it. Browser observations can help check responsiveness and document a comparison; they cannot certify physical accuracy or replace calibrated instruments for surveying, navigation or safety measurements.

How to Use This Tool:

Open the page on a phone or tablet in a secure HTTPS browser context and keep the device secure while moving it. Save a capture you want to keep before starting another.

  1. Choose a Capture window of 10, 30, 60 or 120 seconds. The default is 30 seconds. Starting fixes the duration for that capture; later duration changes apply to the next one.
  2. Press Start sensors and respond to any permission requests. Orientation and motion access are checked separately, so one may remain usable when the other is denied or absent.
    If access is denied or no usable values arrive, check the displayed access messages and browser/site permission settings. Once capture has stopped, press Start sensors again. An absent sensor interface requires a browser or device that provides it. Browser managed; no request method does not confirm that readings are available.
  3. Move the phone gently and watch the live Right, Top and Heading values. Pause in one position to distinguish a held angle from ongoing rotation. A missing heading does not prevent other channels from being recorded.
  4. Press Set level zero during a capture if you want to compare tilt with the current pose. It is available only while the level has a usable current reading. Clear zero restores the screen-up-flat reference.
  5. Press Stop or let the capture finish. Keep the tab visible and the window focused while recording; hiding the tab or losing focus ends recording and requires another deliberate Start. Retained result tabs appear after recording ends.
  6. Inspect Sensor readings with their units, sources and statuses. Keep Received samples and the Session record together when saving a comparison. Repeat with the same browser, screen orientation, level reference and movement when you want comparable observations.

Interpreting Results:

Read a value together with its source and status. Received marks a numeric result backed by a recent observation; it is not a hardware pass. In Sensor readings, a dash with Not reported means a required value is missing. Zero remains a valid observation. Stale marks an older observation. Live values show dashes when stale, and Right and Top also show dashes when total tilt exceeds 90° from screen-up flat. After capture stops, statuses describe freshness at the end of the capture.

With the screen-up-flat reference, a positive Right angle means the right edge is higher than the left, and a positive Top angle means the top edge is higher than the bottom. After setting a relative zero, those signs describe changes from the saved inclination. A centred bubble therefore needs its reference checked before it is interpreted as horizontal.

  • Sensor readings shows the latest channel values and derived results with their sources, units and statuses. These are snapshots, not averages over the whole capture. Missing components in the latest observation are not filled from an earlier one.
  • Motion trace plots one motion group against elapsed milliseconds. In Advanced, Trace signal selects rotation rate, acceleration without gravity or acceleration including gravity. Rotation rate is the default. Changing the selection changes the trace and its exports without changing the recorded samples.
  • Received samples preserves the received channel values, including missing entries, alongside arrival time, source, units, reference and screen angle. A single received event produces several channel rows, so the row count can exceed the event count.
  • Session record retains the capture's end reason, chosen duration, elapsed time, event count, access outcomes and coordinate references together with the latest readings.

Both tables support individual row copying, CSV copying or downloading, and DOCX export. CSV keeps unrounded numeric values and leaves missing values empty; DOCX presents the formatted table. The trace can be saved as PNG, WebP, JPEG or CSV, and the session record can be copied or downloaded as plain text. Save exports after recording ends.

A trace needs at least one numeric value in its selected group, and missing values remain gaps. A group with no numeric samples has no trace to export. If trace drawing fails, Retry trace is available and Received samples remains usable. Any result marked as a synthetic example represents supplied values rather than measurements from a physical phone.

Technical Details:

Orientation angles describe successive rotations. The convention is intrinsic Z–X′–Y″: α rotates about the initial z axis, β about the resulting x axis, and γ about the resulting y axis. The later axes move with the earlier rotations. Consequently, the three orientation angles are not interchangeable with independent screen inclinations or with angular rates.

Formula Core: screen-aware level

Level comes from the direction of upward vertical expressed in the device's coordinates. Let β and γ be the reported orientation angles converted to radians by multiplying degrees by π/180. The dimensionless components of that upward direction are dx, dy and dz. Turning about vertical changes α but does not change this projection.

dx=−cos⁡β⁢sin⁡γ dy=sin⁡β dz=cos⁡β⁢cos⁡γ

Screen rotation changes which direction appears as right or top. Let θ be the screen's counterclockwise rotation from its natural orientation, also in radians. The corresponding screen components sx and sy are:

sx=dx⁢cos⁡θ+dy⁢sin⁡θ sy=−dx⁢sin⁡θ+dy⁢cos⁡θ

The screen-right inclination R and screen-top inclination T follow from these components. Total tilt τ measures departure from screen-up flat. The factor 180/π converts the inverse-trigonometric results back to degrees.

R=arcsin⁡(sx)×180π T=arcsin⁡(sy)×180π τ=arccos⁡(dz)×180π

Inverse-trigonometric arguments are limited to −1 through 1 to absorb numerical round-off. All level results require valid β and γ plus a known screen angle. An unknown screen angle leaves the level unavailable instead of assuming portrait. Total tilt spans 0° to 180°; the live bubble and its directional values require a current reading with total tilt no greater than 90°. An upside-down phone can have nearly zero directional components while its total tilt is 180°, so it is not shown as level-ready.

For β = 30°, γ = 0° and screen angle 0°, upward vertical has components 0, 0.5 and approximately 0.8660. The resulting screen-right angle is 0°, screen-top angle is 30° and total tilt is 30°. With screen angle 90°, the same observation becomes screen-right 30° and screen-top 0°, while total tilt remains 30°. The bubble reaches its visual limit at ±20° per direction; the numeric angles retain their values beyond that limit.

Relative zero

A user zero subtracts saved component angles R0 and T0, measured in degrees, from the current component angles. These angle offsets support comparison without calibrating the sensors.

Rrelative=R−R0 Trelative=T−T0

The saved reference applies only to the same screen angle and clears when the screen rotates or a new capture starts. Raw orientation, acceleration, rotation rate, heading and total tilt from screen-up flat retain their original meaning. For example, zeroing a 30° screen-top inclination makes that pose display 0° relative tilt while total tilt remains 30°.

Acceleration magnitude and angular rate

Each acceleration group has its own magnitude A, calculated from its three components ax, ay and az. Components and magnitude all use m/s². The gravity-including and gravity-excluding groups remain separate; neither missing vector is reconstructed from the other.

A=ax2+ay2+az2

All three components must be finite numbers. Components of 3, 4 and 0 m/s² give a magnitude of 5 m/s² because their squared sum is 25. Components of 0, 0 and 0 give a valid zero magnitude, but 0, 0 and a missing component leave the magnitude unavailable. Missing data are never assumed to be zero.

The observed angular-rate channels retain their browser labels rotationRate.alpha, rotationRate.beta and rotationRate.gamma, in deg/s. Published sources disagree about how these names map to physical axes, so no portable x/y/z assignment is inferred from them. This does not change the separate orientation-angle convention or the natural-device acceleration axes.

Heading qualification

A heading needs a qualified North reference. The latest observation from each orientation source is considered separately, with the newest eligible source supplying the result. Within one observation, a usable vendor heading takes precedence over an absolute-angle calculation. An older qualifying observation from the same source is not revived when its latest observation is unqualified.

Heading sources, qualification rules and reference meanings
Heading sourceRequired conditionsMeaning
Vendor headingA finite heading from 0° up to 360° excluding 360°, with accuracy either unreported or nonnegative.The supplied magnetic heading. No near-flat restriction is added to this branch.
Absolute orientationExplicitly absolute orientation, valid α, β and γ, and total tilt within 10° of screen-up flat.Heading calculated from α using the browser's absolute North reference.
Relative α aloneNo qualified vendor heading.No North heading can be established.

For the absolute branch, α remains in degrees and H is the heading in degrees, wrapped into the interval from 0° up to 360° excluding 360°:

H=(360−α)mod360

An absolute α of 90° with a flat phone gives a heading of 270°. The same relative α supplies no North heading. A total tilt of 10° qualifies for the absolute calculation; 10.1° does not. The comparison includes a numerical allowance of 10−9 degrees to preserve the intended boundary despite floating-point round-off. This is a calculation tolerance, not a sensor accuracy claim.

A negative vendor accuracy rejects that vendor heading. Missing accuracy is allowed, and there is no maximum accepted positive accuracy value, so acceptance does not certify a small error. If the vendor branch fails, a separately qualifying absolute calculation can still supply the result. Heading refers to the natural device top rather than the rotated screen top, and no correction from magnetic to geographic true North is applied.

Validity, freshness and timing

Orientation angles have bounded domains. Missing, nonfinite or out-of-domain observations remain unavailable rather than becoming zero or being silently wrapped into a valid angle.

Orientation angle domains in degrees with inclusive lower and exclusive upper bounds
Orientation angleLower bound, includedUpper bound, excluded
α0°360°
β−180°180°
γ−90°90°

Incoming α and vendor-heading values above 359.999999999° are treated as missing. Level uses the latest orientation observation, while acceleration and angular-rate readings use the latest motion observation. Each group has its own age; heading uses the age of its selected source. A valid numeric reading aged at most 2,000 ms is Received, including exactly 2,000 ms. Older values are Stale. A missing value remains Not reported regardless of age.

Capture time begins when recording starts after the permission requests finish. Every received event is retained until capture ends, subject to a shared limit of 1,200 events across orientation and motion. Reaching that limit stops recording even if the chosen capture window has time remaining. After at least five seconds, recording ends as unavailable if no numeric orientation, angular-rate, acceleration or vendor-heading value has arrived. Receiving only missing channel values does not prevent that termination; a reported interval or screen angle alone is insufficient.

Live results are published every 250 ms, while recorded times preserve each event's arrival time relative to acquisition start. That publication interval does not measure the physical sensor's sampling frequency. The reported motion interval is also browser information, not an independently measured hardware rate. Trace points use their actual elapsed times, with gaps left between missing values rather than interpolated replacements.

Calculations retain available numeric precision until presentation. Most displayed readings are rounded to two decimal places, with a trailing .00 omitted; sample times and the live heading use one decimal place. More displayed digits do not establish better physical accuracy. Browser processing, rounding, delivery frequency and magnetic conditions can all limit comparisons between devices or browsers.

Privacy Notes:

Sensor observations remain in the current tab's memory unless you explicitly copy or download them. The capture does not upload observations or keep a stored sensor history. Only the capture-duration and trace preferences enter the URL; a link does not contain readings, permission outcomes or the relative zero.

  • A new Start replaces the previous capture and clears its relative zero. Reloading or leaving the page loses unsaved observations.
  • A permission response received after capture stops cannot restart recording.
  • Exports use the stopped capture. Pending exports from an older capture are cancelled when a new Start replaces it or the tool is left. Changing the trace selection or level reference also cancels an export that is no longer current.

References: