2013/05/03

加速度センサーをArduino使って読み取ってみる

部の顧問の先生から、こんなモジュールを頂きました。


加速度センサ(ADXL345)と方位センサ(HMC5883L)とジャイロセンサ(ITG-3200)が一つの基板にまとめられたモジュールです。

ストロベリーリナックスで売られてました。
一個で一万円ぐらいします。

学生の自分にはなかなか手が出せませんね。


せっかく頂いたので、使ってみようじゃないかということで、使ってみました。


このモジュール、Arduinoを使えと言わんばかりに、Arduinoのシールドにはんだ付け済みでした。

手元にArduinoがあるので、これで動かしてみます。




今回は3つあるセンサのうちの一つ、加速度センサ「ADXL345」というセンサを使ってみます。
http://www.analog.com/static/imported-files/jp/data_sheets/ADXL345_jp.pdf




このセンサは、SPI通信か、I2C通信を用いて、通信をします。

センサは基板にはんだ付けされていて、このモジュールではI2C通信はできません。
そのため、I2C通信を使います。


ADXL345の使い方を簡単にまとめてみます。



・ADXL345を測定モードにする
POWER_CTL(0x2D)のD3をセット。


・測定レンジを変える
DATA_FORMAT(0x13)のD0,D1で測定レンジを変えられる。
D0 = 0, D1 = 0 : ±2g
D0 = 1, D1 = 0 : ±4g
D0 = 0, D1 = 1 : ±8g
D0 = 1, D1 = 1 : ±16g


・最大分解能モードにする
DATA_FORMAT(0x13)のD3をセット。


・サンプリング周波数を変える。
BW_RATE(0x2C)のD0:D3を変えることで、サンプリング周期を変えられる。


Rate (Hz)  Bandwidth (Hz)    Rate Code
3200         1600          1111
1600         800                    1110
800           400                    1101
400           200                    1100
200           100                    1011
100           50                     1010
50             25                     1001
25             12.5                   1000
12.5           6.25                   0111
6.25           3.13                   0110
3.13          1.56                    0101
1.56           0.78                   0100
0.78           0.39                   0011
0.39           0.20                   0010
0.20           0.10                   0001
0.10           0.05                   0000


・X,Y,Z方向の加速度を取得する。
0x32~0x37に、1軸につき2バイトずつ、データが格納されています。

データは2の補数で格納されています。

それぞれレジスタを読みだして、マスタ側で、加速度に変換してください。




他にもFIFOなど、機能がたくさんあるので、興味がある方はデータシートを参照してください。



それと、このセンサは、傾けても値が変化します。

前後左右に動かしても値が変化するので、平行移動で値が変化しているのか、回転したことで値が変化しているのかが分からなくなるので、どうすればいいのかを検討中です。

データシートを見た限りでは、傾きを検出しないようにする方法が分からなかったです。


加速度センサはどれもこういう感じなのかなぁ...?

ジャイロセンサがあるので、それで補正するようなことをしないといけないんですかね?
大変だなぁ...。

0 件のコメント:

コメントを投稿

記事の感想、意見などはこちらからどうぞ。

人気の投稿