mipsparc が 2021年02月03日19時12分38秒 に編集
リポジトリのURL記述
本文の変更
こんにちは。mipsparcと申します。Twitterでも同名でやっておりますので、どうぞよろしくおねがいします。 さて、皆さんは鉄道はお好きでしょうか。 突然宣伝ですが、2月に改訂新刊の同人誌「改訂 鉄道車両内ネットワークの基礎」が出ますので、ぜひご覧ください。 [https://mipsparc.booth.pm/items/2705808](https://mipsparc.booth.pm/items/2705808) ## 序 私は、特に車両ではDE10型ディーゼル機関車というのが好きで、撮りに行ったり、牽引された客車列車に乗りに行ったりしています。  実はこの子、1960年代に製造が始まり、そろそろ置き換えの時期を迎えています。そのため、各種部品が車両基地公開やヤフーオークションに流れる状態になってきました。 数年前にマスコン(マスターコントローラ ≒ アクセル)は手に入れて、読み込む仕組みを作ってシミュレータとして運用していたのですが、ブレーキ装置が手に入らず、自作でどうにかやっていました。 この度、秋田県の臨海鉄道である「秋田臨海鉄道」様が廃業されるということで、現地オークションで5万円でブレーキ弁を落札しました。(箱に入れる方式で、他の方がいくら出したのかは不明なのでちょっと損したかも知れないですが)  落札したのは良いものの、現地(秋田)まで自分で改めて取りに行く必要が有るということで、日を改めて梱包材を大量に抱えて行ってきました。  こちら、左の制御盤は軽いのですが、ブレーキ装置は鋳鉄の塊でなんとおよそ30kg有ることが発覚し、梱包した上で、佐川ラージサイズ便(壊れても保証しない特約つき)でなんとか家に送ることができました。  ## ハード編 最初は空気圧をかけて実際に圧力センサーで取るのも考えましたが、専用のマニホールド(裏側から空気を出し入れするので、そのアダプターとなる装置)が必要になるので、早々に諦めました。  届いて数ヶ月放置していたのですが、ある日転がして落ち着いて裏側をみてみたところ、ブレーキレバーと同じ軸で直結したカムが有るのを発見しました!  カムの先端にはおあつらえ向きな六角ボルトとネジが出ていました。ネジはピッチが完全に一致した受けを用意して正確に接続するのは困難だと判断しました。 そこで、カップリングジョイントを六角ボルトに取り付けることにしました。  https://www.monotaro.com/p/2220/2513/ カップリングジョイントとは、モーターなどの軸と、他の機械の軸のズレを吸収する部材です。 特にこのアサ電子工業のボールカップリングは驚異的にこの要件に合致していて、大きな縦・横軸の変位を吸収しつつ、回転を確実・精密に伝えます。今回は六角ボルトを12mm側で固定して、反対側が6mmのものを発注しました。1190円でした。(安い!)  しかし、このままでは地べたに置いたままです。そこで、台を作ることにしました。(これが大変だった) 裏側にはM10の取り付け穴が4箇所以上あったため、まずはアダプターとなる厚い木板と4本のボルトで接続することにしました。大きな穴を電動ドリルで開けて、締結しました。穴の位置合わせがとても難しかったです。 アダプターとなる板は、東急ハンズで大きな板から切断していただきました。  台はスツール(椅子)として販売されている製品を流用しました。椅子のため、耐荷重は問題ないと思われます。重心位置が課題ですね。(5500円) https://item.rakuten.co.jp/kaiteki-homes/a7401-011  天板とアダプターの間を大量のタッピングネジで締結しました。このとき、下穴を深さ最後までしっかりとあけないとドリルが進まないのには苦しめられました。そして搭載完了!  次に、6mmの軸穴から得られた角度を電気信号に変換する必要があります。 今回は、秋月電子で扱っている多回転ヘリカルポテンショメータ BOURNS 3590Sを購入しました。これはふつうのボリュームは360°未満しか取得できないのが、なんと10回転まで取得できるという代物です。軸が長かったため、無理やり金属のこぎりで切ってしまいました。今考えれば切らなくても良かったと思います。 電圧の変化が小さいため、ArduinoのADCでは10bit(1024段階)段階のため足りません。そこで、別付けの16bit高精度ADCをつけることにしました。こちらも秋月電子で扱っているDIP化済みMCP3425で、ArduinoとI2Cで通信します。I2CはSPIよりも簡単なのでおすすめです。16bitは65535段階のため、十分な精度でした。  ただ、これにも罠があって、基準電圧の2.048Vまでしか測定できない(?)ので、抵抗分圧などをして工夫することが必要です。 タカチのSW-75Sというケースにポテンショメータを取り付けて、3ピンなので手頃な3.5mmオーディオジャックを流用してモジュールにして、ホットボンドで取り付けました。このとき失敗したのは、錫メッキ線でジャックと接続してしまった点です。錫メッキ線は硬いのでちょっとした負荷で半田面に衝撃が伝わるため割れてしまい、あとで撚り線で施工し直すことになりました。  これで、実際にブレーキハンドル角度を電圧に変換することに成功しました。動画は以下です。 https://twitter.com/mipsparc/status/1349696341027373058?s=20 そして、Arduinoとシリアル伝送を用いてPCに取り込むことにも成功しました。動画は上のリンクのツイートツリーにあります。  そして、それっぽい色で板を塗りました。せっかく調色屋さんに頼んだのですが、ちょっとズレてがっかりでした。  ## ソフト編 ところで、 > 数年前にマスコン(マスターコントローラ ≒ アクセル)は手に入れて、読み込む仕組みを作ってシミュレータとして運用していたのですが、ブレーキ装置が手に入らず、自作でどうにかやっていました。 と言いましたね。様子はこんな感じでした。  これは大学のサークルで個人的にやっていたのですが、左が自作のブレーキ弁です。軽いのが不満でしたが、本物が手に入って幸せです。このシステムは、運転操作をすると模型が走り、音が適切に鳴るというものです。動画は以下です [https://twitter.com/mipsparc/status/1188357493136605184?s=20](https://twitter.com/mipsparc/status/1188357493136605184?s=20) このシステムと統合すれば、夢が叶うわけです。 残念ながら緊急事態宣言下で部室から持ち出せないのですが、ブレーキだけでもAPIにつなげました。
詳細なソースコードは[GitHub](https://github.com/mipsparc/NController)を参照ください。すべてPythonで書かれています。シリアル通信を別プロセスで行い、ノンブロッキングで共有メモリで実行するのがポイントです。シリアル通信が固まったときにプログラム全体が落ちたり、多数の機器とシリアル通信するのを実現します。
詳細なソースコードは[GitHub](https://github.com/mipsparc/NController)を参照ください。[リポジトリ全体](https://github.com/mipsparc/NController)、すべてPythonで書かれています。シリアル通信を別プロセスで行い、ノンブロッキングで共有メモリで実行するのがポイントです。シリアル通信が一瞬固まったときにプログラム全体が止まるのを防止したり、多数の機器とシリアル通信するのを実現します。
今回書いたプログラムはこちらです。https://github.com/mipsparc/NController/blob/master/BrakeReader.py シリアル通信は一定の確率で異常値が出るので、それの読み飛ばしなどの処理に気を使いました。 そして… システムに統合することに成功しました。動画は以下です https://twitter.com/mipsparc/status/1356408776585146368?s=20 さらに、実際の鉄道模型を走らせるのにも使用できるようになりました。動画は以下です https://twitter.com/mipsparc/status/1356616736833892352?s=20 とりあえず今回は以上でブレーキシステムは完成とします。はやくマスコンを持ち帰って運転したいですね……! ## 今後の展望 当時、マスコンからの読み込みや速度計・圧力計サーボへの書き込みは専用のPIC+UART-USBでやっていたのですが、無駄が大きいので、この際に1つのArduinoにまとめてインターフェースボックスとしたいです。タカチの中サイズボックスと多芯ケーブルと多心コネクタ(UTPケーブルでも良い)をつかうことになりそうですね。 読んででいただきありがとうございました。 mipsparcでした。 (なお、DE10と文中では簡単のために言っていますが、正確にはDE15ラッセルヘッドです。鉄道詳しい人いたら気づいたかも知れませんが…まあ似てるしヨシ!)