![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
加速度センサ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);
}
このようにしてミニ四駆に加速度センサを取り付けましたが、速度は誤差が多くうまくとれませんでした。
どのようにすれば移動中の物体速度を抽出できるのでしょうか。
A 回答 (11件中11~11件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
どのようなコンパイラを使用されているのかは分かりませんが、まず、
double v =0;
は
while(true){
の外で宣言したほうがよろしいかと。
それと、センサーの誤差、0.1単位でのサンプリングによる量子化誤差も考慮しなければなりません。
0.1の単位が秒ですと粗すぎるように思えます。せめて10msec間隔で測定すべきかと。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 物理学 一般相対論の時空は何処から来ましたか? 1 2022/10/20 20:29
- 物理学 アインシュタインのアッカンベー相対論信者の洗脳を解くにはどうしたら? 5 2022/10/17 07:16
- 工学 都市ガスの燃焼速度 3 2022/08/03 12:59
- 飛行機・空港 電動のネッククーラーは空港の検査に通せますか? 3 2023/06/25 19:31
- その他(ネットショッピング・通販・ECサイト) 骨伝導ヘッドセットで この二つは値段が違うだけでは同じですか? 1 2023/02/13 19:13
- 物理学 ニュートン力学を光に適用することはできません? 1 2022/11/21 22:34
- FTTH・光回線 皆さんのインターネット回線速度はどれくらいですか? 6 2022/10/29 23:13
- 物理学 超音速旅客機の燃費について質問です 1 2022/12/27 17:31
- 船舶・クルーズ Windows10のエクスプローラにて。 1 2022/10/10 20:11
- 経済 国債をどんどん発行して、国家予算に充てれば良いという考え方が提唱されてますが…… 5 2022/10/09 19:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PS4コントローラーをPCでゲーム...
-
プログラムについての質問です...
-
4Kの外部モニターに出力すると...
-
ACCESS クエリ→フォーム...
-
ListViewの複数選択について
-
MMDでavi出力が出来ない
-
printfとputcharの違いは
-
ACCESSからExcelへエクスポート...
-
コンセントの電力は入力と出力...
-
【UWSC】WEBページ中の特定文字...
-
C#について質問【足し算】
-
cout と cerrの違い
-
OBS配信すると、マイクが途切れ...
-
VBAで出力したCSVファイルの先...
-
テキストファイルから特定の文...
-
エクセルで英字と数字を組み合...
-
c言語でグラフをつくる
-
PowerShellのスクリプトでイベ...
-
フォートランで出力をタブ区切...
-
C#でアクセス権限の取得方法が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PS4コントローラーをPCでゲーム...
-
4Kの外部モニターに出力すると...
-
プログラムについての質問です...
-
printfとputcharの違いは
-
cout と cerrの違い
-
COBOLのMOVEで桁数が異なる場合
-
テキストファイルから特定の文...
-
MMDでavi出力が出来ない
-
コンセントの電力は入力と出力...
-
アクセスでエクセルに出力する...
-
OBS配信すると、マイクが途切れ...
-
coutで出力した文字を消去する...
-
CRC16計算について
-
VBA レジストリの値の読み方に...
-
ACCESS クエリ→フォーム...
-
printfの書式%.*s
-
VBAで有効数字の設定
-
VBAでテキスト出力時のスペース...
-
VBAのExecメソッドで画面を非表...
-
makeで文字化けする。migwのmak...
おすすめ情報
回答ありがとうございます。
double v =0; をwhileの外に出してしまうと、速度値が常に足しあわされてしまいます。どのようにすればよいのでしょうか。
Y軸の加速度0の時は0と表示されます。(平らの床に加速度センサを置いた場合)
Y軸上に90度傾けると256と表示されます。
128とはどういうことでしょうか。
また、Whileの外に出してしまうと常に足しあわされるため、加速度センサを動かさなくても値が足しあわされてしまいます。
アドバイスしていただき有難うございます。
加速度センサは水平である物体に設置します。
物体はX軸上を動きますので、この時の速度を加速度センサで抽出したいと考えています。
どのようにすれば速度が抽出出来るのでしょうか。加速度が取れているので時間で積分すれば出るはずなのですが、うまくいかず。
よろしくお願い致します。
以下のようなプログラム修正にしました。
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);
}
}
こちらで宜しいでしょうか。
なお、readingsはintで宣言しています。
実は加速度センサの値が安定しない為、 a += (0.11111)*(as-a);でLPFを掛けているのですが物体を動かさずに値が足されてしまうのはLPFが原因なのでしょうか。
なお、*=とはどういうプログラムなのでしょうか。