ソフトウエア : 全体構想


運行プログラムの概要をまとめておきます。
メインCPUはRaspberryPi3、列車、車等の動力車内の制御CPUはTWELITE-DIP、列車位置情報管理、ポイント切替(サーボ制御)はArduinoMEGAが担当
ジオラマ内の水車、ケーブルカー、街灯、家の照明制御は別のArduinoMEGAが担当、拡張機能として音声等はArduinoUNO等を追加予定です。

下記のレイアウトはHOゲージの鉄道模型のみを提示していますが、バスロケ(車の演出)はこれが完成してからの宿題とします。
バスロケ・コースにも路線変更ポイント(サーボ)が4か所あり、充電ステーションではクランプ機構でServoを1個使用します。

【 ArduinoMEGA・ポイント制御部 】
ホーム内(11、12、13、14)のどこに列車が居るかでポイント切替が変わります。
以下がポイント切替パターンに対するサーボ(入口)の動きです。

      11  12  13  14   ポイント位置
   0   X    X    X    X    引込み線側へ
   1   X    X    X   〇    引込み線側へ
   2   X    X    〇   X    引込み線側へ
   3   X    X    〇   〇    引込み線側へ
   4   X    〇    X   X    本線側へ
   5   X    〇    X   〇    引込み線側へ
   6   X    〇   〇   X    引込み線側へ
   7   X    〇   〇   〇    引込み線側へ
   8   〇    X   X    X     本線側へ
  9   〇    X   X    〇    本線側へ
 10   〇    X   〇   X    引込み線側へ
 11   〇    X   〇   〇    引込み線側へ
 12   〇    〇   X   X    本線側へ
 13   〇    〇   X   〇    本線側へ
 14   〇    〇   〇    X    本線側へ
 15   〇    〇   〇   〇    引込み線側へ

サーボ(入口側):角度0度が引込み線側、角度15度が本線側となっています。
サーボ(出口側):RasPiからGPIOビットで指示されます。  引込み線/52番、本線/53番 ( レベル変換不要:プルアップ厳禁 )


【 RasPi4・ポイント制御部 】
列車情報は、上記ArduinoMEGAよりシリアル通信によりRasPi4に情報が上がってきます。<ホールセンサ変化情報のみ>
「12」「14」に列車おり、スタートのきっかけとなる乱数&配列数値の小さい列車側にポイントを切り替えます。
それ以外は、本線側にポイントを切り替えます


< 演出開始時 & 列車制御 >
列車は、2台の場合「12」「14」がスタート位置です。<列車がスタート位置にいるか確認します:定位置につくまで開始しません>
    4台の場合「11」「12」「13」「14」がスタート位置です。<上記同条件です>
    定位置にいる場合は、列車横のLEDが緑色に発光、ずれている場合&不在の場合は赤色に発光します。

「12」「14」にいる列車からスタートしていきますが、スタートのきっかけは乱数&あらかじめ設定した配列数値を使ったタイマーにより決定されます。
タイマースタートは、列車が「12」「14」番に到着した瞬間からカウント開始となります。列車スタートと同時にタイマーはリセットされます。
スタート条件は上記の条件が整った時ですが、「1」番に列車が居ない事が条件です。「2」に列車が居る場合はスロースタートで運行開始です。

「11」「13」の車両は、「12」「14」に空きが有れば、「12」&「14」に進める。

本線「1:10」内の車両は、自分のセンサ番号+1の位置に車両が居れば停止、+2の位置に車両が居れば減速を行う。

「10」の位置の車両は、「11」「13」に車両が居ない事を確認してホームに侵入する。<ポイントは自動で選択されている>
侵入後、「12」「14」が空いている場合は、更に車両を進める。