HOME >> 鉄道模型工学 > 動力特性の測定の自動化 > 測定台への組付け

鉄道模型工学  動力特性の測定の自動化   測定台への組付け

■ 測定台への組付け

 各測定ユニットが完成したので、測定台にそれぞれを組付け、機能テストを兼ねて模型車両を走らせて見よう。

 まず測定装置の全体の様子から紹介しよう。 測定台は床に置き、机に設置しているデータ処理のためのデスクトップパソコンとはUSB ケーブルで接続している。 ノートパソコンが使用出来たら、場所の自由度が増していたのであるが・・・・・・。 下左の写真はその全体を見渡した状態であり、右の写真は、測定台の全体写真である。 今回は、リフト装置を取り外した状態で使用している。

 次に、各ユニットの設置状況を紹介する。 測定台の中央部分は下左の写真に示すように配置した。 Arduino を搭載したセンターユニットは、パソコンに近いように測定台の左の方に設置し、測定台に明いていた穴を使って、USB ケーブルや電源ケーブルを通している。 下右の写真。 このセンターユニットは購入した模型部品を包装していた透明なケースを利用して保護カバーとしている。

 電圧・電流測定ユニットは、下左の写真のように測定台中央の配線途中に固定している。 この電圧・電流測定ユニットにも保護カバーを取り付ける予定である。 また、測定途中において、電圧設定の状態をチェックする目的でデジタル電圧計を奥の方に設置した。 下右の写真。 この電圧計の電源は独立したACアダプターを使用している。

 車速測定ユニットは、二ヶ所ある直線部の終端に設置している。 台の下から木ねじで固定している。 下左の写真は手前のユニット1で、下右の写真は奥のユニット2である。 スリットを通過中の模型車両の側面に光が当たっているのが観察される。

      .

 模型車両を走行させるコントローラは、TOMIX のN-401 を使用し、センターユニットや電圧計の電源であるACアダプターもテーブルタップにつないでいる。

#define SLIT1_PIN 13
#define SLIT2_PIN 12
#define SLIT3_PIN 11
#define SLIT4_PIN 10
#define LEDG_PIN 9
#define LEDY_PIN 8
#define LEDR_PIN 7
#define BASE_PIN 6

void setup()
{
  pinMode(SLIT1_PIN,INPUT);
  pinMode(SLIT2_PIN,INPUT);
  pinMode(SLIT3_PIN,INPUT);
  pinMode(SLIT4_PIN,INPUT);
  pinMode(LEDG_PIN,OUTPUT);
  pinMode(LEDY_PIN,OUTPUT);
  pinMode(LEDR_PIN,OUTPUT);
  pinMode(BASE_PIN,INPUT);
  Serial.begin(9600);
}

void loop()
{
  int voltage;
  int current;
  unsigned long vol;
  unsigned long cur;
  int vol_pin = 1;
  int cur_pin = 2;
  int n;
  unsigned long t1;
  unsigned long t2;
  unsigned long tt;
  int slit1;
  int slit2;
  int slit3;
  int slit4;
  
  //ユニット1
  slit1 = digitalRead(SLIT1_PIN) ;
  slit2 = digitalRead(SLIT2_PIN) ;
  if (slit1 == HIGH & slit2 == HIGH){
    
    //準備OK
     vol = 0;
     cur = 0;
     n = 0; 
     digitalWrite(LEDG_PIN, HIGH);
     
     //入口スリット
     while (slit1 == HIGH) {
           slit1 = digitalRead(SLIT1_PIN) ;
           digitalWrite(LEDG_PIN, HIGH);
      }
      t1 = millis();
      digitalWrite(LEDY_PIN, HIGH);
       
      //出口スリット
      while (slit2 == HIGH) {
          voltage = analogRead(vol_pin);
          current = analogRead(cur_pin);
          vol = vol + voltage;
          cur = cur + current;
          n = n + 1;
          slit2 = digitalRead(SLIT2_PIN);
        }
      t2 = millis();
    
      //出力処理
      tt = t2 - t1;
      String buf = String(vol) + "," + String(cur) + "," + 
     String(n) + "," + String(tt)+ "," + "0" + ",D" + ",E";
      Serial.println(buf);
      digitalWrite(LEDY_PIN, LOW);
      delay(500);
      
  } else {
    digitalWrite(LEDR_PIN, HIGH);
    delay(500);
    digitalWrite(LEDR_PIN, LOW);
  }
  
  //ユニット2         
   slit3 = digitalRead(SLIT3_PIN) ;
   slit4 = digitalRead(SLIT4_PIN) ;
   if (slit3 == HIGH & slit4 == HIGH){
    
     //準備OK
     vol = 0;
     cur = 0;
     n = 0; 
     digitalWrite(LEDG_PIN, HIGH);
     
     //入口スリット
     while (slit3 == HIGH) {
           slit3 = digitalRead(SLIT3_PIN) ;
           digitalWrite(LEDG_PIN, HIGH);
      }
      t1 = millis();
      digitalWrite(LEDY_PIN, HIGH);
       
      //出口スリット
      while (slit4 == HIGH) {
          voltage = analogRead(vol_pin);
          current = analogRead(cur_pin);
          vol = vol + voltage;
          cur = cur + current;
          n = n + 1;
          slit4 = digitalRead(SLIT4_PIN) ;
      }
      t2 = millis();
    
      //出力処理
      tt = t2 - t1;
      String buf = String(vol) + "," + String(cur) + "," + 
     String(n) + "," + String(tt)+ "," +"0" + ",U" + ",E";
      Serial.println(buf);
      digitalWrite(LEDY_PIN, LOW);
      delay(500);
      
  } else {
    digitalWrite(LEDR_PIN, HIGH);
    delay(500);
    digitalWrite(LEDR_PIN, LOW);
  } 
}

 

 

 

 

 

 

 

 

 

 

 

■ プログラムの修正

 ハードが揃ってきたので本格的な自動測定のプログラムに向けてレベルアップを行う。 まず、マイコン本体のArduino のプログラム(スケッチ)を修正する。 

 

◆ スケッチの修正

 主な作業はスリットを通過中に、電圧と電流を計測する事と、通過時間を計測する事である。 その他に、スリットが準備状態であるかもチェックし、計測中にはLEDを点灯させることも実施させる。 この計算フローは、

  1. 光センサ slit1と slit2 が稼働状態であることを確認し、準備OKの緑色のLEDを点灯し、入口のスロットの通過信号が来るまでスタンバイ状態で待つ。
  2. 入口のスロットの通過信号 slit1をもとに、その時刻 t1 を記憶し、計算中を示す黄色のLEDを点灯して2)以下のループを開始する。
  3. 電圧 voltage と電流 current を A/D変換し、それぞれの累積 vol と cur を計算し、カウンタ(累積回数) n をひとつ加える。
  4. 出口のスロットの通過信号 slit2 が入力されるまで、2)の作業を繰り返す。
  5. 出口のスロットの通過信号が入力されたら、その時刻 t2 を計測し、入口との時刻差 tt を計算して、通過時間とする。
  6. 電圧の累積値、電流の累積値、累積回数、通過時間、(傾斜角)のデータをひとつの文字列にし、その文字列をUSB通信を使ってパソコンに送信する。
  7. 計算中の黄色LEDを消灯し、少し時間を於いて次のステップに進む。
  8. 次のユニットに進む。

 この作業をユニット1とユニット2で交互に実施し、ユニット1では、"D" の文字を、ユニット2では "U" の文字を付加して送信するようにした。  これは、台を傾斜させた場合に、下り坂になる事と、登り坂になる事を示し、牽引力計算の時には、これを判定し、駆動力と制動力に分けて計算させるためである。

 また、光センサが不調な場合、赤色LED を点灯して、注意を喚起することとした。  このチェックは0.5秒毎に実施させる。

 作成したスケッチを右に示す。

 

◆ Excel のデータ処理の変更

**************  受信処理 ver2 ******************

Sub Jushin_01()
  Dim N As Integer
  ・・・・・・・・・・・
  m = Sheet2.Cells(4, 2)

  N = 1
  For rn = 1 To 6
    'オープン
     port$ = "COM3"
     h = CreateFile(port$, ・・・・・・・・・・)
     If h < 0 Then
        MsgBox "通信ポート " ・・・・・・・・・・・・・
        Exit Sub
     End If
    'タイムアウト
        c.ReadIntervalTimeout = 0
        ・・・・・・・・・・・・・・・
    '受信待ち
      buf$ = String$(128, vbNullChar)
      While InStr(buf$, ",") = 0
         ReadFile h, buf$, ・・・・・・・
      Wend
      buf$ = Replace(buf$, vbNullChar, "")
    'クローズ
      CloseHandle h
    ' 結果を表示する
      sn = 2
      While InStr(buf$, ",") > 0
        N = InStr(buf$, ",")
        a$ = Left(buf$, N - 1)
        buf$ = Mid$(buf$, N + 1)
        Sheet2.Cells(rn + m, sn) = a$
        sn = sn + 1
     Wend
  Next
  Sheet2.Cells(4, 2) = m + 6
End Sub

 次に、パソコン側も変更する。

 こちらのプログラムは大きな変更は無いが、Excel の表示を変更したので、それに合わせて修正している。

 

  表示項目は、受信されたデータをそのまま表示させ、その右側に求めるデータを計算し、最終的には、グラフに結果を表示させるものである。

 このグラフまでの処理をリアルタイムで実施してくれたらベストであるが、今のところ出来たいない。 このため、6行毎にマクロを止めてグラフを表示させる面倒な方法を採用している。

 また、シートの整理をしたため、シート名が変化してしまい、マクロが作動しなくなってしまった。 良く良く眺めていたら作動しているシート名は、”Sheet1” でも ”速度計測” でもなくて、”Sheet2” であった。 マクロ表示の中のプロジェクト表示の欄に、Sheet2(速度計測)と表示されていたので気が付いたのである。 ややこしい!

 

 測定結果を表示した実際の画面を下に示す。

 

 

 

 

 

 

 

 

 

拡大図

 なお、このシートの場合、type欄の表示が出来ていないが、現在は修正済みである。

 

■ 試験走行

 準備が出来たので、スケッチをArduino に送信し、何台かの車両を準備して試験走行を実施した。その走行写真は、上に記載した。

 幾つかのトラブルを手直ししたのち、順調に測定を開始することが出来た。

出来た! ヤッタゼベービ!

 

◆ 結果を見てみる

 測定データを見ながら検討してみた。 最初に測定した EF64-1032 の場合、まず、電圧と電流の測定状況は、車速が約80Km/h の状態でスリット間を、0.726sec で通過しており、この間に電圧と電流を 3,127 回も測定している。 即ち、スピードは14.88cm/sec で、スケール速度に換算すると 80.3Km/h となる。 そして、0.2322マイクロ秒毎に電圧と電流を測定して累計して行っているのである。 これだけの早さで計測していれば、モータによる電流の脈動も平均化されると判断出来る。 この数値は、平均して0.2321であり、最大値は0.2329、最小値は0.2314、であった。 スリットに入る時や出る時のタイミングなどが影響して、測定開始と終了の時間が多少ずれたとしても、平均すれば安定して測定しているものと推察する。

 

◆ 測定データの例

 走行したテスト車両は、EF64-1032号機、 EF65-1124号機、 EF65-511号機、 ED79-11号機の4台であり、その特性グラフを下に示す。

 時々特異なデータも見られるが、データのバラツキ具合は、手動で測定した場合よりも小さい様な気がする。 暖機運転の程度や車両自身の変動もあるので、この程度のバラツキが出るものと考えている。 特異なデータについては、今後の検討課題とする。

 また、測定データの値に対しては、以前の測定値と比較しても差異は無いようである。 このため、データもある程度信頼出来そうである。

 また、このグラフ表示の測定点の大きさを少し小さくしてみた。 グラフとしての見栄えは少し劣るが、データのバラツキ程度が良く分かり、今後この表示方法で報告することにしよう。

 やっとここまでたどり着くことが出来た。 目的とした測定作業の手間は大幅に合理化されており、さらに測定データ数を増やしても問題は無い。

 次のステップとして、傾斜角の測定に取り掛かることにしよう。