So-net無料ブログ作成
検索選択

単線自動閉塞 その7 [単線自動閉塞]

このシリーズもいつのまにか7回目、ラッキー7という縁起のいい回になりました。

P1060330.JPG

ヤフオクで落札したPECOのPL-26も到着しました。

暗闇の中からの脱出を図りましょう。

はじまり、はじまり。

行き詰ったときは神頼みに限ります。(そっちかい)

千日回峰行、滝行、丑の刻参り、お遍路さん、ついでに、こっくりさんまでやったのですが、一向に答えは出てきません。

日頃の信心の無さを見抜かれてしまっているのでしょうか、仕方ないので自分で考えますか。

単線自動閉塞2.jpg

そもそも、「てこ」の上り下りの判定を、ケチってD54ピンのみでやったのが間違いの元だったのではないでしょうか?

単線自動閉塞6.png
(起動時はPECOポイントスイッチが「OFF」状態ですので、信号機は全消灯状態です。「てこ」を切り替えると点灯します)

そこで、上りはD54ピン、下りはD55ピンと別々に受け持ってもらいます。

スケッチも変更します。

#define TEKO_NOBORI 54  //上り
#define TEKO_KUDARI 55 //下り
を、追加&変更。

void setup()内、
  
pinMode(TEKO_NOBORI, INPUT);    //DN6851使用
pinMode(TEKO_KUDARI, INPUT);    //DN6851使用
を、追加&変更。

void loop() 内の、
 if (digitalRead(TEKO_KUDARI) == HIGH) {    //てこ下り
の、追加。

今度はどうでしょうか?

うまく行く予感がします。(ぬか喜びかも)


(SIG_2のみに注目してください)

U\(●~▽~●)Уイェーイ!

Arduinoのループ沼から脱出することが出来ました。

後は各信号機を条件に沿って書いていけばいいのですが、、、、、、その前に。

ローカル単線とはいっても、泣く子も黙る「土讃線」です。

閉塞区間後続11.jpg
<イラスト1>

後続列車の「南風太郎」が「おじゃまします~ぅ」と第2閉塞区間まで進入してくることが想定されます。

(それを言うなら、「南洲太郎」だろ?ってツッコミを入れたあなた、歳がバレますぜ)

前回の「SIG_2」のスケッチです。

  //SIG_2
  if (digitalRead (SEN_2) == HIGH) {
    digitalWrite(SIG_2G, LOW);
    digitalWrite(SIG_2R, HIGH);    //R現示
  }
  if (digitalRead(SEN_3) == HIGH) {
    digitalWrite(SIG_2R, LOW);
    digitalWrite(SIG_2Y, HIGH);    //Y現示
  }
  if (digitalRead(SEN_4) == HIGH) {
    digitalWrite(SIG_2Y, LOW);
    digitalWrite(SIG_2G, HIGH);    //G現示
  }

このスケッチは後続列車は無しのときのスケッチです。

「SEN_2」を通過したときに、「G」を消して「R」を点灯しただけです。

<イラスト1>を見てください?

「Y」のときにも、後続に「SEN_2」は通過されることもあるのです。

そこで、

  if (digitalRead (SEN_2) == HIGH) {
    digitalWrite(SIG_2Y, LOW);     //追加
    digitalWrite(SIG_2G, LOW);
    digitalWrite(SIG_2R, HIGH);    //R現示
  }

「Y」も消すスケッチを追加します。

「R」のときはそのままです。

「SEN_3」は、

if (digitalRead(SEN_3) == HIGH) {
  digitalWrite(SIG_2G, LOW);    //追加
    digitalWrite(SIG_2R, LOW);
    digitalWrite(SIG_2Y, HIGH);    //Y現示
  }

ここまで来ると各センサーの反応と「SIG_2」の点灯の関連性が解ると思います。

3灯式信号機は、かならずどれか1つの色が点灯します。

「SIG_2」は「SEN_2」が反応したら、必ず「R」、「SEN_3」が反応したら、必ず「Y」です。

それ以外の2色はすべて消してしましょう。

さて、次はいよいよ両端に通過待ちの出来る駅を設置して(ポイントも)「場内信号」「出発信号」の制御をして単線自動閉塞の完成を目指します。

最後に、単線自動閉塞の閉塞区間の完成動画とスケッチをご覧いただき、本日はこれにてお別れです。

(「SIG_8」は「SEN_8」を踏んでいないので「G」のままになっています。)

#define TEKO_NOBORI 54  //上り
#define TEKO_KUDARI 55  //下り

#define SEN_1 22
#define SEN_2 23
#define SEN_3 24
#define SEN_4 25
#define SEN_5 38
#define SEN_6 39
#define SEN_7 40
#define SEN_8 41

#define SIG_1G 26
#define SIG_1Y 27
#define SIG_1R 28
#define SIG_2G 29
#define SIG_2Y 30
#define SIG_2R 31
#define SIG_3G 32
#define SIG_3Y 33
#define SIG_3R 34
#define SIG_4G 35
#define SIG_4Y 36
#define SIG_4R 37
#define SIG_5G 42
#define SIG_5Y 43
#define SIG_5R 44
#define SIG_6G 45
#define SIG_6Y 46
#define SIG_6R 47
#define SIG_7G 48
#define SIG_7Y 49
#define SIG_7R 50
#define SIG_8G 51
#define SIG_8Y 52
#define SIG_8R 53

void setup() {
  pinMode(TEKO_NOBORI, INPUT);    //DN6851使用
  pinMode(TEKO_KUDARI, INPUT);    //DN6851使用

  pinMode(SEN_1, INPUT);
  pinMode(SEN_2, INPUT);
  pinMode(SEN_3, INPUT);
  pinMode(SEN_4, INPUT);
  pinMode(SEN_5, INPUT);
  pinMode(SEN_6, INPUT);
  pinMode(SEN_7, INPUT);
  pinMode(SEN_8, INPUT);

  pinMode(SIG_1G, OUTPUT);
  pinMode(SIG_1Y, OUTPUT);
  pinMode(SIG_1R, OUTPUT);
  pinMode(SIG_2G, OUTPUT);
  pinMode(SIG_2Y, OUTPUT);
  pinMode(SIG_2R, OUTPUT);
  pinMode(SIG_3G, OUTPUT);
  pinMode(SIG_3Y, OUTPUT);
  pinMode(SIG_3R, OUTPUT);
  pinMode(SIG_4G, OUTPUT);
  pinMode(SIG_4Y, OUTPUT);
  pinMode(SIG_4R, OUTPUT);
  pinMode(SIG_5G, OUTPUT);
  pinMode(SIG_5Y, OUTPUT);
  pinMode(SIG_5R, OUTPUT);
  pinMode(SIG_6G, OUTPUT);
  pinMode(SIG_6Y, OUTPUT);
  pinMode(SIG_6R, OUTPUT);
  pinMode(SIG_7G, OUTPUT);
  pinMode(SIG_7Y, OUTPUT);
  pinMode(SIG_7R, OUTPUT);
  pinMode(SIG_8G, OUTPUT);
  pinMode(SIG_8Y, OUTPUT);
  pinMode(SIG_8R, OUTPUT);

}

void loop() {
  if (digitalRead(TEKO_NOBORI) == HIGH) {    //てこ上り
    digitalWrite(SIG_1R, LOW);
    digitalWrite(SIG_2R, LOW);
    digitalWrite(SIG_3R, LOW);
    digitalWrite(SIG_4R, LOW);
    digitalWrite(SIG_1Y, LOW);
    digitalWrite(SIG_2Y, LOW);
    digitalWrite(SIG_3Y, LOW);
    digitalWrite(SIG_4Y, LOW);
    digitalWrite(SIG_1G, HIGH);
    digitalWrite(SIG_2G, HIGH);
    digitalWrite(SIG_3G, HIGH);
    digitalWrite(SIG_4G, HIGH);


    digitalWrite(SIG_5G, LOW);
    digitalWrite(SIG_6G, LOW);
    digitalWrite(SIG_7G, LOW);
    digitalWrite(SIG_8G, LOW);
    digitalWrite(SIG_5Y, LOW);
    digitalWrite(SIG_6Y, LOW);
    digitalWrite(SIG_7Y, LOW);
    digitalWrite(SIG_8Y, LOW);
    digitalWrite(SIG_5R, HIGH);
    digitalWrite(SIG_6R, HIGH);
    digitalWrite(SIG_7R, HIGH);
    digitalWrite(SIG_8R, HIGH);
  }
  if (digitalRead(TEKO_KUDARI) == HIGH) {    //てこ下り
    digitalWrite(SIG_1G, LOW);
    digitalWrite(SIG_2G, LOW);
    digitalWrite(SIG_3G, LOW);
    digitalWrite(SIG_4G, LOW);
    digitalWrite(SIG_1Y, LOW);
    digitalWrite(SIG_2Y, LOW);
    digitalWrite(SIG_3Y, LOW);
    digitalWrite(SIG_4Y, LOW);
    digitalWrite(SIG_1R, HIGH);
    digitalWrite(SIG_2R, HIGH);
    digitalWrite(SIG_3R, HIGH);
    digitalWrite(SIG_4R, HIGH);

    digitalWrite(SIG_5R, LOW);
    digitalWrite(SIG_6R, LOW);
    digitalWrite(SIG_7R, LOW);
    digitalWrite(SIG_8R, LOW);
    digitalWrite(SIG_5Y, LOW);
    digitalWrite(SIG_6Y, LOW);
    digitalWrite(SIG_7Y, LOW);
    digitalWrite(SIG_8Y, LOW);
    digitalWrite(SIG_5G, HIGH);
    digitalWrite(SIG_6G, HIGH);
    digitalWrite(SIG_7G, HIGH);
    digitalWrite(SIG_8G, HIGH);
  }

  //SIG_1
  if (digitalRead (SEN_1) == HIGH) {
    digitalWrite(SIG_1Y, LOW);
    digitalWrite(SIG_1G, LOW);
    digitalWrite(SIG_1R, HIGH);    //R現示
  }
  if (digitalRead(SEN_2) == HIGH) {
    digitalWrite(SIG_1G, LOW);
    digitalWrite(SIG_1R, LOW);
    digitalWrite(SIG_1Y, HIGH);    //Y現示
  }
  if (digitalRead(SEN_3) == HIGH) {
    digitalWrite(SIG_1R, LOW);
    digitalWrite(SIG_1Y, LOW);
    digitalWrite(SIG_1G, HIGH);    //G現示
  }

  //SIG_2
  if (digitalRead (SEN_2) == HIGH) {
    digitalWrite(SIG_2Y, LOW);
    digitalWrite(SIG_2G, LOW);
    digitalWrite(SIG_2R, HIGH);    //R現示
  }
  if (digitalRead(SEN_3) == HIGH) {
    digitalWrite(SIG_2G, LOW);
    digitalWrite(SIG_2R, LOW);
    digitalWrite(SIG_2Y, HIGH);    //Y現示
  }
  if (digitalRead(SEN_4) == HIGH) {
    digitalWrite(SIG_2R, LOW);
    digitalWrite(SIG_2Y, LOW);
    digitalWrite(SIG_2G, HIGH);    //G現示
  }
  //SIG_3
  if (digitalRead (SEN_3) == HIGH) {
    digitalWrite(SIG_3Y, LOW);
    digitalWrite(SIG_3G, LOW);
    digitalWrite(SIG_3R, HIGH);    //R現示
  }
  if (digitalRead(SEN_4) == HIGH) {
    digitalWrite(SIG_3G, LOW);
    digitalWrite(SIG_3R, LOW);
    digitalWrite(SIG_3Y, HIGH);    //Y現示
  }
  //SIG_4
  if (digitalRead (SEN_4) == HIGH) {
    digitalWrite(SIG_4Y, LOW);
    digitalWrite(SIG_4G, LOW);
    digitalWrite(SIG_4R, HIGH);    //R現示
  }
  //SIG_8
  if (digitalRead (SEN_8) == HIGH) {
    digitalWrite(SIG_8Y, LOW);
    digitalWrite(SIG_8G, LOW);
    digitalWrite(SIG_8R, HIGH);    //R現示
  }
  if (digitalRead(SEN_7) == HIGH) {
    digitalWrite(SIG_8G, LOW);
    digitalWrite(SIG_8R, LOW);
    digitalWrite(SIG_8Y, HIGH);    //Y現示
  }
  if (digitalRead(SEN_6) == HIGH) {
    digitalWrite(SIG_8R, LOW);
    digitalWrite(SIG_8Y, LOW);
    digitalWrite(SIG_8G, HIGH);    //G現示
  }
  //SIG_7
  if (digitalRead (SEN_7) == HIGH) {
    digitalWrite(SIG_7Y, LOW);
    digitalWrite(SIG_7G, LOW);
    digitalWrite(SIG_7R, HIGH);    //R現示
  }
  if (digitalRead(SEN_6) == HIGH) {
    digitalWrite(SIG_7G, LOW);
    digitalWrite(SIG_7R, LOW);
    digitalWrite(SIG_7Y, HIGH);    //Y現示
  }
  if (digitalRead(SEN_5) == HIGH) {
    digitalWrite(SIG_7R, LOW);
    digitalWrite(SIG_7Y, LOW);
    digitalWrite(SIG_7G, HIGH);    //G現示
  }
  //SIG_6
  if (digitalRead (SEN_6) == HIGH) {
    digitalWrite(SIG_6Y, LOW);
    digitalWrite(SIG_6G, LOW);
    digitalWrite(SIG_6R, HIGH);    //R現示
  }
  if (digitalRead(SEN_5) == HIGH) {
    digitalWrite(SIG_6G, LOW);
    digitalWrite(SIG_6R, LOW);
    digitalWrite(SIG_6Y, HIGH);    //Y現示
  }
  //SIG_5
  if (digitalRead (SEN_5) == HIGH) {
    digitalWrite(SIG_5Y, LOW);
    digitalWrite(SIG_5G, LOW);
    digitalWrite(SIG_5R, HIGH);    //R現示
  }
}

注)「てこ」の切り替えのスケッチでは、「G」と「R」の切り替えしかしないのですが、切り替えた時に「Y現示」の信号機が「Y」点灯したまま残ってしまうので、「Y」も消すスケッチを追加しています。

マグネット_シングル.jpg

単線とはいえ往復運転をしますので、長編成の場合は先頭車両と最後尾車両にマグネットを付けると思われます。

その場合でも、編成が1閉塞区間に収まれば誤作動は起こしません。

マグネット_ダブル.jpg

これは無理ですけどね。(-_-;)


タグ:鉄道模型
コメント(4)  トラックバック(0) 
共通テーマ:趣味・カルチャー

コメント 4

sin

>ローカル単線とはいっても、泣く子も黙る「土讃線」です。

ダイヤが山手線のように切迫してないのが救いですが、赤信号区間の時、
万が一、千が一、列車が進入したら自動停止するのですか??

信号だけ赤表示で実は列車が居ると給電されていて「進行」しませんか?? (まだ、子供は泣いたままです・・・)

90分に1本のダイヤなら、信号だけ切り替えてやれば誰も気がつきません。

製作、頑張ってください。

by sin (2016-05-31 21:19) 

親爺ぃ

sinさん、コメントありがとうございます。

>万が一、千が一、列車が進入したら自動停止するのですか??
泣く子も黙る土讃線を舐めてはいけません。(鉄錆の味がします)
当然ヒューマンエラー対策は実装しますよ。
お楽しみに。


by 親爺ぃ (2016-05-31 21:52) 

Nardi

暗闇に光信号機達が美しい!
またしても宇宙語すぎて何が書いてあるのか理解できませんが
かっこいい事には違いない。
しかしPL-26の元の値札の価格・・・おそろしあ。
by Nardi (2016-06-01 22:28) 

親爺ぃ

Nardiさん、コメントありがとうございます。

解らなくても大丈夫です、動画で「かっこいい」と思っていただけただけで十分です。
PL-26は高いなりの品物ですよ。
内部までバラしてみましたが、10年、20年と問題なく使えるものです。
まともな値段で買ったことない人間の言うことで説得力は無いですが。(笑)

by 親爺ぃ (2016-06-02 06:03) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0