T-01A用の加速度センサーを扱うDLLはだいぶまにTG01なんちゃら(名前忘れた。リンクはこちら)を作ったときの加速度操作クラスがあるから
割と簡単にデータ取得プログラムまで出来た。
ただ、何にもしないと、x,y,zの値を返してくるのでこれを1つに合成しないといけない。
これをしないで、たとえばz軸だけで処理すると、TG01をいつでも同じ向き、z軸なら水平、に保ったままで歩かないと、正しく歩数をカウントできないことになる。
それでは使えないプログラムになる。
まあ、合成した加速度の取得はわりと簡単でして、
3次元座標上で、原点と点P(x,y,z)の距離を求める、と考えれば、それがイコール加速度になるのです。
さて、加速度の計算が判ったところで、あとはサンプリングをどれくらいにするかという問題が残っています。
1秒間に5回加速度を取得した場合と倍の1秒間に10回取得した場合で試してみた
ところ、1秒間に5回では少々サンプリング数が足りないようで歩数を判断する材料に乏しい。
ではサンプリング数を倍に増やして1秒間に10回取得した場合はというと、これならなんとか判断できそうだ。
グラフにすると以下の様になった。
これは1秒間に2歩のスピードで歩いたときのデータで、3秒間分のデータを示している。
つまり、グラフの中で、歩数を6カウントできれば正解というわけだ。
グラフを眺めてみよう。周期的に加速度が増えているのがわかる。
これを見ると、閾値としては、一度1200mGを超え、また1000以下に戻ったなら1歩、と数えればうまくいきそうだ。
他にもデータの前後関係をみて、グラフの傾きで判定する、など色々方法はあるが、閾値を用いる方法がまずは簡単だろう。
早速実装してみよう。