ExcelのData StreamerでArduinoからのリアルタイムデータ受信+分析

概要

上記ツイートをみて、早速つかってみました!

Data Streamerとは?

Excelの新機能で、Office365などで最新版Officeを使っている人であれば無料で使えるアドオンになります。シリアル経由からカンマ区切りのデータを取り込んで、エクセル上で処理することが可能みたいです。

有効化

エクセルのオプションからアドオンを選択します。下の「管理」から「COMアドオン」を選択してから「設定」ボタンを押します。

Microsoft Data Streamer for Excelを選択してOKをします。

Data Streamerのタブが増えれば成功です。

※(追記)このアドオンを組み込むとエクセルの終了が遅くなります。使っていないのであればオフに戻したほうがいいと思います。

Arduino側スケッチ

#include "M5Lite.h"

void setup() {
  M5Lite.begin();
}

void loop() {
  float ax;
  float ay;
  float az;

  M5Lite.Imu.getAccelData(&ax, &ay, &az);

  Serial.printf(" %f,%f,%f\n", ax, ay, az);

  M5Lite.Ex.delay(100);
}

とりあえず手元にあったM5Stack Core2の加速度センサーをカンマ区切りで出力します。

 -0.039062,-0.013916,1.085449
 -0.042480,-0.015137,1.081055
 -0.035645,-0.018555,1.083740
 -0.044434,-0.016357,1.081299
 -0.040771,-0.015137,1.081543
 -0.038818,-0.020752,1.081787

こんな感じのデータが100ミリ秒ぐらいの間隔で出力され続けます。今回はデータ自体には意味はないですので、どんなデータでも構わないと思います。

エクセルから接続

新規ブックを開いた状態で、Data Streamerタブから「デバイスの接続」を選択してシリアルポートを選びます。Arduinoのシリアルモニタが開いている状態だとエラーになるので、シリアルモニタを閉じた状態でエクセルからアクセスしてみてください。

こんな警告が表示されてから、実際の画面がでます。

上記のような画面ができれば接続成功です。

設定シートを開いた状態です。データの間隔や保存するデータ行、チャンネル数などを設定します。

この状態でデータの開始をクリックします。

現在地と、過去データが下から順に追加されていきます。

この状態で、時間とCH1、CH2、CH3の7行目からデータの一番下の行まで選択してから、挿入から棒グラフを追加してみたところです。このグラフですがなんとリアルタイムで動いてくれます!

長時間の保存について

データの開始だと、設定で指定した行数までしかデータを保存することができません。もっと長時間を保存した場合にはデータの保存ボタンを押します。

データの取得が終わったら、「記録の終了」ボタンを押します。

こんなダイアログが表示され、CSVの保存先を聞かれます。

保存されたファイル

#!,Workbook:,Custom,Custom
#!,このデータを再生するには: 元の Excel ブック ファイルを開き、[Data Streamer] リボンの [データ ファイルのインポート] ボタンをクリックして、このファイルに移動します。
#!,詳細については、http://aka.ms/hackingstem/ にアクセスしてください
 -0.047607,-0.012939,1.080322
 -0.041992,-0.013916,1.076416
 -0.043457,-0.014404,1.077881
 -0.041504,-0.017822,1.079590
 -0.041504,-0.012939,1.081787
 -0.043457,-0.013916,1.080566
 -0.049805,-0.014648,1.080811
 -0.039062,-0.015381,1.081299
 -0.046875,-0.017822,1.078857
 -0.042480,-0.017822,1.082275

上記みたいなフォーマットでした。先頭にスペースが入っていますので、パースする前の実際に受け取った文字列をそのまま保存しているようですね。

残念なことに、時間情報は保存されていません。。。時間が重要なデータの場合には送信時間も一緒に送らないとダメみたいですね。せめて記録開始時間をファイル名に保存してほしかったです。

再生

デバイスを切断して、先程保存したファイルをインポートしてみましたところ、上記のような画面になりました。データの再生を実行すると、先程のデータが再現されて動きます!

これはかなり便利ですね。保存したデータではなく、ダミーデータをCSV形式で作成することで再生して検証することも可能です!

まとめ

何に使えるかはその人次第だと思いますが、結構たのしそうです。データ分析アドオンとかを組み合わせれば基本統計量を出しながらとか、未来値の予測などもいけそうな気がします!

コメント