こんにちは。車内補充券をお願いするときに「マニアなんですが」と前置きすると話が早いことに気づいたmipsparcです。
ここ数日でDCC(Digital Command Control/デジタル指令による鉄道模型制御)をはじめるのに成功しました。
DCCには以前から憧れがありましたが、私がDCCで実現したいことは以下です。
- 低速からのなめらかな加速
- アナログ制御では電圧が低い低速での走行が不安定になり、ある程度勢いをつけないと発進できません。
- 勾配や曲線での安定した速度
- アナログ制御では一定の速度を維持するのは容易ではありません。
- 安定したヘッドライト・テールライトの常点灯
- 常点灯はアナログでも可能ですが、チラツキがあったり、速度によって明るさの違いがあります。
- 再現性のあるコンピュータとの接続
- コンピュータ制御でいろいろなマスコンと接続したいのですが、外部デジタル入力可能なアナログコントローラは市販されていません。これまでは自作していましたが、1点もので再現性がなく、信頼性にも大きな不安がありました。
Twitterで仲良くしてくださっている@LOCKE00さんに宣伝されて、DesktopStationさんのDSair2というDCCコマンドステーション(コントローラのこと)を導入することにしました。
当時はキットなら学割もあったので、ありがたく利用させていただきました。はんだ付けは苦手ではないので、制作はあっさりできました。
FlashAirという無線LAN APになるSDカードを差し込むと、無線で操作できます。FlashAirを取り外すと、USBで制御できます。後半でUSB経由でコンピュータ制御をしています。
DSair2でアナログ鉄道模型を動かす
アナログ鉄道模型コントローラとしても使用できるため、まずはアナログ+USB接続+Linuxで試してみました。コマンドリファレンスは以下です。ソースコードを読めばわかるのですが、実はWiFiでもUSB接続でも、共通のコマンドが使えます。
WiFi: https://desktopstation.net/wiki/doku.php/dsair_wifi_specification
USB(シリアル): https://desktopstation.net/wiki/doku.php/desktop_station_s_serial_communication_specification
#coding:utf-8 | |
import serial | |
import time | |
def send(s, value): | |
s.write(value.encode('ascii') + b'\n') | |
s.flush() | |
def init_dsair2(s): | |
time.sleep(0.3) | |
send(s, 'setPower(0)') | |
time.sleep(0.3) | |
send(s, 'setPower(0)') | |
time.sleep(0.3) | |
s.reset_input_buffer() | |
ser = serial.Serial('/dev/ttyUSB0', baudrate=115200, timeout=0.1, write_timeout=0.1, inter_byte_timeout=0.1) | |
# DSair2を再起動 | |
send(ser, 'reset()') | |
time.sleep(1) | |
# 1回目の初期化 | |
init_dsair2(ser) | |
send(ser, 'setPing()') | |
if (not ser.read(50).decode('ascii').endswith('200 Ok\r\n')): | |
print('DSair2を正常に認識できませんでした。終了します') | |
exit() | |
else: | |
print('DSair2を正常に認識しました。') | |
# 2回目の初期化 | |
init_dsair2(ser) | |
print('DSair2 起動完了') | |
for speed in [0, 400, 350, 350, 350, 350, 350, 350, 280, 280, 280, 250, 0]: | |
way = 1 | |
command = f'DC({speed},{way})\n' | |
send(ser, command) | |
time.sleep(0.2) |
失敗編: デコーダとコマンドステーションの相性問題
KATO DE10に組み込むため、KATO公式で指定されているデコーダ Digitrax DN163K4Aを2つ手に入れました。機関車は内部構造が複雑でしたがなんとか組み込み、動かそうとすると… 明らかにうまく動いていない。
なんと、DSair2とDigitraxのデコーダは相性問題があり、動かないことがあるようです。DSair2の説明にも書いてあるので私の責任なのですが、これはDCCの大きな課題ですね… アナログ鉄道模型ならどんな組み合わせでもまず動くので。規格はあるのにインターオペラビリティがない。
成功編: DSair2とSmileDecoder N18とE531系
失敗で心が折れてしまって数ヶ月ブランクがあったのですが、気を取り直して再度挑戦してみることにしました。
今度は動作確認がとれている同人ハードのSmileDecoder N18をKATO E531系に組み込むことにしました。Next18(N18)というのはコネクタ規格の名前です。
KATOの一部の鉄道模型はDCCフレンドリーといってKATO純正のデコーダを組み込みやすく設計してあります。このスロットに差し込むためのExpBoardという同人ハードのボードと、屋根裏に設置するEC-Slimというボードを使うことで、DCCフレンドリーの鉄道模型に容易にNext18規格のデコーダを取り付けることができます。
床下から屋根裏の配線材に迷って、適当に余っていた太めのポリウレタン銅線を使ったところ、バネ性が強すぎて難儀していまいました。他の方はどうされているのか知りたいです。
ともかく、車両には無加工でデコーダの取り付けに成功しました。試しに動かしてみると…動いた!!
下記の動画では、三鶯重工(サンイン重工)のワンハンドルマスコンOHC-PC01AとPythonで繋ぎこんでいます。
成功編: DSair2とKATO(Digitrax) FL12とE531系
E531系の動力のDCC化には成功しました。
先頭車はアナログのままなので、ヘッドライトとテールライトが常時点いてしまっています。そこで先頭車用のデコーダを搭載します。ライトのデコーダは相性問題が少ないとのことで、試しに純正デコーダ FL12をまた試してみることにしました。
組み込みは簡単で、裏の小さい蓋を開けて、差し込むだけです。最初は接触不良かうまくいかなかったのですが、数回チャレンジしてみると、正常に動作しました。完璧です!
成功編: DSair2とDE29x2_56KとKATO DE10
E531系の成功に味をしめて、DE10に再チャレンジしてみたくなりました。
永末システムさんのデコーダは動作するとの情報をいただき、KATO DE10に対応したDE29x2_56Kを購入して導入してみました。
チップLEDもそこまで苦労することなく実装に成功し、実車に搭載すると…
一発で動きました! 多少音がするのが動力のせいなのかBEMFによるものなのかわかりませんが、そこまで気になるほどではありません。
ライトも正常に光り、成功です!
ワンハンドルマスコンでDCC車両を動かす
出身サークルの文化祭展示用にでも使えるかと、リアルなワンハンドルマスコンでDCC車両を動かせるようにしました。
動画は上のほうにはったやつです。ソースコード(リポジトリ)を以下に貼っておきます。Python3です。
https://github.com/mipsparc/ECController
結論
DSair2とワンハンドルマスコンと各種デコーダにより、シンプルでスマートにDCCによる運転体験システムの構築ができました。
DSair2が一旦生産終了してしまったようなのは残念ですが、シリーズの後継機種がそのうち出るということなので、期待しています。
サウンドや室内灯といった固有の機能もそうですが、走行の安定性も得られるDCCをみなさんも始めてみませんか?