マイコンで加速度の読み込み

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
クミコミクス

マイコンで加速度の読み込み

#1

投稿記事 by クミコミクス » 12年前

http://elinux.org/ECE497_Projecting_with_Sense
で紹介されている、demo.cをbeagleboard上でコンパイルしたのですがarduinoでの出力結果とだいぶ違っているのです。
これはどうしてでしょうか。
ゲインとかのせいでしょうか。
私の見る限り上のプログラムはゲインの調節とかが入っていないような感じがします。
arduinoのほうですが
この動画の右上の値が加速度計の値です。何も動かしていないときは1G以上になっていません。
[youtube][/youtube]
arduino用のプログラムhttps://github.com/jenschr/Arduino-libraries/blob/master/ADXL345/ADXL345.cpp

これがbeageboardで読み込んだ値なのですが。何も動かしていないのになぜか重力が1.6Gになってしまいます。xy軸も本来はもっと0に近いはずなのに変です。

コード:


X: 0.086106, Y: -0.046967, Z: 1.675147
X: 0.086106, Y: -0.046967, Z: 1.675147
X: 0.093933, Y: -0.046967, Z: 1.659491
X: 0.093933, Y: -0.046967, Z: 1.659491
X: 0.093933, Y: -0.046967, Z: 1.659491
X: 0.093933, Y: -0.046967, Z: 1.659491
X: 0.093933, Y: -0.046967, Z: 1.659491
X: 0.093933, Y: -0.046967, Z: 1.659491
X: 0.093933, Y: -0.046967, Z: 1.659491
X: 0.093933, Y: -0.046967, Z: 1.659491
X: 0.125245, Y: -0.039139, Z: 1.651663
X: 0.125245, Y: -0.039139, Z: 1.651663
X: 0.125245, Y: -0.039139, Z: 1.651663
X: 0.125245, Y: -0.039139, Z: 1.651663
X: 0.125245, Y: -0.039139, Z: 1.651663
X: 0.125245, Y: -0.039139, Z: 1.651663
X: 0.125245, Y: -0.039139, Z: 1.651663
X: 0.117417, Y: -0.070450, Z: 1.667319
X: 0.117417, Y: -0.070450, Z: 1.667319
X: 0.117417, Y: -0.070450, Z: 1.667319
X: 0.117417, Y: -0.070450, Z: 1.667319
X: 0.117417, Y: -0.070450, Z: 1.667319


アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: マイコンで加速度の読み込み

#2

投稿記事 by softya(ソフト屋) » 12年前

加速度センサに詳しいわけではないですが、同じ加速度センサなら接続をまず疑ってみてください。
ご自分でarduinoでも動作を確認されていますか?
あと、arduino用のプログラムの方はライブラリなので、これだけだと比較できないです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

クミコミクス

Re: マイコンで加速度の読み込み

#3

投稿記事 by クミコミクス » 12年前

私の方でも確認はできています。
接続のほうは問題なさそうです。

この種の問題を質問ができるサイトはどこかないでしょうか。
正直このことについても随分と悩みました。
日本語か英語のサイトであればいいのですが。。。

自分としてはdemo.cのサイトの方に載っている残りのcファイルが正しくないのではないかとも思っているのですがやはりここでは難しいのでしょうか。

クミコミクス

Re: マイコンで加速度の読み込み

#4

投稿記事 by クミコミクス » 12年前

私としては下記の部分が間違っているのではないかと思ています。

コード:

float convert_to_g(unsigned short raw){
        char negative = 0;
        float result;
        //Convert from twos complement
        if((raw >> 15) == 1){
                raw = ~raw + 1;
                negative = 1;
        }
        result = (float)raw;
        if(negative)
                result *= -1;
 
        //1FF is the maximum value of a 10-bit signed register
        result = (float)4 * (result/(0x1FF));
}
 
vec get_orientation() {
    char xyz[6];
    vec orientation;
   
    read_multibyte(REG_DATAX0, xyz, 6);
    orientation.x = convert_to_g(xyz[1] << 8 | xyz[0]);
    orientation.y = convert_to_g(xyz[3] << 8 | xyz[2]);
    orientation.z = convert_to_g(xyz[5] << 8 | xyz[4]);
   
    return orientation;
}

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: マイコンで加速度の読み込み

#5

投稿記事 by softya(ソフト屋) » 12年前

同じ機器で動作させている人が居ないと正確には答えられないと思います。
マイコンは、1つ1つ問題を潰していくしか無いでしょう。
ロジック・アナライザとか波形記録できるオシロとかでやりとりする信号調べると色んなことが分かるんですが。

> 私としては下記の部分が間違っているのではないかと思ています。

arduinoとbeagleboardでconvert_to_g前の値で比較してみれば分かるんではないでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る