HOME >> 鉄道模型自動運転システム >  新登山鉄道 運転制御の記述

新登山鉄道 運転制御の記述

 表示パネルの点灯制御について無事クリアーできたので、いよいよ運転制御を検討することにしました。 この制御は以前にも挑戦していますのでこれを参考にし、今回は新しく自動運転と手動運転をスイッチ一つで切替できるように細工しました。

  .

■ 待機線の整備

 運転制御の検討を始める前に、手付かずの追加レイアウト(予定) との連絡線の処理を実施しておきます。 当面は単独ユニットで運用できるように、連絡線の部分を待機線として整備しました。 即ち、ポイントの先にユニットの端にそって線路を敷き、レール端に特製の車止めを設けました。

 ポイントはKATO製ですので、接続する線路もKATO製を使いました。 上右の写真です。 そして、下左に車止めを示します。 信号処理は先回と同じ改造を実施し、信号線をレール下を通してユニットに設けた穴を通して制御部まで配線しました。 下右の写真。

 

   .

■ 建物の照明

 工作内容は省略しますが、登山口駅と、教会および山小屋に照明を設置しましたので、そのための配線とスイッチを設けています。 電源は12ボルト系としています。 田舎の中の建物なので、明るさを押さえて照明にしてありますが、写真ではハッキリしませんね。

 ホームには、屋根がないので街灯をふたつ設置しています。 また、頂上駅は、駅舎がないため、街灯だけにしました。

 

■ 運転制御の記述

 今回の制御の基本として、「新登山鉄道 運転システムの検討」(2021/11/10)にて説明した仕様をもとに、ロジックを検討した。 また、以前の制御ロジックも参考にしながら、次のように設定した。

  1. 先回検討した表示パネルの点灯制御部分は、サブルーティン(関数)として独立させ、手動でも自動でも同じように表示させる。
  2. 手動運転と自動運転は、操作スイッチのON/OFFで判断する。
  3. 手動運転は、ポイント操作と進行方向選択によって経路を設定し、速度調整ボリューム No.1 にて速度をPWM 制御する。
  4. 自動運転は、各運行パターンに従って、関数化して置き、その関数( mode1、mode2、mode3など)を順次呼び出して実行させる。
  5. 最大で3編成の電車を自動運行させる事ができるが、モデル毎に速度調整が必要なので、スタート時点の停車位置を基準として、速度調整ボリュームを割り当て、そのモデルに応じた速度を調整する。
  6. モデル毎の電車は、densha と言う変数を使って指定し、関数呼び出し時にその変数を引きついて運行制御を実施する。
  7. 1編成、あるいは2編成での運行の場合は、未設定の電車の速度調整ボリュームをOFF させておき、その電車が該当する場合には運行をパスするように関数を記述しておく。
  8. 運行スケジュールは、当初の設定位置に電車が戻って来た時点で一つのシーケンスを完了とし、そこで、自動運転の継続か、手動運転に戻るのかを判断する。
  9. 自動運転シーケンス途中でのトラブルの場合、どうやって運行を再開させるかは、今後の検討とする。

 電車の停車位置は、登山口駅の1番ホームと2番ホーム、頂上駅、待機線の4ヶ所で、これらは全て行止まりなので折り返し運転となる。 その経路は、4種類の経路となり、その運行パターンは、「登山鐡道 新自動運転システム 構想」(2018/2/22)のパターンを踏襲することにした。 ただし、スイッチバックが無い事、ホーム番号がズレてしまったことなどがあるが、基本的に同じパターンとします。 有名な15ゲームのように、開いている隙間にコマ( 電車 )を動かすのと同じですね。

 電車が同じ位置に戻ってくるのは、4×3=12 のモードを実施後になります。

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

 Arduino などに使用していたノートパソコンのキーボードがおかしくなったので、デスクトップパソコンを使用してスケッチの記述を行います。 レイアウト台との距離が少しあるので、長いUSBケーブルを使うことになるのですが、今のところ問題無さそうです。

void loop(){
  aut = digitalRead(AUT);     //自動運転スイッチをチェック
  
  if (aut==LOW){     //手動運転モード
      pts1 = digitalRead(PTS1);   //スイッチ類のチェック
      pts2 = digitalRead(PTS2);
      dswr = digitalRead(DSWR);
      dswl = digitalRead(DSWL);
      vol1 = analogRead(VOL1);
      ledhyoji();                     //パネル表示
      
      if (pts1==HIGH){                //ポイント操作
        digitalWrite(POUT1,HIGH);
        delay(100);
      } else {
        digitalWrite(POUT1,LOW);
        delay(100);
      }
      if (pts2==HIGH){
        digitalWrite(POUT2,HIGH);
        delay(100);
      } else {
        digitalWrite(POUT2,LOW);
        delay(100);
      }     
      if (dswr==HIGH){     //進行方向設定
        digitalWrite(DIRR,HIGH);
      }  else {
        digitalWrite(DIRR,LOW);
      }
      if (dswl==HIGH){
        digitalWrite(DIRL,HIGH);
      } else {
        digitalWrite(DIRL,LOW);
      }
      
      duty=(vol1-500)/2;
      analogWrite(MPWM,duty);  
      
  } else if (aut==HIGH){   //自動運転モード
      analogWrite(MPWM, 0);   //暴走防止
      mode3(0);               //densHa0の運行
      mode2(0);
      mode1(0);
      mode4(0);
  }
  delay(10);
}

 

 記述は、先回のスケッチに手を加え、修正と追加を実施した。 

      記述したスケッチ ⇒ Sin-Tozan-Unit-05A.html

 

 メインのループ部分を右にしめします。 パネル表示の関数 ledhyoji() や mode1() などの部分は、上記のスケッチを参照下さい。

 最初に、自動運転スイッチをチェックして、手動運転モードか自動運転モードかに分岐させます。 手動運転モードでは、最初にポイント等のスイッチ類をチェックして、その状態をパネル表示させます。 そしてスイッチの指示状態に応じて、ポイントやモータドライバの実行を指示して行きます。

 一つのスイッチに対して、if 〜、else 〜をセットにして指示していきますが、ポイント操作の場合は、 delay(100); を間に挿入しています。 これは、コンデンサの充電や放電のための時間を設けるためで、最初はいつもの様に delay(500); としていました。 ところが全体をチャックしてひと回りするのに時間がかかり、応答時間がまどろっこしいことや、早いスイッチ操作には追い付けず、反応してくれないケースが多発しました。

 そこで、遅延時間を削って行き、100msec に落ち着いた次第です。

 

 また、速度調整のためのボリュームによる duty 計算では、スイッチ付ボリュームであるので、先回度同様に、下駄を履かせた設定になっています。

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

 このスケッチによる試運転を実施しました。

 TOMIX製の箱根登山鉄道 2000形 サン・モリッツ号を走らせました。 当初はポイントの作動不良(上記の件)、PIN 番号の指定間違い、車止めのマイクロスイッチ回路の不具合等、いろいろなトラブルに会いました。 その時の動画を下に紹介します。

 

 無事に運行出来るようになったので、以前から考えていたように、ループ線に似合う車両を導入することにしました。 KATOのレーティッシュ鉄道<アレグラ>3両セットです。 ユニトラックコンパクトR150を通過できる小半径対応車両とのことですので、TOMIX のR140 の走行できること、また、中間車両を外して2両でも走行出来るようなので通販にて注文しました。

 この車両が来るまでは、レイアウトの地面作りを再開することにしました。

 

ページトップへ戻る .


 2021/11/22 作成