obnizを使ってタブレットから鉄道模型を操作してみる

　obnizを使用して、タブレット(スマホ)から鉄道模型を制御する装置を製作したので紹介します。

　鉄道模型は車両にDCモータを搭載しており、下図のようにレールを介して直流電力を供給することで自走します。
![図1.png](https://qiita-image-store.s3.amazonaws.com/0/315544/7fdf735a-21fd-be20-b5ed-36a46191fea8.png)

　鉄道模型に搭載されるDCモータは、電圧に比例して回転数が増加するため、PWM駆動でDuty比を調整することで、速度を制御できます。

　obnizにはPWM出力を簡単に調整する機能があるため、これを使えば鉄道模型を制御できそうです。しかし、obnizで鉄道模型を駆動するにあたり、大きな問題が1つあります。
それは、鉄道模型は最大電圧12Vで駆動されることを前提に設計されているのに対し、
obnizの出力ピンは最大電圧が5Vであり、電圧が不足していることです。
obnizの各ピンは1Aまで流せるため、obnizで直接駆動する場合、小型車両を低速で走らせることはできるかもしれませんが、長い編成の列車を高速で走行させることは困難です。そのため、モータドライバを用いてobnizのPWM出力を電圧増幅し、鉄道模型に供給することにしました。

【モータドライブ回路】
モータドライブ回路は下記のようにしました。
![図2.png](https://qiita-image-store.s3.amazonaws.com/0/315544/97e521f7-a54e-d753-4300-6f712d4c3a63.png)

　モータドライバは、駆動部がFETタイプのTB6643KQです。以前、値段をケチって駆動部がトランジスタタイプのものを使用したことがありますが、軽負荷でも発熱がひどく放熱板が必須でした。今回採用したモータドライバは発熱が少なく、1編成の駆動であれば放熱板が無くても余裕で駆動できます。(今後複数編成を同時に走行させる重負荷試験もしてみる予定です。)
　obnizとモータドライバの間には、ORゲートとインバータがはいっています。ORゲートは、後述する短絡保護に用いています。インバータは、片方のobnizPINからPWMパルスを入力した際に、モータドライバがONとショートブレーキ(HブリッジのGND側FETが両方ON)の2状態で動作するようにするため入れています。鉄道模型では、先頭車と最後尾車に搭載されたヘッドライトとテールライトが、モータと並列に接続されています。実際の列車では、先頭車でヘッドライト、最後尾車でテールライトのみが点灯するようになっていますが、模型を駆動する際にモータドライバのOFF状態をストップ(Hブリッジの全FETをOFF)にしてPWM駆動すると、先頭車と最後尾車の両方で、ヘッドライトとテールライトが同時に点灯してしまう現象が発生します(この現象の詳細についてはこちらの記事を参照ください。https://blogs.yahoo.co.jp/kimsh8919/36789843.html)
この現象を防止するため、モータドライバのOFF状態をショートブレーキにします。

　回路図の右側にある保護回路について説明します。鉄道模型では、電気が流れるレールがむき出しのため、障害物や列車の脱線により短絡するリスクが高いです。そのため、短絡を検知して電力の供給を停止する、保護回路が必須となります。一応ポリスイッチを入れていますが、ポリスイッチは応答が遅いため、瞬間的に電力供給を停止できる保護回路を組み込みました。モータドライバとGNDの間に設けたシャント抵抗が、モータドライバに流れる電流を電圧に変換します。おおよそ3A以上が流れると電圧が0.6Vとなり、トランジスタ2SC1815がONになります。2SC1815がONになると、2SA1015にも電流が流れ、両トランジスタに流れる電流をOFFにしない限り電流が流れ続けます。この2つのトランジスタを組み合わせた回路はサイリスタ回路と言います。サイリスタに電流が流れると、右下にあるインバータの入力がLowになり、左上にあるORゲートの入力がHighになります。ORゲートの出力が両方Highになると、インバータによりモータドライバの入力が両方Lowになるため、モータドライバのHブリッジはストップ状態となり、モータへの電流供給が停止します。回路図の右端にある隣のスイッチを押すことで、サイリスタ回路に流れる電流がバイパスされてサイリスタがOFFになるため、保護が解除されます。

【obnizプログラム】
続いて、obnizのプログラムを紹介します。ロジックの紹介をすると長くなるため、ここでは操作画面とざっくりした動作について紹介します。
操作画面は下図の通りです。HTMLやCSSの技術が未熟なため、シンプルな素材のみで構築しています。
![図3.png](https://qiita-image-store.s3.amazonaws.com/0/315544/00021b2f-a2f1-275c-d636-f71a948214f9.png)
　画面上部はパラメータ設定部で、Duty比と速度の関係や駆動周波数、加速度や減速度の設定をします。

　この制御画面では、本物の電車と同じように、操作レバーで加速度と減速度を制御します。この操作レバーは、車で言うところのアクセルとブレーキのようなもので、操作量に応じて加減速度が増減します。操作レバーで指定した加減速度を積分し、速度を計算します。鉄道模型のモータはDuty比と速度が比例するため、下図に示すような比例関係に当てはめて、速度からDuty比を計算します。
![図4.png](https://qiita-image-store.s3.amazonaws.com/0/315544/eb72c2e9-7876-2ab4-1150-a0866aa85504.png)


　操作画面には、方向切替スイッチが付いており、スイッチ操作時に、PWM出力するobnizPINを切り替えることで、モータの回転方向を切替えます。
　実際の電車は、操作レバーを中立位置にした場合、惰行という慣性力だけで走行する状態となります。惰行時には、空気抵抗などの影響で徐々に速度が落ちてきます。今回のプログラムでもそれを再現しており、操作レバーを中立位置にすると、10秒に1km/hのペースで減速します。定速スイッチは、その名の通り押した瞬間の速度を維持して走行するためのスイッチです。
　操作画面の状況表示部は、その時の速度やDuty比を表示しています。「ノッチ」は操作レバーの位置を示しており、正なら加速、負なら減速です。写真の例では、5段目の加速状態で、現状のプログラムにおいては最大の加速度が出せるレバー位置です。「減速度」は、その時のレバー位置に応じた加速度[km/h/s]を示しており、正なら加速、負なら減速です。本当は加速度と書くべきところを間違えて記載しております(笑)。

　実際に、列車を動かしてみました。
https://youtu.be/WC1Ds8taLQA
(埋め込みができなかったためリンクでご勘弁ください)

　加速→惰行→減速で運転しています。
今回は定速走行は使用しませんでした。
若干オーバーランしていますが、ピタリと駅に止めるのは結構難しいです。

　こんな感じで、モータドライブ回路を外付けすることで、タブレット(スマホ)から鉄道模型を制御する装置を構築することができました。HTMLと連動しているため、制御パラメータなどを見ながらプログラムのデバッグを進めることができ、マイコンを使用する場合と比較して短時間で開発できたかと思います。
今後は、CSSの技術を磨き、操作画面をしっかりしたものに仕上げていきたいと考えております。


【おまけ】
　モータドライブ回路の短絡保護機能の動作チェックの様子を紹介します。
https://youtu.be/mArOsekNofM

　レールに金属製のドライバを押し付けてわざとショートさせています。ショートすると黄色いLEDが点灯し、保護回路が動作していることを知らせてくれます。また、モータへの電流供給が停止するため、列車が一瞬で停止します。一見、きちんと仕事をしているように見えます。
　しかし、本来はサイリスタ回路の働きにより、一度保護回路が動作したらスイッチを押すまで保護状態が継続するはずです。それにもかかわらず、動画ではドライバを離したらすぐに保護状態が解除されています。このことから、保護回路は想定通りの動作をせず、実際は瞬間的な通電と停電を繰り返しているものと考えられます。恐らくですが、5Vとサイリスタ回路の間の抵抗値が10kΩと小さく、サイリスタがON状態を保てる最小電流を下回っている事が原因かと思います。
　ただ、保護の応答性が良いためか、ショートさせている間のモータドライバからの発熱はほとんどなく、これはこれでよいのかな？とも思います。この辺は、もう少し色々な条件で検証してみたいと思います。


【最後に】
　obnizとあまり関係ないものばかりですが、下記ブログで鉄道模型の制御装置に関していくつか記事を書いているため、興味がある方は是非御覧いただければと思います。
https://jusosharyo.blog.fc2.com/