フォトリフレクタで車両の位置を検知してエンドレス線路で2列車同時運転をしてみよう!

2022/9/1 7M4MON



概要

通常、エンドレス線路は1列車のみパワーパックで制御が可能ですが、ただぐるぐる回してもすぐ飽きてしまいます。
自動運転制御システムは各社から出ているようですが、趣味なので、フォトリフレクタとArduinoを使って2列車を同時に制御するシステムを製作しました。

レイアウト

NゲージはTOMIXかKATOがメジャーなようですが、ネットで評判の良かったKATOの Unitrackシステムを採用しました。
ただ1周ぐるぐる回しても面白くないので、立体交差を取り入れて2周回すことにします。
一般的な在来線車両の最小通過半径は R249 で、島式ホームは複線間隔の2倍(66mm)なので、
内側をR249、外側をR315とすると島式ホームと立体交差を取り入れた最小サイズのレイアウトになります。
R249⇔R315の66mmの移動は、unitrack_systemによれば、R481-15 + S64 + S64 + R481-15 または R781-15 + S64 + R781-15 で可能です。
今回はジョイントが少ないR718を採用しました。
お座敷レイアウトなので高架は 23-015 勾配橋脚基本セット を使用しますが、中央部の No.5 は高さ的には使用しなくても大丈夫です。
よって橋脚は片側あたり最小で 0-4 の5個となります。ただし、1〜4は Sジョイナーが接続できる高架線路が必要です。
4〜4 はS248の高架橋ですが、線路を跨ぐので、ワンポイントで 単線トラス鉄橋 緑 20-431 にしました。


島式ホームの駅は、 島式ホームB 階段付 23-172 を使用します。端面のジョイナーがむき出しですので、島式ホームエンドA 2本入 23-174 をあわせて購入しました。
このセットで20m級の4両編成の列車が停車できる長さになります。
以上の検討結果により作成したレイアウトが以下になります。


レイアウトの大きさは 約1400x650mm となりました。単品で揃えて、およそ1万2千円かかりました。


ハードウェア

車両位置検出にはフォトリフレクタ(TPR-105F)を使用しました。S249の中心付近に5mmの穴を開け、
ユニバーサル基板に実装したフォトリフレクタが露出するようにしています。



取り付けは M2 x 5mm のプラスチックネジ を使用。基板が干渉するリブとケーブルが出る部分は超音波カッターでカットしました。
先頭車両の中央付近に銀色のシールを貼って、フォトリフレクタを通過したときにLになるようにします。



---追記---
鉄道模型モジュールLAYOUTAWARD自作 T-TRAK台 に載せた ATS警報鳴動装置 で 応募 した際に
作成した プログラム では、検出処理を抜本的に見直したので、銀シール無しで車両を検出できるようになっています。
---追記おわり---


赤外線LEDに約11mA流して、コレクタ側を47kΩでプルアップしたとき、非検出時は約4.8V、検出時は 約0.3VとなりVery Goodです。
(閾値は半固定抵抗で調整できるようにしてあります。)
出力インピーダンスが高めなので、0.01uFをアナログ入力にぶら下げてますが、稀に前のポートの読み取り値を引きずるので、
ソフト的に2回読んで1回目を捨てるようにしてあります。本来はオペアンプでバッファするべきと思います。
ハードウェアのブロック図は以下のとおりです。



スピードはマイナス側を2SK4017でPWM制御しています。巡航速度と駅構内の速度は半固定抵抗で調整できるようにしてあります。
絶縁ギャップはS62Fの直後にマイナス側だけ入れてあります。
ユニバーサル基板に実装して以下のようになりました。Pro Mini上の低電圧レギュレータと入力側のタンタルコンデンサは外してあります。


ソフトウェア

スライドスイッチで1列車のみor2列車同時運転かを選択します。
電源投入時は列車の制御は停止状態となっています。停車位置のセンサが車両を検出すると緑信号に変わりますので、半固定抵抗を回して閾値を調整します。
調整が終わったら、タクトスイッチを押下し、列車の運転を開始します。
列車が駅構内に入ったことを検出すると、黄色信号となり、Duty比を徐行状態まで指定のステップで落として減速します。
列車が停止位置に到達したことを検出すると、列車を停止します。
2列車同時運転の場合は、対向ホームに列車が到着するのを待ちます。
発車条件を満たしたら、発車ブザーを鳴らした後、列車を一定時間(半固定抵抗で調整可)巡航速度にし、次の区間に渡します。
プログラムのフローチャートは以下のとおりです。

動作の様子は記事トップの動画をご参照ください。
ソースコードは github にアップしてあります。


DCC (desktopstation.py) でやる

もともと、 desktopstation.py は、これをDCCでやるために作ったのでした。
example_endless_chase.py がそれにあたります。


余談

中華製の Pro mini は、RAWに6V以上かけると電圧レギュレーターと入力のタンタルコンデンサが焼損するものがあるようです。
必要な電流が取れるか事前確認するために徐々に電圧を上げたところ、10V程度で火花&煙が出たので焦りました。
実験用電源で電流制限がかかり、幸いマイコンチップ自体は無事でしたが………。お気をつけください………。