ESP-8266でBトレ(第0回 はじめまして)

ごあいさつ

みなさんこんにちはけろけろです、猫に遊ばれてるおじさんです。鉄道模型が好きで、学生の頃は組み立て式や固定式のレイアウトを作って遊んでました。でも、社会人になってからは、時間も気持ちも(そしてお金も)余裕がなくてずいぶん長いこと離れてました。f:id:cacao1:20151128225231j:plain

ただ、おじさんはある遊び方をやってみたいなとずっと思いつづけていたのです。

それは「鉄道運行の模型化」です。

ダイヤに従って大手私鉄のように通勤電車をウジャウジャ走らせたり、明け方の一番列車からはじまって、通学列車、長距離特急(もちろん食堂車つき)、荷扱いしながらゆっくりはしる各駅停車、締めの夜行急行と、国鉄の亜幹線の一日を再現したりできたらいいな、通り過ぎる列車をぼーっと眺めたり、運転手になったり、運転指令になったり自由にできたらいいな、と思い続けていたのです。

最近になって、必要な構成要素が私のレベルでも扱えそうな程度に整ってきたので、気力のあるうちにチャレンジしてみることにしました。


鉄道模型の運転方法について(ちょっとおさらい)

もしかすると模鉄じゃない方も読んでくださるかもしれないので鉄道模型の主な制御方法についてちょっと説明します。

  1. ブロックコントロール

    線路をいくつかの電気的な区間に分けて、それぞれにパワーパックを接続して列車に給電するf:id:cacao1:20151128224503j:plain

  2. キャブコントロール

    線路をいくつかの電気的な区間に分けて、それぞれを制御盤の選択スイッチに接続し、それぞれの区間に給電するパワーパックを選択できるようにするf:id:cacao1:20151128224536j:plain

  3. DCC

    線路に電気のほかに魔法も流し、車両に乗った小人を操って列車を動かす...f:id:cacao1:20151128224658j:plain

    あ、魔法じゃなくてデジタルデータですね、それに小人さんではなくてマイコンでした。

それぞれ一長一短がありますが、走行する列車を眺めて楽しんだり、少数の列車を同時運転するには十分です。 でも、そのままでは「ウジャウジャ」するのはちょっと難しいんです。一日のストーリーに沿って列車を走らせるのも、忙しく手を動かせばできないことはなさそうですが、なんか違います。

おじさんの夢の実現を阻んでいたもの

しばらく(30年近く)鉄道模型から離れてますので、現在は少し違うのかもしれませんが、おじさんが思うような遊び方をするためには、次のような点をなんとかする必要があると感じていました。

  1. 制御盤から各セクションまで動力線をひく必要がある(DCC以外)

    組み立て式レイアウトやお座敷運転では、給電が大きな悩みです。まじめに閉塞を切ろうとすると電線の数が膨大になります。走行用電力以外にポイント用、信号用なども含めると、気が遠くなります。いきおい、駅は1、2か所、駅間は一セクションのようなプランになり、うじゃうじゃの夢は遠のきます。

  2. フィードバック情報がほとんどない

    列車をたくさん走らせるには、少なくとも「どの列車がどこを走っているか」という情報を制御側が知る必要がありますが「電線を少なく済ませる」という観点でセクションを区切っていると、電流を検知する方式では制御に必要なだけの情報が得られません。かといって線路にセンサーをとりつけると、その信号線が必要になります。結局、フィードバックは人間の目視でということになり、その結果、制御も人間がということになります。

どうやるつもりか

今回は上記の1と2を解決するために、次のような方法をとることにしました。

  1. 閉塞区間の数だけ電気的なセクションを作る。セクションごとにモータードライバを配置してそれらを個別に制御する。

  2. モータードライバに流れる電流を検知して、在線(速度)情報として使用する。

  3. 1 2のセット何個分かごとにコントローラ(以下「ゾーンコントローラ」と書きます)が取りまとめてサーバーとWiFiでやりとりする。

  4. サーバーは「3の情報」を「ユーザーインターフェイス」とやりとりする。

  5. サーバーはゾーンコントローラ用のサーバー、UI用のサーバー、のほかに管制サーバー、ダイヤサーバーを用意する(といっても1台のパソコンで全部動かすつもりですけど)

1~3はマイコンの世界で、4~5はPCの領域ですね。全体の構成は下の図のような感じです。 f:id:cacao1:20151128235918p:plain

必要な構成要素って何?

前項の方法を実現するために、次のようなハード、ソフト、サービスを使うことにしました。

  1. WiFi内蔵マイコン ESP-8266(ESP-WROOM-02)

    WiFiを使えば、遠く離れたセクションまで動力線や信号線をひっぱる必要がありません。 近くにACコンセントさえあればOKです。ESP-8266はこれまでにない、たくさん買ってもお財布にやさしいWiFiマイコンで、しかもArduinoC++で開発できます。Arduinoだとサーバーとの通信も簡単で、ipアドレスルーターssidを指定して「WiFi.begin();」などと書くだけでつながります。PWM出力は標準でできますし、IO拡張用のI2C通信もライブラリがあります。f:id:cacao1:20151128224600j:plain

    真ん中がESP-8266 (ESP-WROOM-02)本体です、右はピッチ変換基板付のスイッチサイエンスの製品です。
  2. PWMモータードライバBD6231F

    わずか3ミリ角くらいのチップですが1A流せます。耐圧が半分(18V)のBD6221Fでもいけそうですが、6231のほうが入手しやすい(秋月電子で売ってる)ので、これにしました。ポイントマシン(ユニトラック)が極性反転型なので、これの駆動にも使用します。でも、部品の金額構成比ではこれがいちばん大きいので、利用可能なもっと安い製品があれば乗り換えるかもしれません。f:id:cacao1:20151128224907j:plain

    BD6231Fです。そのままでは小さいので秋月のピッチ変換基板にはんだ付けしてあります。
  3. Bトレ

    フルスケールの模型をウジャウジャ走らせるのは予算的にもスペース的にも大変なので、Bトレにしました。子供の頃はEB45とかED58で遊んでいたので、その頃に戻った感じです。すでに何種類か集めましたけど、デフォルメのセンスが良くて好きです。f:id:cacao1:20151128224844j:plain

  4. SignalR,Nancy,Rx...

    サーバー側をシンプルに書くために使用を考えているフレームワークです。すべてMicrosoft製です(無料で使えます)。別に信者ではないのですが、MSの開発環境に慣れているので。f:id:cacao1:20151128232103p:plain

  5. プリント基板製造サービス

    ゾーンコントローラは同じものがたくさん必要なので、手配線では大変です。図面の電子データをもとに作ってくれる製造サービスがいろいろありますのでそれを利用するつもりです。

それでは始めます。これを書き始めた時点ではまだ動作を検証している段階ですので、途中で挫折するかもしれませんが...