設計はずいぶん前に終わっていましたが、製造が2度ほど延期になってしまっていた
9軸加速度センサーボードがやっと届いたのでテストしました。
このボードは以前から販売していたBMI270を使った6軸加速度センサーボードに
Asahi Kasei Microdevices(AKM)の3軸磁気センサAK09918Cを追加したボードとなります。
なおBMI270に関してはこちらを参考にしてください
SONY Spresense用の6軸センサーBMI270ボードをArduino IDEで動かしてみた
Arduino IDEで使えるAK09918Cのライブラリはこちらから入手できます。
Seeed-Studio/Seeed_ICM20600_AK09918
ここからダウンロードしたzipファイルをArduino IDEのライブラリに追加してください。
exampleフォルダーの中の
test_magnet がAK09918のサンプルプログラムとなります。
#include "AK09918.h"
#include <Wire.h>
AK09918_err_type_t err;
int32_t x, y, z;
AK09918 ak09918;
void setup() {
// join I2C bus (I2Cdev library doesn't do this automatically)
Wire.begin();
err = ak09918.initialize();
ak09918.switchMode(AK09918_POWER_DOWN);
ak09918.switchMode(AK09918_CONTINUOUS_100HZ);
Serial.begin(9600);
err = ak09918.isDataReady();
while (err != AK09918_ERR_OK) {
Serial.println("Waiting Sensor");
delay(100);
err = ak09918.isDataReady();
}
}
void loop() {
err = ak09918.isDataReady();
// err = AK09918_ERR_OK;
if (err == AK09918_ERR_OK) {
err = ak09918.isDataSkip();
if (err == AK09918_ERR_DOR) {
Serial.println(ak09918.strError(err));
}
err = ak09918.getData(&x, &y, &z);
if (err == AK09918_ERR_OK) {
Serial.print("X: ");
Serial.print(x);
Serial.print("uT");
Serial.print("\tY: ");
Serial.print(y);
Serial.print("uT");
Serial.print("\tZ: ");
Serial.print(z);
Serial.println("uT");
} else {
Serial.println(ak09918.strError(err));
}
} else {
Serial.println(ak09918.strError(err));
}
delay(100);
}
このプログラムは修正無しで実行できます。
実行するとシリアルモニタに以下のようにデータが表示されます。
AK09918_ERR_DOR: Data skipped
X: 0uT Y: 23uT Z: -31uT
AK09918_ERR_DOR: Data skipped
X: 0uT Y: 21uT Z: -30uT
AK09918_ERR_DOR: Data skipped
X: -2uT Y: 23uT Z: -30uT
AK09918_ERR_DOR: Data skipped と表示されているのは
データの読み込みでオーバーフローが発生している警告なので
実際の測定には問題ないと思います。
コチラのデータシートを見て頂くと
mode1 ~ mode4 が連続取り込みとなっていて各モードでサンプリング間隔が変わっています。