鉄道模型工作実験室

Nゲージ鉄道模型に関する工作や実験を行っています。

登山鉄道レイアウトの自動運転システム その2

新しく工作した登山鉄道レイアウトには自動運転システムが組み込まれています。先回はその構成となるハード回路が出来たので、今度はそのソフト関係を説明します。


自動制御用のマイコンは、表示パネルのLEDを制御させるなど多くの出力ポートが必要となったので、Arduino MEGAを使用しました。また、手動操作と自動制御を両立させるための操作ボタン類と表示パネルの表示方法にプログラム上の工夫が必要でした。
   **************************************************
最初にハード回路との繋ぎとなるArduinoのピン番号を整理してポート名を決めておきます。また、センサやアクチュエータの状態とHIGH/LOWの関係を整理しておきます。これは、センサ回路が正論理か負論理か迷わにようしておくためです。後期高齢者のポカヨケです。


次に今回新しく取り組む表示パネルの点灯制御を検討しました。表示パネルには中央部に電車の進行方向を示す矢印を表示させています。そして、各ホームへの入場信号と出発信号も表示するようにしていますので。どの路線をどの方向に進行するのかが表示できます。入場信号と出発信号はシステムを簡素化するために、緑と赤の2種類としています。
また、通過センサとレールエンドの停止センサより、その状態も表示するようにしました。
これらの表示は、手動運転の場合のボタン操作より判断させて表示させることが出来ますが、自動運転の場合でも同じように表示されるように変数を使って工夫しました。
   **************************************************
制御の基本ロジックとして次の様に設定した。

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

   **************************************************
まず、関数として設定する場内信号と出発信号の制御ロジックを説明しよう。この制御は、ポイントスイッチで選択された経路と、進行方向選択スイッチの情報をもとに、どこのホームの出発信号を進行、即ち緑に指示し、どこのホームの場内信号を緑にするかを指定します。その組合せは多くの場合があるため、フローチャートを使って整理する必要がありました。ここで、

  1. 最初に全ての信号を赤にする。
  2. スイッチ状態をチェックする。
  3. その情報を基に、該当する経路だけを緑にする。
  4. 少し時間を稼ぐ。

とし、このサイクル(ループ)を常時回しておく。LEDは赤と緑の点灯を繰り返すが、1から3までを素早く実施すれば、緑が連続して点灯しているように見えるはずでる。
こうして整理したフローチャートを下に示す。

DSWR/Lは進行方向選択スイッチの状態であり、PTS1~3はポイント操作スイッチの状態を示します。J1GやS5Rはホーム1の場内信号やホーム5の出発信号の緑と赤のLEDをON/OFFさせる変数です。
このパネル表示用のスケッチは、サブルーチン(今では関数というでしたね!)として記述しておき、手動制御の場合でも、自動運転の場合でもメインループから読み出して実行させるようにしています。
   **************************************************
メインループは、最初に手動運転モードか、自動運転モードかを判定するようにしてそれぞれのアクションに分岐させます。手動運転モードの場合は、スイッチの状態を変数として取り込み、関係する出力ポートに指示を出すと同時に、パネル表示の関数を呼び出て実行させます。
また電車の運転モードは、登山口駅と頂上駅の登りと降り、そして、登山口駅と待避線とを往復する四つのモードしかないので、これらのモードをmode1(densha)~mode4(densha)の様に関数化しておき、メインループでは、モードと電車番号を順番に記述して運行ダイヤを構成させた。
   **************************************************
運転状況について動画で紹介しましょう。

また、2編成での運行状態も紹介します。

これらスケッチの内容やフローチャートの詳細については、鉄道模型工作実験室の下記の目次を参照してください。

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

×

非ログインユーザーとして返信する