So-net無料ブログ作成

Kato SoundBoxをArduinoで操作する。その5 [SoundBox]

 やっと、ここで、Arduinoが出てきます。前置き(というかまあそっちがメインですし)が長かったですが。
 SmartControlerの代わりにArduinoNanoで制御します。ArduinoNanoはPCのArduinoIDEのCOMモニタから動かそうと思いましたが、高機能にしないと、いろいろ面倒くさい気がしてきて、結局PC側はDesktopStationとして、そこからDCCアドレスの3番の時だけ反応するようにしました。使っているポートはArudinoUnoでもありますので、そっちでも使えると思います。
 SoundBoxとの通信はどうやら3.3Vですが、私の持っているArduinoNano(互換チップ)は5Vです。ということで、Txは適当に分圧して、3Vあたりが出るようにしました。一応、サウンドボックスからの受取用にRxも繋ごうと思って、結局、こんな図面をブレッドボードで組んでいます。
SmartControllerControl.png

 写真にするとこうです。
re_DSC02496.jpg

 で、ステレオミニジャック部分の波形はこうなりました。まあ、3.3V超えていないし、送受信も問題なしいいかなあというところです。(マネして、壊しても私は知りませんが)
 通信の途中までは信号がGNDまで落ちていません。ここまでがArduinoNanoからの送信で、GNDまでほぼ落ち切っている真ん中から右側がSoundBoxからの受信です。
Arduinoソフトウェアシリアル信号.png

 で、ソフトですが、DesktopStaionにつながるものはこちらです。 SoundBoxとのコントロールはSoftwareSerialを使用しているので、コンパイルにはライブラリを追加する必要があるかもです(私は大丈夫でした)。Functionはボタンの①~⑥をFn0~Fn5に割り当てています。そして、警笛の変わりだねをFn6,Fn7に割り当てています。
 良く知らなかったのですが、SounBoxに12VのACアダプタを挿して通信を使うことで、SoundBox単体で音も出るし、モーターも制御できるコントローラになります。ただし、基本BEMFでの制御のため、どうも、使いづらいです。モーター付けて回らないと、走行音が出ないとか、止まらないとドア開閉できないけど、なかなかモーターが止まらないとか。音源として利用するなら、スピード命令に追従するような、モーターチックなローパスフィルタが付ければよさそうですが、さっぱり見当が付きません。誰か作っていないかしら?
 で、せっかくなので、とても久しぶりの動画です。
 蒸気機関車の場合


 京急2100形の場合
 
 
 蒸気機関車で遊んでみて思ったことは、割とMp3V5のSLバージョンってイケてるかもと思ったことです。
 その6に続きます。(スケッチの中身で必要そうなところを説明します)



コメント(5) 

Kato SoundBoxをArduinoで操作する。その4 [SoundBox]

 さて、次は多分一番重要な命令の解析です。
 スマホからタップして、その時の命令をUSBシリアルコンバータで見ていくだけです。
 まずはファンクション系です。押すときにOn,離すときにOffします。なので、SoundBoxで2回押すと音が変わるものドアの開閉音とかはこれだと、On,Off,OnOffとする必要があります。また、警笛、汽笛の変更はSoundBopxでは①、②の同時押しして選択とかのようですが、こちらは「0101840X」(Xの部分に0,1,2を入れる)の変更で行けるようです。

警笛、汽笛1
0101840084: 0101840185.  →切り替え
0101800001000180: 0101800181. →On
0101800001000081: 0101800181. →Off

警笛、汽笛2
0101840185: 0101840185. →切り替え
0101800001000180: 0101800181. →On
0101800001000081: 0101800181. →Off

汽笛3(京急は無い)
0101840286: 0101840185. →切り替え
0101800001000180: 0101800181. →On
0101800001000081: 0101800181. →Off

ドア、排水
0101800002000280: 0101800181. →On
0101800002000082: 0101800181. →Off

制動
0101800004000480: 0101800181. →On
0101800004000084: 0101800181. →Off

C-ATS、注水
0101800008000880: 0101800181. →On
0101800008000088: 0101800181. →Off

惰行、絶気
0101800010001080: 0101800181. →On
0101800010000090: 0101800181. →Off

ブザー、投炭
0101800020002080: 0101800181. →On
01018000200000A0: 0101800181. →Off

 次に方向転換とストップですが、
←方向
01018101000080: 0101810180.

→方向
01018101000181: 0101810180.

ストップ
01018102000083: 0101810180.

 次に、スピード、ボリューム、Start、Syncですが、

スピード
010181020FFF73: 0101810180. →max 100%
010181020CF17E: 0101810180. →80%
0101810209A72D: 0101810180. →60%
010181020678FD: 0101810180. →40%
010181020352D2: 0101810180. →20%
01018102000083: 0101810180. →min 0%
なので、「010181020」が命令、0%~100%で0x000~0xFFFと4096段階のようです。

ボリューム
010380FF7D: 0103800183. →max 100%
0103800082: 0103800183. →min 0%
なので、「010380」が命令、0%~100%で0x00~0xFFと256段階のようです。

START
0101810307FF7A: 0101810180. →max 100%
01018103000082: 0101810180.  →Min 0%
なので、「010181030」が命令、0%~100%で0x00~0x7FFと2048段階のようです。

SYNC
010181050CE46C: 0101810180. →max 100%
01018105000084: 0101810180. →min 0%
なので、「010181050」が命令、0%~100%で0x00~0xCE4と3300段階?のようです。(合ってるかなこれ?)

あとはアイドル時のパケットかしら?(送らなくても問題ないような気もした)
01040005: 0104000104.
01050307: 0105030007.
が続く・・・。

 まだまだ、続きますが、
結局、送受信の[LF](SmartControllerからの命令): (SoundBoxからの応答).のうち、
[LF](SmartControllerからの命令):を送ってしまえば、サウンドボックスは動いていました。
それで正しいのかどうかは知りませんが。
 その5に続く。

コメント(0) 

Kato SoundBoxをArduinoで操作する。その3 [SoundBox]

 とりあえず。信号がモニタ出来るようになったので、どんな信号が出ているか確認です。
 スマイラー様からお借りしたSoundBoxには本体添付の蒸気機関車と、別売りの京急2100形がありました。まずは京急2100形で信号の確認です。
 まず、SmartControllerがスマホにつながっていないときは、SoundBoxと以下の通信をしていました。
01000001: 0100000000000001.
01000001: 0100000000000001.
01000001: 0100000000000001.
01000001: 0100000000000001.
01000001: 0100000000000001.

 そして、SmartControllerがスマホにつながると、SoundBoxと以下の初期通信をしていました。
0101010203: 010101000001.
0101010100: 010101000001.
0101010302: 010101000001.
01030002: 0103000002.
0101010504: 010101000001.
0107800B8D: 0107800187.
0101010203: 010101000001.
0101010100: 010101000001.
0101010302: 010101000001.
01030002: 0103000002.
0101010504: 010101000001.
0107800B8D: 0107800187.
01040005: 0104000104.
01010303: 0101030201.
01010404: 0101040004.
01010606: 010106204B61746F20415342204B65694B7975204A6170616E65736520436F6D6D7574657220547261696E20536F756E642056312E32200022.

そして、そのあとは、アイドルパケットの送信みたいな感じで以下のリピートが続いていました。
01050307: 0105030007.
01040005: 0104000104.
01050307: 0105030007.
01040005: 0104000104.
01050307: 0105030007.
01040005: 0104000104.
01050307: 0105030007.

これが蒸気機関車の場合は、初期通信は以下です。
0101010203: 010101000001.
0101010100: 010101000001.
0101010302: 010101000001.
01030002: 0103000002.
0101010504: 010101000001.
0107800B8D: 0107800187.
0101010203: 010101000001.
0101010100: 010101000001.
0101010302: 010101000001.
01030002: 0103000002.
0101010504: 010101000001.
0107800B8D: 0107800187.
01040005: 0104000104.
01010303: 0101030300.
01010404: 0101040004.
01010606: 010106204B61746F20415342204A6170616E65736520537465616D2044353120536F756E642056312E32200076.

 命令はその2でも書きましたが、
[LF](SmartControllerからの命令): (SoundBoxからの応答).
となっております。
 また命令の中身ですが、例えば
0107800B8D: 0107800187.
のなかで、まず、SmartControllerからの命令は、分かりやすく書くと、
01 07 80 0B 8D
ですが、最後の8Dはパリティでパリティの計算は前から順にbitのXORを取っていくやり方です。
 具体的には、
①01^07 = 06
②06^80 = 86
③86^0B = 8D なので、パリティが8D
なので、命令は[LF]の後の0107800B、でパリティが8D、最後の「:」は通信の終端文字。
戻りは01078001でパリティが87、最後の「.」は通信の終端文字。のようです。
COMのモニタで見ると、「:」とSoundBoxからの受信の間にスペース(0x20)がありますが、
これは送受信の切り替え時間のタイミングに相当するように見えます。

 さて、構造もなんとなくわかったので、次は初期化ルーチンで何が行われているかですが、マニュアルないし、わかりません。なんか、レジスタをそのまま叩いているようにも見えますし、変な命令を書いて、動かなくなったら嫌なので、そういう実験もできませんし。(自分のじゃないし。自分のでも嫌だけど。壊れたら、「すいません。普通に使ってたら突然動かなくなっちゃって・・・。」と言いながら、ホビセンに持っていけばいいんだろうか・・・。」それは嘘つきだよな。たぶん。)
 SmartContorollerはファンクションやスピード以外に、ボリューム値やStart値、Sync値をいじれるのと、毎回、0にリセットされているようにも見えるので、SoundBoxに対して、そこら辺の全ての初期化をしているんじゃないのかなあと推測します。あとはスマホから、今、何のカードが刺さっているのかわかりますが、そうすると、それっぽい情報が流れているんだろうなあと思いながら見てみたら、それっぽい部分はわかりました。
 それは、「01010606:」の部分で、SoundBoxからの返り値は京急2100形は
0101 0620 4B61 746F 2041 5342 204B 6569 4B79 7520 4A61 7061 6E65 7365 2043 6F6D 6D75 7465 7220 5472 6169 6E20 536F 756E 6420 5631 2E32 2000 22.
最初の「0101 0620」辺りは命令を復唱しているだけっぽいですが、その後のByteをAsciiコードに直すと、
Kato ASB KeiKyu Japanese Commuter Train Sound V1.2 と読めます。
ASBってなに?って思って調べたら、SoundBoxはアメリカのKatoでは ASB = analog sound boxと言っているようです。
 で、同様に蒸気機関車の同じ部分「0101 0620」を見てみると、
0101 0620 4B61 746F 2041 5342 204A 6170 616E 6573 6520 5374 6561 6D20 4435 3120 536F 756E 6420 5631 2E32 2000 76
で、
Kato ASB Japanese Steam D51 Sound V1.2 ですって。D51がベースのようです。

 あとは、見比べてなんとなくそうだろうなあと思ったのは、
京急2100形 01010303: 0101030201. →戻り値が2
蒸気機関車 01010303: 0101030300. →戻り値が3
1番ボタンの警笛が京急は2種類、蒸気機関車は3種類だったので、その値かなあと思いつつ、
ここら辺を調べるのは、やめておきます。
 次は各命令の解析をします。
 その4に続く。

コメント(0) 

Kato SoundBoxをArduinoで操作する。その2 [SoundBox]

 続きます。
 RS485ではうんともすんとも言いませんが、オシロで見ると、ちゃんと232Cのような信号が出ています。
 初期信号.png

 ここは基本に戻って、まずはスマートコントローラ単体にしてUSBシリアルに繋いで確認です。
 つなぐ場所は、下の写真のコネクタで、
re_DSC02497.jpg
 
 一番根本(GNDに繋ぐ)と一番先っぽ(RXに繋ぐ)です。これで、受信できるはずです。
 で、ArduinoIDEのCOMモニタでめでたく受信できました。
38400bpsで受信.png

 他のCOMモニタでも確認して、こんな信号が出ています。38400bpsで3.3V系です。
01000001:
02000002:
03000003:
04000004:
 あとでわかりますが、 [LF](命令) : という形式です。
 ということで、送り出しの命令はわかりましたので、送受信がどう行われているかを確認するために、SmartControllerとSoundBoxをつなぎます。
re_DSC02495.jpg

 かなりぐちゃぐちゃな写真ですが、SmartController→ブレッドボードでUSBシリアルのRXで受け→SoundBoxとミニプラグケーブルをつないでいます。
 そうしたら、下記のように、送受信が見えるようになりました。
送受信.png

 こんな信号が送受信されています。
01050307: 0105030007.
01040005: 0104000104.
01050307: 0105030007.
01040005: 0104000104.
01050307: 0105030007.
01040005: 0104000104.


 分かったのは後ですが、[LF](SmartControllerから送信): (SoundBoxから送信).となっています。
 あとは、SmartControllerからファンクションとかスピードとか動かしてやって、どんな信号が出ているか解析するだけです。多分。
 その3に続く。

コメント(0) 

Kato SoundBoxをArduinoで操作する。その1 [SoundBox]

 秋のDCCFestの時にスマイラー様に、「KatoのSoundBoxをDCCから操作して音はBluetoothで飛ばして、電車から音を出す。をしたいので、SoundBox貸してください。」と頼みましたら、快く貸してくださいました。で、Yaasan様に「DCCから制御したいので、前分解していたKatoのSmartController貸して下さい。」と頼んで、こちらも快く貸していただきました。ということで、タダで、Smart ControllerとSound Boxを入手したので(いや、借りてるだけですが)、早速、DCCから制御する前段階としてSmartControllerとSoundBoxの通信プロトコルの解析です。
re_DSC02494.jpg
 まずは、SmartControllerのおさらいです。Yaasan様の記事とゆうえん・こうじ様のコメントによると、二線式のよくある双方向通信じゃないか?とのことでした。で、通信波形もYaasan様の記事からなんか、普通の232Cチックです。
 風のうわさでRS285じゃないのか?という話も聞いたので、こっそり、AmazonでRS485通信ができるとかいうUSB接続のコンバーターを買ってみました。
 これで、実験環境は完璧です。で、SmartControllerとSoundBoxの間にRS485をつないで、PCでモニターしてみましたが、なんかデータが全くでない・・・。ということで、RS485コンバーターはお蔵入りです。
 その2へ続く・・・。

コメント(0) 

近隣の電車のスピードメーター調査 [電車]

 あやのすけ様がDSairのSkinにサムネイル表示を追加しました。UIってのはちょっと変えただけで、分かりやすくなるものですね。
 スピードメータの違いを見るために、この頃乗った電車のスピードメーターを確認してみました。
 まず、江ノ電300形。全体。
re_IMG_20181006_145824.jpg

メーター拡大
re_IMG_20181006_145735.jpg

次に江ノ電10形。全体。
re_IMG_20181008_095605.jpg

メーター拡大
re_IMG_20181008_095620.jpg

小田急8000形 8558。全体
re_IMG_20181012_141811.jpg

メーター拡大
re_IMG_20181012_141845.jpg

 雰囲気重視(つまり適当)な私としては、小田急は、旧国鉄の最高速違い(150km/h最高速は設定できないけど)。江ノ電は、旧国鉄の20km/hとかの節目のところを三角から太い直線にして、最高速を80km/hにするぐらいなので、作るほどでもないかという感じです。
 それよりも、隣の圧力計を再現したいところですが、スマホだと、画面が小さくて残念なことになりそう。スピードメータ―のタップで速度制御しつつ、圧力計側は動作の空気を読んで、圧力を上げたり下げたりとなるんでしょうか?いや、圧力計の動きを再現するんなら、スピードメーターのタップでなく、マスコンの力行とかブレーキとか使いたいですし・・・。

コメント(0) 

DSair2 チャレンジキットの組み立て [DSAir]

 昨日のDCCfestの飲み会でDSair2チャレンジキットを渡されたので、組み立てました。
 DSairとの大きな違いは、
(1)CV読み書きができる。(DSairは書き込みだけ)
(2)ケースが豪華になった(DSairは汎用Arduinoケース)
(3)ArudinoNanoベースなので、USBによる制御ソフトアップデートが可能。(DSairはマイコンを直接書き換える必要があるので、不具合時のアップデートの難易度が高い)
でしょうか?
 現状は専用スケッチがないので、DSair相当の機能しか確認できませんが。

 まずはキット内容。
re_DSC02479.jpg

 ケースと基板と表面実装部品の数々・・・。組み立てる前に確認しないと「後で部品が無い!」というのは避けたいので。
re_DSC02480.jpg

 で、約1時間後にとりあえず表面部品は付きました。半田ごてやルーペ、ピンセット、フラックス、半田吸い取り線などを駆使しています。
re_DSC02481.jpg

 苦労したところはIC5の辺り、C4,C6を先につけたため後からIC5をつけるのに苦労しました。先にIC5をつけるべきでした。
 あと、部品表のR13が回路図にもシルクにも見当たらないような気がしました。
 また、ICはクリームハンダ向けに考えている思われ、IC2など、ちょっとはんだ付けてきているのか不安な感じではあります。

 で、表面実装部品以外も付けていって、完成。
re_DSC02482.jpg

 LEDはケースでの位置を確認して、その状態ではんだ付け。
re_DSC02483.jpg

 ケースに固定して、
re_DSC02484.jpg

 ArduinoNanoを付ける前に、12Vで通電させて、ArudinoNano用の5V,SDカード用の3.3Vが出力されていることを確認します。

 そして、スケッチを書き込みます。書き込む前はLED点滅のスケッチが入っており、Nanoの青いLEDとDSair2のRUN LEDが点滅しました。なんでRUN LEDも点くのだろう?
 Arudino IDEの1.8.7で書き込む場合は、書き込むボードはArudinoNanoですが、プロセッサーをATMega328Pでなく、ATMega328P(Old Processor)にする必要がありました。1.6.8では普通にATMega328Pを選び書き込めました。FlashAirは外しておきます。なんとなく、電力を食いそうなので。

 で、まあ、写真の通り、見るだけ君によるチェックでは、ちゃんと動いておりました。
re_DSC02485.jpg

 DSair2の大きさですが、DSmainR5、Katoの鉄道模型コンテスト開催記念コキ107と比べるとこのぐらいの大きさです。結構小さいです。
re_DSC02487.jpg

 専用スケッチがリリースされたら、いろいろ試していきたいと思います。



コメント(0) 

DSAir用のUIを切り替えられるようにする [DSAir]

 ゆうえん・こうじ様から、
 「ところで今のDSairで、複数のUIを切り替えて使うということはできるのでしょうか?
それとも一枚のFlashAirには、ひとつのUIのList.htmしか設定できないのでしょうか?」

 と聞かれて、Yaasan様のブログには、複数のアプリを選択するというものがあり、やり方は、

「List.htmからリンクを貼ればいいだけなんです。
<a href="htmlファイル名">りんく</a>とするだけです。
なお、URL直入れは、List.htmしか許可されてません、リンクで飛ばないとだめです。」

とのことで、確かにできました。
List.htmを
----
<!doctype html>
<html>
<head>
<title>DSair Select</title>
<meta charset="utf-8" />
<style type="text/css">
body{
font-size: 2em;
}
</style>
</head>
<body>
DSair<br>
Skin Selector<br>
<a href="/SD_WLAN/List_org.htm">Original</a><br>
<a href="/SD_WLAN/List_E217_2.htm">E217</a><br>
<a href="/SD_WLAN/List_E233_2.htm">E233</a><br>
<a href="/SD_WLAN/List_kyuukoku_2.htm">旧国鉄</a><br>
</body>
</html>
----
としたら、こんな画面になります。(適当です)
キャプチャ_R0v_SkinSelector.png

そして、各ページをクリックするとE217系は
キャプチャ_R0v_E217_2.png

E233系は
キャプチャ_R0v_E233_2.png

旧国鉄は
キャプチャ_R0v_旧国_2.png

という感じで、各ページで普通にDSairを操作できました。なお、OriginalはDSairの通常のものになりますが、スピードメータの刻みを変更しているため、外部のStorage.jsも含めオリジナルのソースから少々変えてしまっています。

 なお、E217,E233,旧国鉄共に、スピードメータの0km/h、最高速度のメーター角度を変えています。
オリジナルはスピードメーターの円の真右方向を0度として、そこから時計回りに135°行ったところを0km/h、そこから270°行ったところが最高速度になっています。
 これをE217系などは、144°行ったところを0km/hにして、そこから252°行ったところを最高速にしています。E233系を見たらそうなっていたので、というだけですが。
 ソースはこちらです。参考にどうぞ。
コメント(2) 

DSAir用のUIを変更する(E233系風) [DSAir]

 やる気が途切れないうちにもう一つ。E233形風です。ただし、E217系風同様、最高速が違っていたりします。SD_WLANフォルダ(R0v_E233)はこちらです。
 これも昨年のJR鎌倉車両センター公開で撮ってきているので、それに合わせて作りました。
キャプチャ_R0v_E233.png

 一応、写真を撮った本物はこうです。
E233_本物.png

 こうなると、最高速に合わせて、目盛りを少し可変にしたくなりますが、どうしようか?
 あと鎌倉車両センタ―で写真撮っていて、簡単にできそうなのは、E259系ですかね?速度表示が外側なので、ちょっとデザイン的に難しいかも。

コメント(5) 

DSAir用のUIを変更する(E217系風) [DSAir]

 こういうのはやる気になったときにさっさとやらないと、後では、どこを変えるかすらわからなくなるものなので、やってしまいます。
 今度はE217系風です。昨年のJR鎌倉車両センター公開で撮ってきているので、それに合わせて作りました。ただしメーターの最高速が違うので、そこらへんは手抜きです。
キャプチャ_R0v_E217.png
 一応、SD_WLANフォルダ(R0v)はこちらです。


コメント(0)