3軸加速度センサー(ADXL345)の使い方 - SPI版 [Arduino]
XYZの3軸の加速度(m/s2)を取得できる「ADXL345」の使い方です。
 
最大分解能モード/±16gの実行結果
 
※プログラム上ではm/s2を「m/s^2」と表記しています。
この記事はADXL345のSPI接続版です。I2C接続版及びスケール係数(0.0392266m/s2)の算出方法などの詳細はこちらです。
使用部品・材料
総額で約1,120円です。(Arduino本体の値段を除く)
| 部品/材料 | 値段 | 備考 | 
|---|---|---|
| ブレッドボード | ¥270 | 秋月電子の通販コード(P-00315) | 
| 3軸加速度センサモジュール ADXL345 | ¥450 | 秋月電子の通販コード(M-06724) | 
| I2Cバス用双方向電圧レベル変換モジュール(FXMA2102) 2個 | ¥400 | 秋月電子の通販コード(M-05825) | 
配線図
Arduino UNOの動作電圧は5V。ADXL345の動作電圧は2.0-3.6Vですので、電圧レベル変換モジュールを使用して3.3Vで接続しています。
※ロジック変換モジュールのFXMA108は相性が悪く接続できませんでしたので、FXMA2102を2個使用しています。
 
SPI接続用のピン
マスターはArduino。スレーブはADXL345です。
| 番号 | 名称 | 内容 | 
|---|---|---|
| 13 | SCK | Serial ClocK。データ転送の同期の為のマスターからのクロ ック信号。 | 
| 12 | MISO | Master In Slave Out。スレーブからマスターへデータを送る。 | 
| 11 | MOSI | Master Out Slave In。マスターからスレーブへデータを送る。 | 
| (10) | SS | Slave Select pin。スレーブ選択ピン。10ピン以外でも使用可能です。 SPI接続でデバイス間の通信をする場合は、このピンをLOWにしている間に行います。通信を終了する場合はHIGHにします。 | 
このピン番号と名称はArduinoで使用されているものです。デバイスによって異なる場合があります。
スケッチ(プログラム)
各XYZ軸の加速度(m/s2)をシリアルモニターへ出力します。
#include <SPI.h>
// SCK  : pin 13 (Serial ClocK)
// MISO : pin 12 (Master In Slave Out)
// MOSI : pin 11 (Master Out Slave In)
// SS   : pin 10 (Slave Select pin)
// XYZレジスタ用のテーブル(6byte)
uint8_t RegTbl[6];
void setup() {
  // SPIの初期化
  // ※自動的に「SCK、MOSI、SSのピンの動作はOUTPUT」となり「SSはHIGH」となる
  SPI.begin();
  // SPI転送モード
  // クロック位相(CPOL) = 1 クロック極性(CPHA) = 1
  SPI.setDataMode(SPI_MODE3);
  // SPI送受信用のビットオーダー(MSBFIRST)
  SPI.setBitOrder(MSBFIRST);
  // DATA_FORMAT(データ形式の制御)
  digitalWrite(SS, LOW);
    // DATA_FORMATのアドレス
    SPI.transfer(0x31);
    // 「最大分解能モード」 及び 「±16g」 (0x0B == 1011)
    SPI.transfer(0x0B);
    // 「10bit固定分解能モード」 及び 「±16g」にする場合 (0x03 == 0011)
    // SPI.transfer(0x03);
  digitalWrite(SS, HIGH);
  // POWER_TCL(節電機能の制御)
  digitalWrite(SS, LOW);
    // POWER_CTLのアドレス
    SPI.transfer(0x2d);
    //  測定モードにする
    SPI.transfer(0x08);
  digitalWrite(SS, HIGH);
  Serial.begin(9600);
}
void loop() {
  // XYZデータの取得
  digitalWrite(SS, LOW);
  
    // XYZの先頭アドレス(0x32)に移動する
    // ※複数バイトを読み込む際に必要なマルチバイト・ビットを加算
    SPI.transfer(0x32 | 0x40 | 0x80);
    // 6byteのデータを取得する
    for (int i = 0; i < 6; i++) {
      RegTbl[i] = SPI.transfer(0x00);
    }
  digitalWrite(SS, HIGH);
  // データを各XYZの値に変換する(LSB単位)
  int16_t x  = ((int16_t)RegTbl[1] << 8) | RegTbl[0];
  int16_t y  = ((int16_t)RegTbl[3] << 8) | RegTbl[2];
  int16_t z  = ((int16_t)RegTbl[5] << 8) | RegTbl[4];
  // 各XYZ軸の加速度(m/s^2)を出力する
  Serial.print("X : ");
  Serial.print( x * 0.0392266 );
  Serial.print(" Y : ");
  Serial.print( y * 0.0392266 );
  Serial.print(" Z : ");
  Serial.print( z * 0.0392266 );
  Serial.println(" m/s^2");
  delay(100);
}
※スケール係数の「0.0392266」はI2C版をご覧ください。
参考リンク
https://github.com/adafruit/Adafruit_ADXL345
スポンサーリンク
      
      
      
      
      
    
掲示板
ArduinoやRaspberry Piなどの電子工作の掲示板を作成しました。質問やわからない事は電子工作 (Arduino・ラズパイ等)でユーザー同士で情報を共有して下さい。
関連記事
公開日:2017年06月12日 最終更新日:2017年07月22日
記事NO:02419 
プチモンテ ※この記事を書いた人
|  | |
|  | 💻 ITスキル・経験 サーバー構築からWebアプリケーション開発。IoTをはじめとする電子工作、ロボット、人工知能やスマホ/OSアプリまで分野問わず経験。 画像処理/音声処理/アニメーション、3Dゲーム、会計ソフト、PDF作成/編集、逆アセンブラ、EXE/DLLファイルの書き換えなどのアプリを公開。詳しくは自己紹介へ | 
| 🎵 音楽制作 BGMは楽器(音源)さえあれば、何でも制作可能。歌モノは主にロック、バラード、ポップスを制作。歌詞は抒情詩、抒情的な楽曲が多い。楽曲制作は🔰2023年12月中旬 ~ | |

 
        



 
  
 


