Webアプリで加速度センサ

HTML5+JavaScriptで加速度センサのデータを取得する実験。
PCのブラウザで開いても何も起こらないが、スマホのブラウザで開くと 向き・加速度・角速度のデータが表示される。スマホでも角速度センサ(ジャイロ)を持たないでは角速度は表示されない。

  • z軸は画面から垂直上向き、x軸は画面左向き、y軸は画面上向き
  • 角度のα, β, γはおのおのz, x, y軸まわりの角度 (オイラー角)
  • 向きを検出するイベントは deviceorientationであり、単位はdeg ( °)
  • 加速度・角速度を検出するイベントは devicemotion
  • accelerationは重力加速度をのぞいた加速度であり、単位はm/s^2
  • accelerationIncludingGravityは重力加速度をふくんだ加速度であり、単位はm/s^2
  • rotationRateは角速度であり、単位はdeg/s
<!DOCTYPE html><html><head>
<meta charset="UTF-8">
<title>Sensor Test</title>
<meta name="viewport" content="width=device-width">
</head><body>

<h2>向き[deg]</h2>
<p>a: <span id="ori-a"></span></p>
<p>b: <span id="ori-b"></span></p>
<p>g: <span id="ori-g"></span></p>

<h2>加速度(重力加速度のぞく)[m/s^2]</h2>
<p>x: <span id="acc-x"></span></p>
<p>y: <span id="acc-y"></span></p>
<p>z: <span id="acc-z"></span></p>

<h2>加速度(重力加速度ふくむ)[m/s^2]</h2>
<p>x: <span id="accG-x"></span></p>
<p>y: <span id="accG-y"></span></p>
<p>z: <span id="accG-z"></span></p>

<h2>角速度[deg/s]</h2>
<p>a: <span id="rot-a"></span></p>
<p>b: <span id="rot-b"></span></p>
<p>g: <span id="rot-g"></span></p>

<script>
window.addEventListener("deviceorientation", function(e){
 document.getElementById("ori-a").innerHTML = e.alpha.toFixed(3);
 document.getElementById("ori-b").innerHTML = e.beta.toFixed(3);
 document.getElementById("ori-g").innerHTML = e.gamma.toFixed(3);
});

window.addEventListener("devicemotion", function(e){
  var acc = e.acceleration;
  var accG = e.accelerationIncludingGravity;
  var rot = e.rotationRate;
  document.getElementById("acc-x").innerHTML = acc.x.toFixed(3);
  document.getElementById("acc-y").innerHTML = acc.y.toFixed(3);
  document.getElementById("acc-z").innerHTML = acc.z.toFixed(3);
  document.getElementById("accG-x").innerHTML = accG.x.toFixed(3);
  document.getElementById("accG-y").innerHTML = accG.y.toFixed(3);
  document.getElementById("accG-z").innerHTML = accG.z.toFixed(3);
  document.getElementById("rot-a").innerHTML = rot.alpha.toFixed(3);
  document.getElementById("rot-b").innerHTML = rot.beta.toFixed(3);
  document.getElementById("rot-g").innerHTML = rot.gamma.toFixed(3);
});
</script></body></html>