電子書籍の厳選無料作品が豊富!

加速度センサADXL345、mbedを用いた速度計測を行いたいのですが、うまくいきません。
下記サイトを参考に加速度センサから値を抽出しました。加速度センサ静止時、Z軸は256を出力していた為、プログラミングより9.8を出力するようにしました。
https://developer.mbed.org/users/suupen/notebook …

その後、加速度センサをY軸上に動かした時の速度を計測する為、加速度を積分するプログラムを作成しました。
プログラミング一部

while(true){
double as =0;
double a =0;
double v =0;
accelerometer.getOutput(readings);
as = (int16_t)readings[1]*(9.8/256); //加速度センサY軸からの値256を9.8にする
v += as*0.1*1000; //加速度センサY軸からの値を時間で積分
printf("%0.1f[ms]\r\n",v);
wait(0.1);
}

このようにしてミニ四駆に加速度センサを取り付けましたが、速度は誤差が多くうまくとれませんでした。
どのようにすれば移動中の物体速度を抽出できるのでしょうか。

質問者からの補足コメント

  • 回答ありがとうございます。
    double v =0; をwhileの外に出してしまうと、速度値が常に足しあわされてしまいます。どのようにすればよいのでしょうか。

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/10/04 14:45
  • Y軸の加速度0の時は0と表示されます。(平らの床に加速度センサを置いた場合)
    Y軸上に90度傾けると256と表示されます。
    128とはどういうことでしょうか。

    また、Whileの外に出してしまうと常に足しあわされるため、加速度センサを動かさなくても値が足しあわされてしまいます。

    No.3の回答に寄せられた補足コメントです。 補足日時:2015/10/04 16:36
  • アドバイスしていただき有難うございます。
    加速度センサは水平である物体に設置します。
    物体はX軸上を動きますので、この時の速度を加速度センサで抽出したいと考えています。
    どのようにすれば速度が抽出出来るのでしょうか。加速度が取れているので時間で積分すれば出るはずなのですが、うまくいかず。

    よろしくお願い致します。

    No.4の回答に寄せられた補足コメントです。 補足日時:2015/10/04 17:29
  • 以下のようなプログラム修正にしました。
    int main()
    {
     ~省略~
    int readings[3] = {0, 0, 0};
    double v =0;
    while(true){
    double as =0;
    double a =0;
    accelerometer.getOutput(readings);
      as = readings[1]
    as *= 9.8/256;
    a += (0.11111)*(as-a);
    v += a*0.01*1000;
    printf("%0.1f[ms]\r\n",v);
    wait(0.01);
    }
    }
    こちらで宜しいでしょうか。

      補足日時:2015/10/04 23:44
  • なお、readingsはintで宣言しています。
    実は加速度センサの値が安定しない為、 a += (0.11111)*(as-a);でLPFを掛けているのですが物体を動かさずに値が足されてしまうのはLPFが原因なのでしょうか。

    No.6の回答に寄せられた補足コメントです。 補足日時:2015/10/04 23:45
  • なお、*=とはどういうプログラムなのでしょうか。

      補足日時:2015/10/04 23:49

A 回答 (11件中11~11件)

どのようなコンパイラを使用されているのかは分かりませんが、まず、


double v =0;

while(true){
の外で宣言したほうがよろしいかと。
それと、センサーの誤差、0.1単位でのサンプリングによる量子化誤差も考慮しなければなりません。
0.1の単位が秒ですと粗すぎるように思えます。せめて10msec間隔で測定すべきかと。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!