HOME >> 鉄道模型自動運転システム >  ローカル線の自動運転 周回路連続運転

ローカル線の自動運転 周回路連続運転

 物置部屋のレイアウトにて、そのローカル線の改造工事を実施しています。 そして、ハード系工作の区切りがついたので、いよいよ自動運転のプログラムに取り掛かることにしました。

 

■ 電気回路について

 ハード系の工作については、「物置部屋のレイアウト 電子回路の工作」(2023/2/20)などを参照ください。 ここでは、説明省略しますが、報告後に修正した部分があります。 プログラムの内容に関係するので、修正後の状態を掲載します。

 マイコンは、Arduino MEGA を使用しています。 多くのポートは、多数設けたセンサや操作スイッチのための入力ポートとして使用しています。 操作スイッチ類は手動運転の場合でも操作できるようにしています。 また、自動運転の場合、運転パターンを多数選択できるように選択ダイヤルをフルに活用するつもりですが、12パターンでは不足する心配があったので、スイッチA と B の ON/OFF 選択スイッチを新設し、選択モードを4倍に増やしました。

 給電制御は、モータドライバとして東芝製の TB6612 を使って、キャリア周波数 31KHz のPWM 制御を実施しています。 このため、ヂューティ比と車速は、コアレスモータ搭載車でも通常モータ搭載と同様に、線形的に制御出来ます。

 

■ スケッチについて

 運転制御のロジックについて紹介しています。 今回のロジックの内容は、

  1. 手動運転と自動運転をスイッチ操作によって判断し、制御方法を選択する。
  2. 自動運転モードは、ダイアルスイッチと二つのON/OFFスイッチを使って選択する。
  3. 自動運転の運行開始スイッチを設けて自動運行を開始すると共に、自動モードの連続運転の指令としても使用する。 即ち、運転開始後にこのスイッチをOFFにすると、そのモードを終了後に運行を完了し待機モードになる。

などです。 自動運転の場合の列車の速度調整はボリュームによって調整し、ホームに入場後は減速して走行するための調整も別ボリュームによって調整する。 しかし、複数の列車を個別に速度調整は出来ません。 また、車止めのための機構と制御は今回採用していません。 しかし、通過信号処理やポイントの駆動方法などは、従来の実施例を活用しています。

   現時点での制御用スケッチの内容 ⇒ Local-sen-32.html

 次に、主要な部分の内容について説明します。

 

● 手動操作と自動運転の選択

 手動操作と自動運転の選択は、選択スイッチ AUT の状態によってメインループの始めに判別します。

  void loop(){
     if (digitalRead(AUT)==LOW){      手動運転モード
             if文によるモグラ叩き方式でスイッチ操作を監視し、実行する。

  	} else if (digitalRead(AUT)==HIGH && digitalRead(SRT)==HIGH){   自動運転モード
      	analogWrite(F12PWM, 0);  //暴走防止
      	analogWrite(F3PWM, 0); 
       ここから自動運転処理を実施する。

}   delay(10); }

 自動運転モードの開始にあたっては、AUT をチェックするとともに、SRT もチェックしています。 これは、自動モードの運転開始を設定するもので、運転開始には両方のスイッチをONにする必要があります。 安易なスイッチ操作で勝手に自動運転や手動運転が動出さないようにとダブルチェックを兼ねています。

 

● モード選択スイッチによる場合分け

 選択ダイアルは、「ロータリスイッチのコード化」(2021/1/16)の様にコード化されていますので、各チャネルの情報よりダイアルが示す数字に変換します。 以前はIF分を使ってデコードしていましたが、今回は簡単な方法で実施しました。

 選択されたモードの実施のための分岐を switch 文を使うことにしましたので、そのための数字( 変数:dnumber )を使うようにしたのです。 ダイアル番号は1から始まっていますので、最初に1として設定しておき、個々のチャネルがON, (負論理で構成されているので、ON ならば LOW である )の場合は、チャネルが示す桁数に応じて変数 dnumber に加算して行きます。

 
     dnumber = 1;            ダイヤルの数字をデコード
     if (digitalRead(CH1)==LOW){dnumber=dnumber+1;}
     if (digitalRead(CH2)==LOW){dnumber=dnumber+2;}
     if (digitalRead(CH3)==LOW){dnumber=dnumber+4;}
     if (digitalRead(CH4)==LOW){dnumber=dnumber+8;}

     switch(dnumber){        モード選択
        case 1: mode1(); break;
        case 2: mode2(); break;
        case 3: mode3(); break;
        case 4: mode4(); break;
     }

 その後、スイッチAとB を追加していますので、スイッチAで変数を +12 、スイッチBで +24 するようにすれば、

と計算され、それの応じて運転モードが選択されます。 どれだけ使用するかは分かりませんが、とても覚えきれませんので一覧表を作っておく必要がありますね。

 

■ 走行状態の紹介

 レイアウト上での走行状態について紹介しましょう。 走行させている車両は、KATOのチビ電です。

 動画でも撮影しました。

 各モードともスムースに走行しており、今までの苦労が吹き飛んでしまします。 でもチビ電は良く走りますね。 しかし、何とか工夫して室内灯が取り付けられないか検討したくなります。

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

 このあとは、運転モードを増やしたり、バラバラにしてしまった建物の配置変え検討して、レイアウトを仕上げて行きましょう。

 

ページトップへ戻る .


 2023/3/6 作成