Friday, August 29, 2014

Arduino Uno Rev. 3 + Akizuki modules: LIS3DH (accelerometer) L3GD20 (Gyroscope)

秋葉原の秋月でArduinoを買いました。

合せてSTのチップを使ったセンサーモジュールのLIS3DH (accelerometer) L3GD20 (Gyroscope)もゲットしました。 

秋月のLIS3DH同封説明書には、12ビットデーターとあるが、STのデーターシートにはデーター出力は16ビットとあることからして少々不安。確かに感度とレンジを見ると符号込みで12ビットの有効数字のようで、読み出しが16ビットに収まるということのようですね。 

ArduinoのC++では「int」が16 bit signed integer と気付くのに時間がかかるなど、少々手間取りましたが、データーシートとApplication notesを読みながら何とかこれらセンサーをSPI 経由で同時接続して何とかデーターを取り込むことができたので、ここに置いておきます。

以下のコード部分で文字化けしました。またFET内蔵保護ダイオードの向きが逆でした。うまく編集できないので、ここにコメントしておきます。

1: VDD
  2: SPC <= SCK (D13) (P19)
  3: SDI <= MOSI(D11) (P17)
  4: SDO => MISO(D12) (P18)
  5: CS  <=     (D9)  (P15)

  ST L3GD20 3-axis gyroscope pins: (larger 14 pins)
  1: VDD
  2,10,14: GND
  3: SPC <= SCK (D13) (P19)
  4: SDI <= MOSI(D11) (P17)
  5: SDO => MISO(D12) (P18)
  6: CS  <=     (D10) (P16)

このおもちゃ、飽きるまで当分遊べそうです。

プログラムここにはって置いたのでは使いにくいので、GITHUBに置きました。

https://github.com/osamuaoki/avrdude-friend


本設定はAVRDUDEに組み込まれました。「-c uncompatino」で呼び出してください。

5V-3,3Vのレベルシフト回路ですが、Gを3.3Vのみに接続と修正済としたアスキーアートを残します。

Both sensors runs under 3.3V.  These are connected to Arduino via FET gate follower V-converter circuits. Bidirectional level shift was done with the following for all I/O with Arduino/Sensors.

                           2N7002K
  3.3V     o------+-----------+          +-------o 5V
                  |           |          |
         10 Kohm  Z         =====        Z  10 Kohm
                  Z       S | ^ | D      Z
                  |         | | |        |
  Sig 3.3V o------+------+--+-+ +--+-----+-------o Sig 5V
                         |         |
                         +---|<|---+ 
                  (Internal diode of 2N7002K)