ノラ版 DSシールド2を作る

DSシールド2の互換機 ノラ版をつくりました。
回路は、DSシールド2そのままです。Arduinoは、Unoではなく、中華製Nano互換機を使いました。載っているマイコン(ATmega328 )が同じなので、純正DSシールド2のスケッチ(プログラム)がそのまま動きます。なお今回S88関連の配線は省略しましたので、当然S88センサー機能は動きません。電圧レギュレーターは、Nano内蔵のものでは、テンキーボードコントローラーを接続した時に電流が不足しそうなので、5vの三端子レギュレーターを外付けしました。そのため最高電圧12Vの上限が外れて、欧州型やLGBの16-18Vでも作動します。

20210630-14-19-03

プリント基板上には、nanoと電流センサー、5V三端子レギュレーターが載っています。モータードライバーは載せるスペースがなく空中配線となりました。走行電流端子は、信頼の陸軍式です。

20210630-16-46-29

何とか回路をタカチの小さなアルミケースMB4-3-6に押し込みました。

20210630-19-57-15

前面には、NanoのUSB端子とUARTのTX,RXと5V GNDを4極ジャックで引き出してあります。
USB端子をパソコンに接続すれば、DesktopStation SoftwareDS webapp winのアプリが動きますし、4極ジャックにはテンキーボードコントローラーが接続できます。
コンパクトにまとまったので居酒屋セットにはちょうど良いかと思います。その反面長時間使うと放熱がイマイチなので問題がおきるかもしれません。

 

| | Comments (0)

DSシールド2 コントローラー

Desktop Stationから発売されたDSシールド2を使ってDCCコントローラーを作ってみました。

Arduino Uno の上にDSシールド2を載せて、その上にタスクスイッチを使って作った4X4のマトリックス配線のキーパッドとOLED(有機LED表示ボード)を取り付けた 自作シールドを載せてあります。

機能的にはDCC運転、F0-28のフルファンクション操作、ポイントアクセサリー操作、ダイレクトモードでのCV値の読み書き、DCCアドレスの読み書きが可能です。ボタン操作は、テンキーボードコントローラー準拠です。USBをパソコンにつないで、DSシールド2としても使用できるようにしました。老眼のためOLEDの細かい表示は見にくいので、最低限の情報のみ大きい字で表示させています。

なおこのコントローラは線路上に一台あるいは一編成の車両を走らせてサウンドやギミックなどを楽しむ目的で作りました。二列車以上の同時運転には向いていません。

20210612-0-18-49

20210612-0-19-59

 結線図は下記のとおりです

Ds2c

4x4の16キーパッドは、秋月のシールドボード上でタクトスイッチを使って配線し自作しましたが、市販の完成品やキットを使った方が簡単だと思います。OLEDはSCAとSCLを10KΩの抵抗で5Vにプルアップします

SCA(A5)とSCL(A4)はDSシールド2内部でプルアップされているので、この配線を追加する必要はありません(6/20追記)

なお今回はメモリの制約から、OLED表示には、メモリ使用量の少ないSSD1306Asciiライブラリーを使っています。
素人製作の美しくないスケッチ(プログラム)で恐縮ですが、ここからダウンロードできます。興味のある方はダウンロードして使ってみてください。なおこのスケッチを使うためには、DSシールド2のR4を撤去することが必要となります。そのためS88関連機能は使えなくなります。

このスケッチは、DesktopStationのDSシールド2のスケッチrev.002に加筆したものですが、問合せは私にお願いします。一番上の最近の話題 スレッドへのリンクにコメントしてください。DesktopStationさんへの問合せはご遠慮ください。デジタル鉄道模型フォーラムのコマンドステーションのスレッドでもご質問やバグ報告はお受けします。

ダウンロード - dss2c.zip

Ds2ca

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

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

0.アドレス選択モード
アドレス番号+(E)  「運転モードA」に移行
(B)現在の線路上のDCC車両のCV値読込表示
    CV読み取りモードへ移行
(C)現在の線路上のDCC車両のアドレス読込表示
アドレス番号+( F )  現在の線路上のDCC車両のアドレス変更書込
(D) 入力した数値を消去

1.運転モードA ファンクション操作モード
ボリュームつまみで速度調整
(E) 前後進逆転 トグル操作
(A) 線路電源 オン/オフ  トグル操作
(数字キー) F0からF9のファンクションのオンオフ F2のみモーメンタム動作 他はトグル動作
(C)&(数字キー) 同時押し F10からF19のファンクションのオンオフ トグル動作
(F)&(数字キー) 同時押し F20からF28のファンクションのオンオフ トグル動作
(B) 運転モードBへ移行

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

3. CV読み取りモード
CV番号+(E) 指定されたCV値読込
(D) 入力した数値を消去
(B) アドレス設定に移行
(F)  CV書込モードに移行 

4. CV書込モード
CV番号+(E) で指定後 数値+(D) でCV値入力
(D) 入力した数値を消去
(F)  アドレス設定に移行

9.DSシールドモード

(A)を押しながら起動するとDSシールド2として起動し、すべてのボタン入力などは無効となります。
USBをパソコンにつなぐと、DesktopStationアプリで操作できます。
コントローラー操作に復帰するには、リセットして再起動させます。

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

 

| | Comments (0)

DCC 同人誌の記事修正

DesktopStationさんがオンラインで配布されているDCC同人誌の2021年夏号に掲載していただいた私の記事P51-52に誤りがありました。

 下表のコントロールキーのキーコードが間違っていました

お詫びして修正します。ご指摘いただいたIZ さんありがとうございました。

Dsair2_keyboard

なおUSBミニスロットルとテンキーボードについては、ブログの3/11-3/17の記事をご覧ください

 

USBミニスロットル+テンキーボード=USBスロットル

USBミニスロットル+テンキーボード=USBスロットル(続)

USBミニスロットル+テンキーボード=USBスロットル(続々)


 

 

 

 

| | Comments (0)

DCC Decorder Tester の改造

中華製LaisDccのDCC Decorder Tester を少し改造しました。

20210603-0-25-18

 入力端子台が品質が悪くガタガタだったので、DSAirなどと同じユーロコネクターに交換しました。

20210603-0-25-48-1

スピーカーとモーターの回路には直列にスライドスイッチを入れてオンオフできるようにしました。このスイッチをオフにして、表面のコネクタのついていないデコーダーのための端子台に、外付けでスピーカーやモーターをつなげば、それらのテストができます。
なお小型スライドスイッチを単独でデコーダーの基板に固定するのは難しいので、小さなプリント基板(秋月のF基板)にハンダ付けして、それを強力工業用両面テープで基板に貼り付けています。これなら操作の時もしっかりしています。

| | Comments (0)

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)

より以前の記事一覧