« March 2021 | Main | May 2021 »

DSシールド2のパワーオンオフを改造する

テンキーボードコントローラーですが、テンキーUSBコントローラーと操作性の互換をとるために、線路DCC電源オンオフは、BSキーのトグル動作にしたいと思いました。

しかしDCシールド2のシリアル通信では、線路DCC電源のオンオフを通知するコマンドは用意されていません。電源のオンオフを通知するコマンドを追加改造してコントローラー側で対応しようかと思いましたが、むしろ線路DCC電源オンオフをトグル動作できるようなコマンドを作った方が楽だと気がついたので改造しました。

線路電源,Power PW(PowerFlag) のパラメーターに 9 トグル動作を追加しました。

改造追加箇所は、DSshield.ino の boolean dispatch() {……}内の下記の赤字部分です

else if ((function == "setPower") || ((function == "sPW")))
{
    if( arguments[0] == 9)
    {
        if( DSCore.IsPower() == 1) //パワーオンならオフ
        {
        arguments[0] = 0;
        }
        else //パワーオフならオン
       {
        arguments[0] = 1; 
        }
     }

     if( arguments[0] == 1)
     {
     /* 状態変更 */
     gLED_State = LEDSTATE_RUN;
     }

     else
    {
    /* 状態変更 */
    gLED_State = LEDSTATE_STOP;
    }


    /* LED状態の変更 */
   changeLED();

   return DSCore.SetPower(arguments[0]);

}

 

テンキーボードコントローラーのスケッチで、BSキーを押すと setPower(9)が送信されるように改造しました。

これでBSキーでDCC線路電源のオンオフがトグル動作でできるようになりました。

線路電源状態はDSシールド本体のLEDで確認します。

 

| | Comments (0)

DSシールド2にDC運転機能を追加する

DSair2には、analogDC(PWM)運転機能がありますが、DSシールド2にはないので、スケッチ(プログラム)を改造して機能追加しました。

追加変更したところを 自分の覚え書きで書いておきます。

DSair2 Firmware(R3.1)のDSairFirmware.ino から DSshield2スケッチ(rev.0003)DSshield.inoに下記の部分を追加

追加位置は、DSairFirmware.inoと同じ順序の位置にコードを挿入しました。
行数は、DSairFirmware.inoの行数です。

38〜38行 #define LEDSTATE_ANALOG 4
                #define PIN_PWMA 9
       #define PIN_PWMB 10  を定義に追加

159行 void SetAnalogSpeed(word inSpeed, byte inDir); の関数定義を追加

434行〜 boolean dispatch(){ ……  }

関数内に

578〜598行 else if (function == "DC"){ ……  } を追加

1132〜1154行 void changeLED(void){ ……  } 関数内に
                     case LEDSTATE_ANALOG:
                      break; を追加

1226〜1255行  void SetAnalogSpeed(word inSpeed, byte inDir){ ……  } 関数を追加

1257〜1261行  void FreeAnalogSpeed(){ ……  } 関数を追加


これでDSair2とおなじように、シリアルポートから

DC(AnalogSpeed,AnalogDirection)

AnalogSpeed 0-1023

AnalogDirection 1:FWD, 2:REV

コマンドを受信してDC運転ができるようになりました。

線路電源OFFの時だけ使用可能。DCに切り替えるときはsetPower(0)を送信する。

シリアルコマンドは下記を参照

https://desktopstation.net/wiki/doku.php/dsair_wifi_specification

https://desktopstation.net/wiki/doku.php/desktop_station_s_serial_communication_specification

 

もちろん出力側にピュアアナログアダプターつなげば、平滑直流で運転ができます。

 



 

 

 

| | Comments (0)

二つのテンキーボードコントローラー

テンキーボードを使ったDSair2接続のUSBコントローラーと テンキーボードを改造して作ったDCCコントローラーの記事をほぼ同時期にブログに書いたため、違いがわかりにくいといわれましたので、比較対照表を載せておきます。

Tenkey_20210419213301

テンキーボードUSBコントローラーは、スロットルつまみをつけなければ、電子ハンダ付け工作は不要です。

+ - キーで加減速できます。

iPhoneで使う場合は、lightning端子用のOTGアダプターを使います。

スロットルのリアルつまみが必要ならミニスロットルを作る必要があります

またテンキーボードUSBコントローラーを使うには、 wifiSDカードのkyeboard.jsを書き替える必要があります

| | Comments (0)

テンキーボードコントローラーができました

市販のUSB接続テンキーボードを改造して、DCCコントローラーができました。

車両の運転、ポイント切替、CV値の読み書き、車両アドレスの読み書きが可能です。

UART接続で、DSシールド2などに接続して使います。接続には3.5mm4極コネクターを使用していますが、結線はDSmain5に準じています。 

20210415-23-03-51

回路図は下記のとおりです。

Tenkeycon

BSTK100BKの基板上ランドへの配線はこちらの画像を参照してください

スケッチはここからダウンロードできます - tenkey_control.zip

※4/18 バグあり修正後再アップロードします。

スケッチはここからダウンロード - tenkey_control.zip 4/19再アップロード

素人プログラムで、あまり美しくないコードですがご笑覧ください

このテンキーボードコントローラー操作方法は以下のとおりです

起動時は「アドレス選択モード」

0.アドレス選択モード
アドレス番号+(Enter)  「運転モードA」に移行
( * ) 現在の線路上のDCC車両のアドレス読込表示
アドレス番号+( / )  現在の線路上のDCC車両のアドレス変更書込
(. del) 入力した数値を消去

1.運転モードA ファンクション操作モード
ボリュームつまみで速度調整
(Enter) 前後進逆転 トグル操作
(BS) 線路電源オン
(.Del) 線路電源オフ
(数字キー) F0からF9のファンクションのオンオフ F2のみモーメンタム動作 他はトグル動作
( / )&(数字キー) 同時押し F10からF19のファンクションのオンオフ トグル動作
( * )&(数字キー) 同時押し F20からF28のファンクションのオンオフ トグル動作
( + ) CV読み取りモードへ移行
( - )  アドレス選択モードへ移行
(00) 運転モードBへ移行

2.運転モードB アクセサリー(ポイント)操作モード
ボリュームつまみで速度調整
(Enter) 前後進逆転 トグル操作
(BS) 線路電源オン
(.Del) 線路電源オフ
(数値)+( *) 入力したアドレスのポイントを直進に切替
(数値)+( / ) 入力したアドレスのポイントを分岐に切替
(. del) 入力した数値を消去
( - )  アドレス選択モードへ移行
(00) 運転モードAへ移行

3. CV読み取りモード
CV番号+(Enter) 指定されたCV値読込
(. Del) 入力した数値を消去
( + ) CV書込モードへ移行
( - )  運転モードAに移行

4. CV書込モード
CV番号+(Enter) で指定後 数値+(Enter) でCV値入力
(. Del) 入力した数値を消去
( - )  運転モードAに移行

+ は順次操作
& は同時操作

4/19 アップロード版一部変更しました

| | Comments (0)

テンキーボードコントローラーの試み(5)

結局Arduino Miniの収まりが悪いので、基板はコネクター部分を残して切除しました。
キーは汽笛のFunction2のみトグル動作(押す度にオンオフ切り替わる)ではなく、モーメンタム動作(押している間のみオン)にしてみました。F2の挙動については、サウンドデコーダーでは汽笛に割り当てられていることが多いのでモーメンタム動作が好まれますが、デコーダーによってはそれ以外の機能を割り当てられていることも多いので、どちらが良いかは何ともいえないですね。コントローラ側でカスタマイズできるのがベストかとも思いますが、それを実現するのはまたややこしくなりそうなので今回はパスです。

20210409-0-45-53

| | Comments (0)

テンキーボードコントローラーの試み(4)

DSair2にも、UARTジャックを増設しました。

ジャックは、3.5mm4極ミニジャックです。

20210406-23-03-23

20210406-23-06-25


| | Comments (0)

テンキーボードコントローラーの試み(3)

20210405-22-40-55

 

テンキーボードのハード改造とスケッチ(プログラム)が一応できたので、UART端子のあるDSmain5.0に接続してみました。CV値の読み書きやアドレス操作もできるようになりました。次はDSair2の基板にもUARTのランドがあるはずなので、そこから電線を引っぱって、UARTのジャックを付けて、このテンキーボードコントローラーでも操作可能にしてみようと思います。

 

| | Comments (0)

テンキーボードコントローラーの試み(2)

20210401-9-56-48

最初は以前K氏にいただいた168P搭載の中華Aruduino pro mini 互換機を使っていたのですが、OLEDディスプレーを使うとメモリが足りなくなり、秋月の328P搭載のAruduino pro mini 互換機に交換しました。
何とかDCC運転操作とポイント操作、CV値読取り、書替えまではできるようにできました。現在DSシールド2に接続していますが、CV値読み取りが少し時間がかかるので、シリアル受信バッファーからのデータ取得のタイミングをとるプログラミングがなかなかうまくいかず、時間がかかってしまいました。あとはDCCアドレス取得/書換とPWM(パルス制御)の直流運転機能を追加しようと思います。

なお歳をとったためか、プログラミング自体にも時間がかかりますが、操作手順を考える方が時間を喰ったかもしれません。運転中でも00キーを押すと一発でテンキーボードをファンクション操作とポイント操作に切替られるようにしました。ハードウェアの電子回路を組んだあとでも、プログラムを書き替えて操作機能をどのようにでも変えられるのがデジタル制御機器の面白いところだと思います。

20210401-9-57-09

20210401-9-57-29

 

市販のテンキーボード改造して、DCCコントローラーができるのは面白いです。

| | Comments (0)

« March 2021 | Main | May 2021 »