CG-FusionLoggerを使ったマルチセンサーロガー (加速度/姿勢/回転/地磁気/気温/湿度/気圧/空気品質などをmicroSDへ記録)

概要

加速度、姿勢などの14種類のセンサー値について100ms/1秒/1分の異なる間隔でロギングするCG-FusionLogger用のアプリケーション例です。 ログデータをグラフ化して分析するなどの応用が可能です。(有効になるセンサーは各間隔により異なります)

時刻設定モードを搭載しており、PCより現在時刻の設定ができます。 センサーデータをPC/OLEDディスプレイ上に表示するモニターモードも搭載しており、 簡易的な測定データの確認も可能となっています。

Arduino IDEソースコード

応用例のプログラム書き込み済みで出荷しますので、そのまま使う場合はコンパイル、書き込みを行う必要はございません。

プログラムを再度書き込みしたい場合やカスタマイズして使用したい場合は以下よりダウンロードして、 お使いのArduino IDEでCG-FusionLoggerボードにプログラムを書き込んでください。 自由に改変してお使いいただけますが、お客様の責任でご使用をお願い致します。

Version日付MightyCore変更履歴
1.0.02019/4/62.0.1初版

サードパーティライブラリ

以下のサードパーティArduinoライブラリを使用しています。 ArduinoIDEの”ツール” > “ライブラリを管理”で開いたダイアログから、目的のライブラリを検索し、 ”インストール”を選択してインストールして下さい。

以下のサードパーティArduinoライブラリを使用しています。 ArduinoIDEの”ツール” > “ライブラリを管理”で開いたダイアログから、目的のライブラリを検索し、 ”インストール”を選択してインストールして下さい。ライブラリのインストール方法についての解説も用意しています。

ライブラリVersion内容
Adafruit GFX Library1.4.3OLEDディスプレイ制御に使用します。OLEDディスプレイを使用しない場合もコンパイルに必要です。
Adafruit SSD13061.2.9OLEDディスプレイ制御に使用します。OLEDディスプレイを使用しない場合もコンパイルに必要です。
SdFat1.1.0SDカードの読み書きに使用します。標準のSDライブラリと違って長いファイル名が扱えるため、 こちらを使用しています。



起動

製品の仕様、使用方法はCG-FusionLoggerサポートページをご参照ください

起動フローチャート

SW3の設定によりどのモードに移行するか決定します。 起動中にSW2を押したままにしておくことで白色LEDが1回点滅し、CCS811空気品質センサーを無効化できます。 CCS811は消費電流が多いので、省電力化したい場合は無効化して下さい。

SW3-1SW3-2SW3-3モード
ON or OFFON or OFFOFFログモード
OFFOFFONモニターモード
OFFONON時刻設定モード

予期せぬエラーが起きた場合はLED3(赤)が点灯して停止します。

ログモード

ログモードに移行するとまずはスタンバイ状態となります。 SW2を押すことでmicroSDへのロギングを開始し、再度SW2を押すと停止します。 Mode0-3の4種類のログモードがあり、ロギング開始時のSW3-1/3-2の状態でどれを使用するか決まります。 Mode0-2は一定時間置きにセンサー値を記録します。Mode3はイベント検出型のセンサー向けとなっており、 センサーが特定の状態を検出した際に時刻を記録します。

SW3-1SW3-2ログモードLED
スタンバイLED2(黄)点灯
OFFOFFMode0 (100ms間隔)LED1(緑)点灯
OFFONMode1 (1秒間隔)LED1(緑)点灯
ONOFFMode2 (1分間隔)LED消灯(省電力化のため)
ONONMode3 (イベント型)LED1(緑)点灯

温湿度、気圧、空気品質はまとめて1つのファイルに記録されます。それ以外は各センサーごとに別のファイルに 記録されます。ファイル名は「開始日時 + 各センサーPrefix.csv」となります。 各モードで有効になるセンサーおよびPrefixは以下の通りです。

– : 無効
x : デフォルトで有効。カスタマイズで無効に変更可能
v : デフォルトで無効。カスタマイズで有効に変更可能

センサーファイルPrefix備考Mode0Mode1Mode2Mode3
Temperature, Humidity, PressureTPHG温湿度、気圧xx
AirConditionTPHG空気品質TVOCxx
AccelerometerAcc加速度(重力含む)vv
LinearAccelerationLAcc加速度(重力含まず)vv
GravityGrav重力vv
GyroscopeGyro角速度(ジャイロ)xx
MagneticFieldMag磁場xx
RotationVectorRotV姿勢(加速度+ジャイロ+磁場を使用)xx
GeomagneticRotationVectorGeoM姿勢(加速度+磁場を使用)vv
ARVRStabilizedRotationVectorVRRV安定化計算付姿勢(加速度+ジャイロ+磁場を使用)vv
GameRotationVectorGame姿勢(加速度+ジャイロを使用)xx
ARVRStabilizedGameRotationVectorVRGa安定化計算付姿勢(加速度+ジャイロを使用)vv
StabilityClassifierStab動きの大きさを分類x
PersonalActivityClassifierPAct持ち主の状態予測x
StepCounterStep歩数計x
TapDetectorTapタップ検出x
SignificantMotionSigM急な動き検出x

モニターモード

モニターモードはセンサーの値をシリアル通信もしくはOLEDディスプレイ(オプション)上に1秒ごとに表示する動作モードです。 ログモードと違い、microSDを経由せずにセンサーの値が分かるので、簡単な確認などの用途に向いています。 シリアル通信を使用する場合はPCと接続した上で、シリアルモニターソフト(ArduinoIDEのシリアルモニタ等)を起動し、 通信スピードを57600bpsに設定して下さい。 お使いのPC環境によってはFT231Xシリアル通信IC向けのドライバーをインストールする必要があります。 対応OLEDについてはCG-FusionLoggerサポートページをご参照ください。

モニターモードに移行すると、センサー非選択状態となり、現在時刻が出力されます。 SW2を1回押すごとに、センサーが1つずつ切り替わり(温湿度、気圧、空気品質はまとめて1つ)、選択中のセンサーの値が シリアルおよびOLEDへ1秒おきに表示されます。

ArduinoIDEシリアルモニタで温湿度、気圧、空気品質を確認する例

時刻設定モード

時刻設定モードではPCからシリアル通信を使用して現在日時を設定する動作モードです。 CR2032電池基板に装着していれば、電源を落とした状態でも時刻を保持します。 PCと接続した上で、シリアルモニターソフト(ArduinoIDEのシリアルモニタ等)を起動し、通信スピードを57600bpsに設定して下さい。 お使いのPC環境によってはFT231Xシリアル通信IC向けのドライバーをインストールする必要があります。

時刻設定モードに移行すると、シリアルモニターに「Enter time by format YYYYMMDDhhmmss」と表示されまので、 現在時刻をこのフォーマットで入力後、送信して下さい。(例 2019年4月15日19時25分00秒の場合 : 20190415192500) 改行コードは送らない設定として下さい。

ArduinoIDEシリアルモニタから時刻設定する例



カスタマイズ

動作ログをシリアル通信及びmicroSD上の「op.log」ファイルに記録する機能を搭載しています。 FusionLogger.inoファイル15-16行目をコメントアウトすることでシリアル/microSDへの出力を無効にできます。

#define OPLOG_SERIAL             // Define if print operation log on Serail
#define OPLOG_SD                 // Define if write operation log on SD card

FusionLogger.inoファイル23行目でログモードのMode0の記録間隔を変更できます。us単位で指定してください。 Mode0で有効にしているセンサーが多いと記録が間に合わず取りこぼしが発生します。microSDの性能によっても変化しますが、 センサー1つの場合20ms以上、5つの場合100ms以上、10つの場合200ms以上を推奨します。

#define LOG_MODE0_INTERVAL 100000

FusionLogger.inoファイル52-71行目で有効にするセンサーを変更できます。

// BME280, CCS811 sensor enable/disable control
bool enableBME280 = true;
bool enableCCS811 = true;

// BNO080 sensor enable/disable control
bool enable[BNO080::rtCount] = {
  false, //Accelerometer                    
  true, //LinearAcceleration               
  false, //Gravity                          
  true, //Gyroscope              
  true, //MagneticField
  true, //RotationVector                   
  false, //GeomagneticRotationVector        
  false, //ARVRStabilizedRotationVector     
  true, //GameRotationVector               
  false, //ARVRStabilizedGameRotationVector
  true, //StabilityClassifier
  true, //PersonalActivityClassifier
  true, //StepCounter
  true, //TapDetector
  true, //SignificantMotion
};