こんにちは。車内補充券をお願いするときに「マニアなんですが」と前置きすると話が早いことに気づいた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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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をみなさんも始めてみませんか?