今回でセンサー・モジュール関係は当面、最後になるかもしれません。私の実験室では、他にもより「土質試験室」らしい多くのセンサーを使用していますが、そもそもセンサー自体を紹介するのが目的ではないので、「ひずみゲージ型」「(増幅後)電圧出力型」などにまとめて紹介してきました。今回は3軸加速度センサーADXLを紹介します。

 

 

 この加速度センサーで地震動や風による振動を計測しようとしたことはないので、応答速度等について詳しく気にしたことはありません。3軸(X-Y-Z)なので、重力場でドローンの姿勢を決めるなどに使えるのだと思います。私は、ロガーが倒れていないかなどを遠隔で知るために使っています。傾斜計として使えるかもしれませんが、その用途には別途、傾斜計用のチップを使ったほうが正確だと思います。ちょっと計算したところ、傾き計測の精度は理論上0.1°程度、実際にはもっと粗いかと思います。

データシートはこちら:

https://www.analog.com/media/en/technical-documentation/data-sheets/ADXL345-EP.pdf

レンジは可変で、最大で±16Gとのこと。出力はデジタルで、内部のAD変換は最大で13bit(レンジが16Gのとき)。マイコンとの接続にはSPIとI2Cのどちらも使えるようです。ここではI2Cを使います。

 

 以下のように接続します。ここでは、ADXL345をあっちこっち向けやすいように、PCにシリアル出力するのではなく、LCD(第18回)を使って結果表示します。給電も電池で行うことで、完全にPCから切り離して使います(第6回)。

 

 

 

 スケッチには以下を使います。以下のライブラリが必要です。

https://www.arduinolibraries.info/libraries/accelerometer-adxl345

ライブラリに同封されているサンプルコードから、ADXL345の動作に最低限必要な箇所を抜き出し、LCDに表示するコマンドを加えています。LCDのライブラリについては第18回を参照。この他にもSparkFunのライブラリなどもあるようです。

 



#include <Wire.h>

#include <ADXL345.h>

#include <LiquidCrystal_I2C.h>

 

ADXL345 adxl;

LiquidCrystal_I2C lcd(0x3F,16,2);

 

void setup()

{

  /* ----- Start ADXL345 ------ */

  adxl.powerOn();

 

  /* ----- Initialisation of LCD display ------ */

  lcd.init();

  lcd.backlight();

}

 

void loop()

{

  double xyz[3];

  double ax,ay,az;

 

  adxl.getAcceleration(xyz);

  ax = xyz[0];

  ay = xyz[1];

  az = xyz[2];

 

  lcd.clear();

  lcd.setCursor(0, 0);lcd.print("X:"); 

  lcd.setCursor(2, 0);lcd.print(ax);

  lcd.setCursor(8, 0);lcd.print("Y:"); 

  lcd.setCursor(10, 0);lcd.print(ay);

  lcd.setCursor(0, 1);lcd.print("Z:"); 

  lcd.setCursor(2, 1);lcd.print(az); 

  delay(500);

}

 

 

重力場で試してみると・・・

 

 

ADXL345ボードを地面と水平にしたとき、LCDの左下(Zのチャネル)が0.83Gになりました。ちょっとずれているようです。

 

 

ADXL345ボードを地面に垂直(壁と平行)にしたとき、LCDの左上(Xのチャネル)が0.97Gになりました。

 

 

ADXL345ボードを先ほどとは違う向きで地面に垂直(壁と平行)にしたとき、LCDの右上(Yのチャネル)が1.00Gになりました。チャネルによって応答がやや異なるので、正確に使うためには較正が必要になりそうです。