HOME >> 鉄道模型自動運転システム > 往復運転モデル2の制御
■ はじめに
作成した制御回路を使用して少し複雑な往復運転モデルを作った。 今度のモデルには、基本となるいろいろな動作をプログラムに組み込んで、その動作確認をしようとするものである。 その内容を紹介しよう。
********** 省略 ******************** def direction1(densha): 運行ルート関数を定義 GPIO.output(12,GPIO.LOW) ポイントを設定 GPIO.output(20,GPIO.LOW) if readadc(densha, SPICLK, SPIMOSI, SPIMISO, SPICS) < 1000: sleep(0.2) 電車の設定をチェックし、OFFならこの運行を中止 return while readadc(4, SPICLK, SPIMOSI, SPIMISO, SPICS) < 1000 : duty = (readadc(densha, SPICLK, SPIMOSI, SPIMISO, SPICS)-2200)/20 v2.ChangeDutyCycle(0) 最初の通過センサまで減速走行 v1.ChangeDutyCycle(duty*2/3) sleep(0.2) sleep(0.2) if GPIO.input(23) == GPIO.LOW: alarm() 入線先のホームに電車が停止しているならアラーム関数へ while readadc(6, SPICLK, SPIMOSI, SPIMISO, SPICS) < 1000 : duty = (readadc(densha, SPICLK, SPIMOSI, SPIMISO, SPICS)-2200)/20 v1.ChangeDutyCycle(duty) 入線前の通過センサまで全速走行 sleep(0.2) duty = (readadc(densha, SPICLK, SPIMOSI, SPIMISO, SPICS)-2200)/20 v1.ChangeDutyCycle(duty*2/3) 入線前の通過センサからは減速走行 sleep(0.2) while GPIO.input(23) == GPIO.HIGH: 停止信号をチェック sleep(0.2) while GPIO.input(23) == GPIO.HIGH: もう一度チェックして完了 sleep(0.2) return ********** 省略 ******************** def alarm() : アラーム関数を定義 v1.ChangeDutyCycle(0) まず、電車を停止 v2.ChangeDutyCycle(0) while GPIO.input(25) == GPIO.LOW:リセットボタンが押されるまで待つ sleep(0.2) return try: 運行ダイヤを記述 while True: direction1(0) 電車0をdirection1 のルートで運行 sleep(2) direction2(0) 電車0をdirection2 のルートで運行 sleep(2) direction3(1) 電車1をdirection13のルートで運行 sleep(2) direction4(1) 電車1をdirection4 のルートで運行 sleep(2) ********** 省略 ********************
■ 制御回路の内容
往復運転モデル2を検討中のレイアウトを下に再掲載する。
記述内容を説明しよう。
進行先の入線予定のホームが空いているかチェックするタイミングは、走行前では停止信号がチェックできないのである。 レールへの電力が供給されていないので、停止しているかどうか判別できないのだ。 また、入線前の通過信号でチェックすると遅すぎると判断してこのタイミングでチェックするようにした。
このチェックポイントは、複数の電車を走らせようとする場合に生じるいろいろなフェール状態のひとつであり、そのためのフェールセーフ対策である。 そして、その処置方法も決めておく必要があるのだ。 システムを複雑にすればするほどフェールセーフ対策は必要となるが、ほどほどにしておくことにする。 あくまで、個人が楽しむホビーの範疇なのだ。
■ テスト走行モード 2-3
上記の機能を盛り込んだプログラムを走らせてみた。
だんだんプログラムの形が出来上がって来たので、さらに前に進むことにしよう。
2017/6/2 作成 M.T.