[Arduinoのすすめ][ArduinoConf][ArduinoMonitor][iArduino]

フリースケールのアナログ3軸加速度センサMMA7361LCを使う

MMA7361LCは、フリースケール製の3軸の加速度センサです。電源電圧範囲は 2.2[V]〜3.6[V]です。3.3[V]動作のArduinoの場合には電源を共通にして使うことが出来ます。 ここでは、 ストロベリーリナックスのセンサモジュールを利用しています。 モジュールのピン配置は次のようになっています。

ピン番号名称
1X-OUT
2Y-OUT
3Z-OUT
4GND
5VDD
6~SLEEP
70G検出
8G-SEL(L:±1.5G, H:±6G)
以下では 1, 2, 3 ピンをそれぞれ Arduino の A0, A1, A2へつなぎ、 4ピンをGNDへ、5, 6ピンを3.3[V]へつないでいます。 加速度の測定範囲を±6Gにするなら、8ピンを3.3[V]へつなぎます。 出力インピーダンスが33[kΩ]と高いので正確な値を読むにはオペアンプを利用します。

スケッチ

以下のスケッチは読んだ値(そのままの値と単位を[G]に変換した値)をシリアルへ出力します。 Arduinoの電源が5[V]のとき(MMA7361LCは3.3[V])はAREFを5.0、OFFSETを307にします。 8ピンを3.3[V]につないだときには、SENSを0.206にします。 実際に使うにはセンサの傾きをキャンセルするため、setup関数で読んだ値を 基準(オフセット)にするとよいでしょう。

const float AREF   = 3.3;   /* 電源が5[V]のときは 5.0 */
const float SENS   = 0.800; /* ±6G のときは 0.206 */ 
const int   OFFSET = 512;   /* 電源が5[V]のときは 307 */

void setup() {
  Serial.begin(9600);
  while (!Serial) {}  
}

void loop() {
  int X, Y, Z;
  float x, y, z;

  X = analogRead(A0);
  Y = analogRead(A1);
  Z = analogRead(A2);
  
  x = (X-OFFSET);
  y = (Y-OFFSET);
  z = (Z-OFFSET);
  
  x = x / 1024.0 * AREF / SENS;
  y = y / 1024.0 * AREF / SENS;
  z = z / 1024.0 * AREF / SENS;
  
  Serial.print(X);
  Serial.print(" ");
  Serial.print(Y);
  Serial.print(" ");
  Serial.print(Z);
  Serial.print(" ");
  Serial.print(x);
  Serial.print(" ");
  Serial.print(y);
  Serial.print(" ");
  Serial.println(z);
  
  delay(100);
}

Arduinoのすすめ
Copyright (c) 2013, Noriaki Mitsunaga