SSブログ

Arduino でジャイロセンサーを試してみた [Arduino]

Arduino でジャイロセンサーを試してみました。使用したジャイロセンサーは、STマイクロ社製の L3GD20 です。加速度センサーは直線方向の加速度を検出しますが、ジャイロセンサーは回転方向の速度(角速度)を検出します。


0_L3GD20.JPG
MEMS motion sensor: three-axis digital output gyroscope
http://www.pololu.com/file/0J563/L3GD20.pdf



今回使用する秋月モジュールのピン配は下記のようになっています。

1_l3gd20_explanation_of_each_pin.png
http://akizukidenshi.com/download/ds/akizuki/ae-l3gd20.pdf


秋月モジュールはI2CとSPIを選択できるようになっています。今回はI2Cで接続したいと思います。

2_l3gd20_explanation_of_I2C_setting.png

CSはGNDに接続しますので、デバイスアドレスはW/Rビットを除いた7bitなので、右に1ビットシフトした 0x6A になります。

Arduino UNO は 5V駆動で、ジャイロセンサーは3.3V駆動ですので、I2Cを接続するにはレベル変換回路を使う必要があります。

GYROI2C.png

実際に組んだ回路がこちらです。

DSC03904.jpg


位置関係が分かりにくいので斜めからのアングルです。

DSC03903.JPG


加速度センサー同様、使用する前にデバイスのパラメータを設定しなければなりません。データシートからコンフィギュレーションレジスタの設定を確認します。

6_CTRL_REG1_MAP.png


DR<1:0>、BW<1:0>の設定値はデータシートに次のように定義されています。

7_Table21.png


今回は試しに使うだけなので、DR<1:0>、BW<1:0>両方とも "00", "00" つまり、データ出力レート(ODR):95Hz、カットオフ周波数:12.5Hz に設定します。

スケッチは下記のようにプログラムしました。多くの部分で加速度センサーのスケッチを流用しています。


8_sketch.png


出力データを確認します。最初にZ方向(基板に対して左右に振る)、次にX方向(基板に対して手前に傾ける)、最後にY方向(基板に対して左右に傾ける)を試してみました。

9_result.png


角速度を検出しているみたいですね。加速度センサーと組み合わせれば、ロボットの状態を検出することができそうです。
(^_^)/~


関連記事
Arduino 3軸加速度センサーのI2C接続うまく行きましたー
http://makers-with-myson.blog.so-net.ne.jp/2014-03-16

Arduino 3軸加速度センサーで大ハマリ中。。
http://makers-with-myson.blog.so-net.ne.jp/2014-03-15

Arduino で3軸加速度センサーを試してみた!
http://makers-with-myson.blog.so-net.ne.jp/2014-03-08


※I2Cレベル変換回路を加えた図を差し替え・追加ました。(2016.4.9)





Arduinoをはじめようキット

Arduinoをはじめようキット

  • 出版社/メーカー: スイッチサイエンス
  • メディア: エレクトロニクス






L3G4200D ジャイロセンサーモジュール

L3G4200D ジャイロセンサーモジュール

  • 出版社/メーカー: 梅本有限責任事業組合
  • メディア: エレクトロニクス




nice!(27)  コメント(7)  トラックバック(0) 
共通テーマ:趣味・カルチャー

nice! 27

コメント 7

セブハワイ

大変参考にさせて頂いております。
非常にわかりやすく、ありがたいのですが、一点だけ質問させて下さい。
ジャイロは角速度センサではないでしょうか?
私の勘違いですいません。。
by セブハワイ (2014-11-06 10:19) 

こんにちは

大変参考になる記事ありがとうございます。
ジャイロのSCLとSDAのプルアップについて教えてください。

・Arduino UNOのアナログ入力・・・0~5V
・L3GD20のVdd・・・3.3V
両者の違いは考慮しなくてもよいのでしょうか?

<ご参考>少し調べたところ、このような記事がありました。
http://www.eleki-jack.com/FC/2013/12/i2c2.html
by こんにちは (2015-01-11 14:32) 

ys_oota

ご指摘ありがとうございます!確かにこれはレベル変換回路が必要ですね。下記のようなモジュールを間にかますべきでした。

http://akizukidenshi.com/catalog/g/gM-05452/
http://androciti.com/?pid=68727595

現場から遠のいているのがバレバレですね。お恥ずかしい。しかし、よく動いたなぁ。出てきた値を物理値に変換すると無茶苦茶な値が出てきそうです。近いうちに訂正記事を出さなくては・・・。
by ys_oota (2015-01-11 17:32) 

ys_oota

遅ればせながら記事修正対応いたしました。大変遅い対応となってしまい、お恥ずかしい限りです。( ̄▽ ̄;)
by ys_oota (2016-04-10 00:52) 

お名前(必須)

ご対応ありがとうございますm(_ _)m
by お名前(必須) (2016-04-10 18:58) 

無記名

質問失礼します。
I2Cバス用双方向電圧レベル変換モジュール(PCA9306)を使ってジャイロセンサーを代わりに使ってジャイロセンサーを使っている者です。
ジャイロセンサーの8 GNDに何も繋いでいないのはなぜでしょうか?
by 無記名 (2016-08-18 13:55) 

ys_oota

おお、これはご指摘ありがとうございます。これは、GNDにつなげるのが正しい接続ですね。

なんでサボったのか今となっては昔の自分が信じられませんが、これは配線を減らすために、4ピンのGND接続でGNDレベルが決まるので、4ピンをGNDとして代用してしてしまったというのが真相です。でもICの中で電位が保証されるわけではないので、GNDに接続するのが確実です。近日中に修正をしておきますね。
by ys_oota (2016-08-18 23:49) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0