HOME >> 鉄道模型実験室 > Excel の Data Streamer を使ってみた
ロータリエンコーダについて使い方を理解したので、次のステップとしてデータの受け取り方法を検討した。今回は新しい方法として、Excel の Data Streamer を使ってみましたが、簡単に逆起電力定数も測定出来てしまいました。
void loop() {
int voltage; //電圧データ
int current; //電流データ
unsigned long vol; //電圧データ累積値
unsigned long cur; //電流データ累積値
unsigned long t1; //測定開始時刻
unsigned long t2; //測定終了時刻
unsigned long tt; //測定時間
unsigned long value1; //測定開始時のカウント値
unsigned long value2; //測定終了時のカウント値
unsigned long con; //測定時間内でのカウント数
int n;
int start;
vol = 0;
cur = 0;
start = digitalRead(START_PIN);
while (start == HIGH) { // スタートスイッチを待つ
start = digitalRead(START_PIN);
}
t1 = millis(); //測定開始時刻
update_value(); //測定開始時のカウント値を読む
value1 = value;
for(n=0;n<200;n++){ //計測のためのループ
voltage = analogRead(vol_pin); //電圧データを読む
delay(2);
vol = vol + voltage;
current = analogRead(cur_pin); //電流データを読む
delay(2);
cur = cur + current;
}
t2 = millis(); //測定終了時刻
update_value(); //測定終了時のカウント値を読む
value2 = value;
tt = t2 - t1;
con = value2 - value1;
String buf = String(vol)+","+String(cur)+","+String(con)
+","+String(tt)+","+String(n);
Serial.println(buf); //シリアル通信での送信
delay(50); //ループ時間の調整
}
■ 送り手側の細工
まず、データの送り手側としてのArduino のスケッチを修正しました。モータの特性値は、動的変化のない静特性ですので、ゆっくりと時間をかけて計測することが出来ます。その内容は、
です。この内容に沿ってメインループ部分を修正しました。その内容を右に示します。他の部分は、「ロータリエンコーダを使ってみた その1」(2026/2/8)を参照下さい。
試しに、シリアルモニタによって送信されてくるデータを確認しました。メモ帳にコピー/ペーストされた状態を下に示します。

コンマ区切りのデータとして送信されて来ています。今回は電流値を測定していませのでゼロを送信していますが、他のデータはそれなりの値を測定していることが分かります。測定時間は 殆ど 848msec で、カウント数は1380 前後の値です。
■ 受け手側の設定
送信側の設定が出来たので、今度は受け手側を準備しました。なんでも最近のExcel バージョンではシリアル通信を直接受け取って処理できるとの事であったのでトライしてみることにしました。それは、Data Streamer というアドインとのことであるので、Excel バージョンを最新のものにアップグレードしてその機能を追加しました。
すると、下の画面に示すようにData Streamer というリボンが表示されるようになりました。この機能をいろいろ試してみて、その注意点もわかりました。
*********************************************************
いろいろ失敗を重ねましたが、試しにデータを受信してみました。データの間隔は 150 ミリ秒に、データ行は200 行にし、データの並び順は最新データが先頭に来るように設定しています。また、送信されてきたデータを元にして、 vol/n と con/tt の計算を欄外にて実施させ、その値をグラフとして表示するようにしておきました。

早速データ受信を実行しました。
すると、データを受信するたびに行が追加されていき、欄外の計算もすぐさま実行され、その結果を次々とグラフ上に表示していきました。
おぉーーーー! リアルタイムモニタと使えるぞ!
そして、駆動モータの電圧を変えて回転数を変化させてみました。ゆっくりの変化や早い変化も試してみました。
■ データを整理する
シリアル通信データを簡単に受け取ることが出来る事が分かりましたので、そのデータの中身を吟味してみることにしました。 まず、上にも示した時間経過のグラフです。

よく見ていると、電圧値の値とカウント値の値の変化が同期しているように見えます。そこで、このデータをX軸とY軸にしてグラフ化してみました。データのバラツキがどの程度なのかを見るためです。下左のグラフです。

ムムムーーーーーーー! データは見事に一直線上に並ぶではないか!
ゆっくりと変化させたり、早い変化もさせたデータですが、何故だかリニア線上に並んでいました。当然、バラツキは発生しているものと考えていたので、最初は不思議でした。でも、よくよく考えてみると当然のような気がして来ました。二つの変数が直線、即ちリニアな関係にある時、変化中のデータとも言えどもその線上の関係を保っているのである。平均を取っても同じですね。
そこで、この変数を実際求める電圧の値と出力軸の回転数に換算してグラフ化したのが右上のグラウです。電圧はアナログポートに直接接続しているので、5volt の値はデジタル値で1023 です。また、出力軸の回転数は、ギヤ比が75.81 、ロータリエンコーダは1回転当たり 12 カウントし、tt はミリ秒ですので、これらの値から換算しました。
そして、この特性の勾配は、使用したギヤドモータの逆起電力 Ke の値を示していることになります。
****************** 予備実験のつもりが、簡単に目的を達してしまいました ! **************************************
なお、Ke の値は、ギヤドモータの出力軸における値であり、単位は volt/rpm です。
逆起電力定数 Ke = 0.01282 volt/rpm
です。
************************************************
今回は思わぬ形でいろいろな知見を得ることが出来ました。 次回は、無負荷特性と負荷特性を測定することにします。
2026/2/10