M5Stack 3軸加速度センサーユニット

概要

日本未発売のユニットである3軸加速度センサーを使ってみました。

(追記)国内販売されました

商品

上記の商品です。300円弱(2.5ドル)で購入できるのですが、なぜか日本では販売されていません。まあ、加速度内蔵しているコアが多いですもんね。

UIFlowでの使い方

ユニットでACCELを追加することで利用することができます。取得できるのは3軸なのでX軸加速度とY軸加速度とZ軸加速度のデータです。

実行してみたところ、間違って10倍されているデータが表示されている気がします。静止状態で9前後のデータになっていました。

Arduinoでの使い方

#include <Wire.h>
#include <ADXL345.h>

ADXL345 accel(ADXL345_ALT);

void setup() {
  Serial.begin(115200);
  delay(1000);
  Serial.println("ACCEL UNIT");
  //Wire.begin(32, 33); // M5StickC
  Wire.begin(26, 32); // M5ATOM

  byte deviceID = accel.readDeviceID();
  if (deviceID != 0) {
    Serial.print("0x");
    Serial.print(deviceID, HEX);
    Serial.println("");
  } else {
    Serial.println("read device id: failed");
    while (1) {
      delay(100);
    }
  }

  // Data Rate
  // - ADXL345_RATE_3200HZ: 3200 Hz
  // - ADXL345_RATE_1600HZ: 1600 Hz
  // - ADXL345_RATE_800HZ:  800 Hz
  // - ADXL345_RATE_400HZ:  400 Hz
  // - ADXL345_RATE_200HZ:  200 Hz
  // - ADXL345_RATE_100HZ:  100 Hz
  // - ADXL345_RATE_50HZ:   50 Hz
  // - ADXL345_RATE_25HZ:   25 Hz
  // - ...
  if (!accel.writeRate(ADXL345_RATE_200HZ)) {
    Serial.println("write rate: failed");
    while (1) {
      delay(100);
    }
  }

  // Data Range
  // - ADXL345_RANGE_2G: +-2 g
  // - ADXL345_RANGE_4G: +-4 g
  // - ADXL345_RANGE_8G: +-8 g
  // - ADXL345_RANGE_16G: +-16 g
  if (!accel.writeRange(ADXL345_RANGE_16G)) {
    Serial.println("write range: failed");
    while (1) {
      delay(100);
    }
  }

  if (!accel.start()) {
    Serial.println("start: failed");
    while (1) {
      delay(100);
    }
  }
}

void loop() {
  if (accel.update()) {
    Serial.print(accel.getX());
    Serial.print(",");
    Serial.print(accel.getY());
    Serial.print(",");
    Serial.print(accel.getZ());
    Serial.println("");
  } else {
    Serial.println("update failed");
    while (1) {
      delay(100);
    }
  }
  delay(10);
}

M5StickCのUnitの中にはサンプルはありません。M5Stackには入っていましたが今回はライブラリ標準のスケッチ例を元にしてみました。

ADXL345でライブラリを検索すると複数でてきますが、M5Stackでも利用していたHideki Hamadaさんのライブラリを使わせていただきました。

#define ADXL345_STD     0x1D    // Standard address if SDO/ALT ADDRESS is HIGH.
#define ADXL345_ALT     0x53    // Alternate address if SDO/ALT ADDRESS is LOW.

定義をみると、このセンサーは2つのアドレスを指定できます。M5Stackのユニットでは標準の0x1Dではなく、0x53で動いていますのでADXL345_ALTを定義で設定してあります。

ADXL345 accel(ADXL345_ALT);

あとはI2Cの初期化時に利用するピンを指定してあります。

実行したところ、上記のようなデータが取れました。

まとめ

加速度センサーとしては、実際のところ本体に内蔵しているコアを利用したほうがいいと思うのですが、外部入力の衝撃センサーとして離れた場所に設置する用途であれば便利に使えると思います。

Seeed社で同じセンサーを内蔵しているのは9.9ドルと4倍近いので、このユニットは非常にお手軽に使えると思います。

コメントする

メールアドレスが公開されることはありません。

管理者承認後にページに追加されます。公開されたくない相談はその旨本文に記載するかTwitterなどでDM投げてください。またスパム対策として、日本語が含まれない投稿は無視されますのでご注意ください。