Arduinoで加速度センサーを使ってみよう。

加速度センサー

アナログ出力3軸加速度センサー(約1000円)KXM52-1050を 使って加速度を読み取ります。上の写真の左端の真ん中で赤と黒のケーブルに埋もれ てしまっています。これを用いてボードが動き始める のを加速度として感知します。
このあいだ作ったバーコードリーダーと組み合わせて、 装置が動いたら、バーコードリーダーを作動させ、 読み取ったデーターをEtherNetを通じてWEBサーバーとなって公開します。 装置が静止していたらバーコードリーダーを休ませておきます。

この素子は、電源電圧を5Vとして、加速度 a m/s^2で加速すると、 Vout= a/g +2.5 (V) のアナログ出力が得られます。ここでgは 重力加速度(g = 9.8m/s^2)で2.5Vはセンサーの出力が常に正の 電圧になるようにするためのオフセット電圧です。
たとえば、素子のz軸を上向きにして静止させると、x方向とy方向の加速度は0 なのでVx=Vy=2.5Vの出力が、z方向には重力により Vz=3.5Vの出力がでます。
さらにこの素子をxが負の方向に5 m/s^2で加速すると、 Vx=-5/9.8+2.5=1.99V、Vy=2.5V、Vz=3.5Vの出力が得られます。
また、静止した状態でx軸を中心に30度傾けたとすると、重力 加速度がz軸のセンサーとy軸のセンサーの両方で測定されるので、 Vx=2.5V、Vy=sin(30°)+2.5V、Vz=cos(30°)+2.5となり、静止 していても姿勢が変化すると出力も変化します。
さて、この加速度センサーの電圧の変化ででボードの運動をモニター するわけですが、実際に使うときにボードの向きがどのように置かれ るかはわかりませんし、ボード必ず水平におく必要があったりするのは 面倒です。またオフセットの2.5Vも安定して変化しない保証は 余りないでしょうから、データの扱いにすこし工夫が必要です。 地球上で「静止」(正しくは「静止を含む等速度運動」) しているとは、「重力の大きさが一定で、向きも変わらない」という ことなのでセンサーの出力をxyz3次元のベクトルで扱い重力の 効果とオフセットの値を差し引く必要があります。


平均する個数をNdataとする。ここでは2のべき乗とすると、 たとえば、

実行結果

大体期待したように動きます。ボードの方向を変えると、 加速度の平均が重力の向きと一致するまで、しばらくは「加速度あり」 を示ていますが、そっと置いておくとすぐに「加速度なし」になり 正常に動いていることがわかります。また手でそっと持っていると 少しくらい動いていても「加速度なし」になります。 一方机の上にボードを おいて机を爪で軽くたたくと「加速度あり」 の判定が出て、撃力には敏感のようです。 上記のコードの例で、新しい測定値も何度かの 平均をとることによりこの点はチューニング可能でしょう。