HOME >> 鉄道模型工学 > 粘着特性を測定しよう 処理ソフトの改良

鉄道模型工学 粘着特性を測定しよう 処理ソフトの改良

  粘着特性を測定するための装置を作っています。やっと泥沼を抜け出したので、次なるステップとして処理ソフト類の改良を実施した。前回示した課題の1と2を改善し、実際の動力車の測定を実施した。

 

//****************************
// Nenchaku-Measure-10
//   2025/9/30
//****************************
// HX711.DOUT  - pin #D4
// HX711.PD_SCK - pin #D3

#include <HX711.h>
#define START 6     //スタートボタン
#define CLR_PIN 13  //74HC4020のRSTポート
#define FIND_PIN 12  //74HC4020の出力ポート動輪側
#define COUNT_PIN 2  //割込ピン車速側
const int LOADCELL_DOUT_PIN = 4;
const int LOADCELL_SCK_PIN = 3;
HX711 scale;
volatile int mcount;  //割込みカウンタ変数

void setup(){
  pinMode(CLR_PIN,OUTPUT);
  pinMode(FIND_PIN,INPUT);
  pinMode(11,INPUT);
  pinMode(COUNT_PIN,INPUT);
  pinMode(START,INPUT);
  scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
  Serial.begin(9600);
}

void m_count(){     //割込み時の処理ルーチン
  mcount = mcount + 1;
}

void loop(){
  int start;
  int fin_d;
  unsigned long t1;  //スタート時刻
  unsigned long t2;  //動輪時刻
  unsigned long td;  //動輪時間
  long force1;       //ロードセル指示値
  long force2;
  long force3;
  long force4;
  long force5;
  mcount = 0;   //車速カウント数
  digitalWrite(CLR_PIN, LOW);  //回転数計測状態をりリセット
   
// 測定開始
  start = digitalRead(START);
  while (start == HIGH) {       //スタートボタンを待つ
    start = digitalRead(START);
  } 
  digitalWrite(CLR_PIN, HIGH);  //回転数計測状態をリセット
  delay(300);
  mcount = 0;   //車速カウント数
  digitalWrite(CLR_PIN, LOW);  //測定開始
   t1 = millis();               //測定開始時刻 
   attachInterrupt(0,m_count,FALLING);  //割込み開始
   delay(50);
   fin_d = digitalRead(FIND_PIN); 
   while (fin_d == LOW) {           //指定パルスまで待つ
    fin_d = digitalRead(FIND_PIN);
   }
  detachInterrupt(0);   //割込み終了
  t2 = millis();     //動輪指定回転数時刻
  td = t2 - t1;      //動輪回転時間
     
//ロードセルを読む
   force1 = scale.read();
   delay(20);
   force2 = scale.read();
   delay(20);
   force3 = scale.read();
   delay(20);
   force4 = scale.read();
   delay(20);
   force5 = scale.read();
   delay(20);
      
//出力処理
   String buf = String(td) + "," + String(mcount) + "," 
   + String(force1)+","+String(force2)+","
   +String(force3)+","+String(force4)+","+String(force5);
   Serial.println(buf);
   delay(500);
}

■ 課題1のスケッチの改良 (割込処理でのカウント)

 スタック状態、即ちすべり率が100%の状態でも同時に測定出来るようにスケッチを改良した。その方法は、泥沼中の実験7で実施した方法で、内容を少し変更して実行した。修正後のスケッチを右に示す。

  1. この実験装置では駆動状態を観察するので、動力車のモータは必ず回転させている。しかし車体は止まっている状態(スタック状態)もあるので、巻取り部のモータ回転数はゼロの場合もありうる。
  2. このため、動力車のモータはバイナリカウンタで設定した回転数に達する時間を計測し、その間に巻取り部のモータ回転数を割込み処理を使ってカウントさせる。計測時間は同じであるが、一方は設定回数までの時間となり、他方はその時間内でのパルスカウント数となる。
  3. これによって、スタック時の力も測定できるし、さらに、糸を緩めておけばゼロ点確認(⇒補正値として使う)にもなるのである。
  4. 割り込みカウント中は、パルス飛びを避けるため、余分な命令を入れないようにしている。
  5. データの処理は方法は今までと同じようにした。

 その測定結果をグラフにまとめたものを下に示す。

 スタック時の測定から連続して測定出来ていることが分かる。しかし、測定データは中央に集まっており、巻取り部のモータ速度とパワーユニットの電圧設定は、データを見ながら設定する必要があるのだ。

    ・・・・・・闇夜の鉄砲では、データを整理した後でないと判らないのである。

 

■ 課題2のリアルタイムモニタの実施 (Pythonの活用)

 データ処理が一貫して実施出来るようにすると共に、いま測定したデータのポイントを確認し、次のねらいどころの設定がでこる事を目的とする。

 このためには、以前実施したリアルタイムモニタの手法を使ってデータを直接Excelに書き込み、すぐにそのデータをグラフに表示させるのである。

     「リアルタイム表示トライ その3」(2022/6/15)とその関連レポートを参照。

 

●対応するExcelファイルの準備

 新しくファイルを作るのではなくて、今までの集計用シートに細工しておくのである。ポイントは、Pythonが書き込む行を指定する欄を設けておくことである。下のシートでは、4行2列目の欄に”6”と言う数値が記入されているが、6行目にデータを記入しなさいと言うメッセージ欄なのである。

●対応するPythonファイルの準備

 #-*- coding:utf-8 -*-
 
 import win32com.client
 import time
 import serial
 
 ser = serial.Serial('COM5',9600)
 ser.readline()
 xl_app = win32com.client.GetObject(Class='Excel.Application')
 
 while True:
		val_arduino = ser.readline()
		buf = val_arduino.strip().decode('UTF-8')
		a = buf.split(',')    
		rn = xl_app.Cells(4,2).value
		xl_app.Cells(rn,2).value = a[0]
		xl_app.Cells(rn,3).value = a[1]
		xl_app.Cells(rn,4).value = a[2]
		xl_app.Cells(rn,5).value = a[3]
		xl_app.Cells(rn,6).value = a[4]
		xl_app.Cells(rn,7).value = a[5]
		xl_app.Cells(rn,8).value = a[6]
		xl_app.Cells(4,2).value = rn + 1
		time.sleep(1)
 ser.close
 exit()

 そして、Pythonの設定内容を左に示します。

 3個のライブラリーが必要でしたのでそれぞれインポートしておきます。さらに、Arduinoからデータを送ってくるシリアル通信ポートの番号も指定しておきます。

 そして、このポートに送られてきたデータを整形してa と言うリストに書き込んで行きます。

 次に、Excelシートの4行2列目の欄の数値を読み取り、シリアル通信で送られてきたデータをExcelシートのその指定行に書き込んでいくのです。

 最後に、新しい行番号を指定位置に書き込んでシリアル通信を閉じ、次の信号を待ちます。

 セルに書き込まれたデータは、すぐさまグラフ上に表示されるので、そのプロット点を目で確認できるのです。即ち、リアルタイムモニタとして機能することになります。

 今回は、これらを簡単に設定することができましたが、今までの苦労があったからこそと安堵しています。

  .

 

● 実施結果

 この手法を実施した結果を右のグラフに示します。グラフを見ながら、巻取部のモータ速度設定や動力車の電圧設定を実施していたので、データを全体的にカバーさせる事が出来ています。

 スタック時のデータも違和感がありませんし、ゼロ点設定(すべり率100%時のゼロ点ポイント)も容易にできました。

 また、すべり率20%以下の領域は設定が難しいので細かく実施できませんでした。方法は、車速(巻取り部の速度をmaxにして、動力車のモータ回転数を落としていくのですが、巻取り側のの速度が上回ると糸がたるんでしまって、引張力が測定できず、さらに糸が滑車から外れて実験がストップしてしまうのです。なかなか難しいですね。

 データを見てもやはりすべり領域でのばらつきは大きいですね。ちなみに実験後動輪を見てみると、ピッカピッカでしたし、線路の汚れもありませんでした。せっせとレールと車輪を磨いてきたからでしょうか。

 

■ 過去のデータとの比較

   .

 このEF-1124号機の過去の測定データと比較しました。

 データは「マイコレクション > 電気機関車リスト > EF65 1124 」にまとめてあるものです。その中に、2014年12月28日、測定車の測定ユニット:モデル3を使用して実施したデータがあります。こので0たより、スリップ率(すべり率)と牽引力(引張力)のデータを重ねてみました。 その結果を右に示します。

  1. 約10年前のデータと綺麗に重ねることが出来ている。測定方法は異なるがそれぞれのデータは見事に補完していることが分かる。
  2. 粘着領域と滑空領域の傾向が表示されており、それぞれの領域での特徴を見て取ることが出来る。
  3. 滑空領域では、バラツキが大きく、当初から想定していた右下がりの傾向とは言い難いが、上昇傾向では無いことは判断できる。
  4. バラついているものの、今回のデータは全体的に小さい傾向があるが、何故だろうかと疑問であった。しかし、下記の観察によってその理由となる一端を掴むことが出来た。なんと、1エンド側の台車の動輪において、トラクションゴムが無くなっていた事が判明したからである。したがって、状態が正常な車両での実験データによって判断する必要があるのだ。今回は参考データとしよう。

 

■ 試験車両の状態

 貴重な実験データとなったので、この時の状態を撮影しておきました。まず、テスト時の車両状態を下に示す。なお、真ん中の台車は、支持部がバカになっていて、すぐ外れてしまうので、実験には影響なしと判断して取り外しています。EFモデルがEDモデル状態になっています。

 センサやカプラーの装着状態と、取り外した時の小物道具の様子です。

 前後の台車の車輪の様子です。下左の写真が1エンド側の台車で、下右の写真が2エンド側の台車です。

 この写真を撮影している時に、1エンド側台車の動輪のトラクションゴムが無くなっている事に気が付きました。うかつでしたね。もっと早くチェックしておれば良かったのですが、実験方法の確立に精一杯でしたので、そこまで気が回りませんでした。

 また、今回の実験では動輪のすべり状態が多発していたので、車輪はピッカピッカの状態でした。

    *************************************

 今回の予備実験によってその実験手法が有効であることが分かりました。次回からは、実験ミスをカバーするため、N増し実験を進めることにしましょう。