CW Remote Control of USB

リモートコントロールが手軽になりましたね。
シャック以外の部屋にタブレットとキーがあればCWを楽しめる、あるいは外泊のホテルから・・・。
そんなUSBを使用したキー・インターフェイスを製作して見ました。
面倒な加工なしでできます。
ローカル使用とは、近くにあるリグに直接接続する方法です。

秋月電子のUSB-IO2.0基板をサーバー用とクライアント用に2個使います(1個\1000)

プログラムはここからダウンロードできます。

バージョンアップ情報
 サーバー
  Ver2.7 2023/04 Km2Net USB-IO2.0に対応しました。
  Ver2.6 2021/12 キーダウンしたままの誤動作を防ぐところに問題がありました(指定時間でキーオフにならず瞬断するだけでした)。これを修正しました。
  Ver2.5 2021/08 誤作動防止にためプログラム2重起動を禁止していましたが、スキルある方用に2重起動できるようにしました。
          2重に起動する場合プログラムフォルダーが異なるようにしてください。
  Ver2.4 2021/05 USB設定画面を開くと動作が不安定になるのを改良しました。
 クライアント
  Ver3.1 2023/04 Km2Net USB-IO2.0に対応しました。
  Ver3.0 2022/07 エレキーモードのスクイーズ動作のアルゴリズムを変えました。
  Ver2.8 2021/05 USB設定画面を開くと動作が不安定になるのを改良しました。

サーバーPC モバイルPC ともファイヤーウォールを変更します。
プログラムを起動すると自動で設定できますが、もし自分で設定を行う場合は、UDP 50004(default 変更可)を開放してください。
インターネット越しで操作する場合は、IPV4パケットフィルタにUDP(50004 変更可)ポートの許可を設定します。

サーバー側とクライアント側に同じポート番号、IDを登録します。
同じポート番号、IDでないと接続できません。
簡単なセキュリティ対策です。

プログラムの説明

サーバー側
サーバー用のUSBボードをUSBポートに挿し、プログラムを起動してIDを設定します。


クライアント側
クライアント用のUSBボードをUSBポートに挿し、プログラムを起動してIPアドレスとIDを設定します。
操作説明はここ


USBボードの加工

配線の都合からJ2-2、J2-3ピンを使用しています。
"ローカル出力"にチェックを入れると、J1-0にキー出力しますので、ローカルで使用する場合は下図のようにMOS FET(2N7002)をはんだ付けしケーブルを接続します。
ケースの加工が苦手なので、この基板に熱収縮チューブを被せて使用しています。
書き忘れていました。
注)USBのカバーはグランドに落ちていませんので、側のレジストを剥離して半田ショートしてください。
Cw Remote Client Board


  リモートだけで使用する場合

  リモートとローカルの両方使用する場合(ローカル用のケーブルは、サーバー用の加工と同じです
CW Remote Server Board
配線の都合からJ1-0ピンを使用しています。
クライアントからKEY・オンの信号が来ると、J1-0の出力をHighにします。
トランシーバーのKEY端子をLOWにする必要があるので、MOS FETをはんだ付けします。
表面実装用の2N7002を使用していますので、耐圧は60V以下で+負荷です。
真空管のリグに使用する場合は極性、耐圧を確認してください。
ケースの加工が苦手なので、この基板に熱収縮チューブを被せて使用しています。
表面実装のMOS FET 2N7002をはんだ付けした様子です。
J1-0にゲートを、USBソケットのグランド端子にソースを半田付けしました。
ドレイン端子には0.2mmの1cmのポリウレタン銅線をはんだ付けし、反対側をリード線にはんだ付けします。
これによりリード線が多少動いてもドレイン端子に力が加わりません。

Windows用プログラム
サーバーPC用 Ver2.7(2023/04) CwControlServer.zip
モバイルPC用 Ver3.1(2023/04) CwControlClient.zip

インストール作業はありません。
サーバーPC、モバイルPCに適当なフォルダーを作成して、それぞれのZIPファイルを解凍し、拡張子"EXE"ファイルを起動するだけです。

サーバー側 (ローカルだけで使用する場合は不要になります)
サーバー用のUSBを挿入しCwControlServer.exeを起動します。



デフォルトでポートが50004になっていますが、好きなポートに変更できます。
変更した場合はファイアウォールの変更もお忘れなく。
IDは空欄ですので、パスワード感覚で適当な英数字を入れて下さい。
設定は以上ですが、「USBデバイスを使用できません」と表示された場合は、[USB]ボタンを押して認識されているか確認します。



秋月電子のUSB-IO2.0は[USB-IO2.0 Device VID=1352 PID=0121]と認識されますので確認してください。
Km2NetのUSB-IO2.0は[USB-IO2.0 Device VID=1352 PID=0120]と認識されます。
[初期化]ボタンは J2ポートをプルアップ入力、J1を出力に設定します。
USB-IO2.0を初めて使用する場合は、1度初期化してください。

デバッグにチェックを入れるとマニュアルでの動作確認ができます。
キーを使用する時はチェックを外してください。
終了ボタンを押すとチェックは外れるようになっています。
クライアント側
モバイルPCではCwControlClient.exeを起動します



IPアドレス
  接続するサーバーのIPアドレスを入力します。
  インターネット経由なら、グローバルIPを入れます。

ポート
  デフォルトで50004です。
  icomのRSBA1のリモートプログラムが50001〜50003を使用しているので(default)、それに合わせましたが、任意のポートに変更できます。
  ただし、サーバーのポートと一致しないといけません。

ID
  サーバー側のIDと一致しないと接続できません。
  簡単なセキュリティ対策です。

接続ボタン
  サーバーへの接続を試みます。
  接続できると[接続中]に変わります。
  
切断ボタン
  サーバーから切断します。

USBボタン
  使用するUSBデバイスを選択します。
  上記サーバープログラムを参照してください。

終了ボタン
  プログラムを終了します。

モード
  〇 スルー    :接続したキーをそのまま使用します。
  〇 バグキー  :バグキーモードです(短点優先)。
  〇 エレキー   :エレキー(スクイズキー)モードです。

SW4、SW5、SW6、SW7はチェックを入れると、サーバー側のUSB-IOの出力J1-4、J1-5、J1-6、J1-7がHighになります。
  SW4→J1-4
  SW5→J1-5
  SW6→J1-6
  SW7→J1-7
  サーバー側のJ1ポート(J1-4, J1-5, J1-6, J1-7)にMOSリレーなどを配線して、リモートSWとして使用出来きます。
  SW4・・・SW7の名称を変更する場合は
  プログラムと同じフォルダにある CwControlClient.ini ファイルをメモ帳などのエディターで開いて編集します。

□ サイドトーン
  チェックするとサイドトーンを出力します。
  デフォルトで 32ビット、48000Hz になっています。
  既定のスピーカーのプロパティで「32ビット、48000Hz(スタジオの音質)」(24ビット、16ビットでも問題ありません)になっているか確認してください。
  もし既定のスピーカーの設定を変更したくない場合は、下記の"CwControlClient.ini"を変更してサンプルレートを合わせてください。

  サイドトーンの周波数をお好みに変更できます。
  登録されている周波数以外でも、数値を入力すると変更できます。

  VOL ボリューム調整です。

お気に入り
  よく使用する設定を3種類保存できます。
  登録方法は
    番号を選択します。
    初めは登録されていないので、次のようなメッセージが表示されます。
    
    OKボタンを押してダイアログを閉じて、[MW]ボタンを押します。
    現在の「スピード」、「長点」、「単点」、「長間」、「リバース」が登録されます。
    次回番号をクリックすると登録した「スピード」、「長点」、「単点」、「長間」、「リバース」が設定されます。


スピード
  バグキー、エレキーモード、キーボード
  エレキーの符号速度、バグキーでの単点の速度を可変します。
  左端が最も速く 200字/分、右端が最も遅く 50字/分です。

長点(単点・長点の比率です)
  エレキーモード、キーボード
  エレキーでの(単点1に対しての)長点の長さです。
  3〜4.6まで可変できます。ディフォルトは3(3以下には設定できません)

単点
  バグキー、エレキーモード、キーボード
  単点の長さです。
  0.5〜1.5まで可変できます。ディフォルトは1
  例えば0.5に設定すると、設定されたスピードでの単点出力の単点の長さを半分にし、その後のスペースを1.5倍にします。

長間
  エレキーモード、キーボード
  長点の間隔の長さです。
  0.5〜1.5まで可変できます。ディフォルトは1
  例えば0.5に設定すると、設定されたスピードでの長点の間隔(1単点の長さ)を半分にします。
  長点そのものの長さは変わりません(「長点」で設定されますので)

□ キーボード
  パソコンエレキーなのでキーボード出力が出来ます。
  チェックすると下記の操作画面が表示されます。
  
  上段は編集画面です。
  入力文字は英数字、ひらがな、かたかなで全角・半角どちらでも構いません。
  混在しても構いません。
  連続符号 HH などは #H 符号の前に #(シャープ)を付与します。
  右下段によく使用する連続文字を編集画面に送るボタンを配置しています。
  和文のヰ、ヱは使うことはないとは思いますが、そのまま編集画面に打ち込んで下さい。
  ^イ ^エ と ^ を符号の前に付与してもヰ ヱの符号に変換できます。
  右側の5段の欄は、よく使用する文字列を入れておき、「≪」ボタンを押すことで編集画面に文字列を送ることが出来ます。
  左端の「ファイル」は定型文章などを保存したり、ロードしたりするものです。
  編集画面に入力した文章をファイル名を付けて保存できます。

  編集画面に文章を入力しましたら、「送信」ボタンを押します。
  「送信」ボタンが押されると、編集画面の文章は下段へ、英数字、カタカナ半角に変換されて転送されます。
  と、同時にモールス信号として出力されていきます。
  モールス符号として出力すると、出力された文字は消えていきます。
  この画面は編集できませんので、もし、途中で止めたい場合は右クリックすると「中止」のメニューが出ますから、クリックして中止してください。

  文字間
    1文字と1文字の間隔です。標準は4ですが、2〜8まで変更できます。
  語間
    単語の区切りに空白を入れますが、空白の長さを指定します。
    標準は7ですが3〜12まで変更できます。
  和文
    通常はチェックする必要はありません。
    和文と判断すると自動でチェックされます。
    この時 (  ) は和文の下向きカッコ、上向きカッコの符号に変換しますが、欧文の左カッコ、右カッコの符号にする場合にこのチェックを外してください。
    和文を使用しなければ自動でのチェックマークは入りません。

□ ローカル出力
  チェックすると同基板のJ1-0端子にキー出力されます。
  キー・オンでハイになりますからMOS FETを接続し送信機へ接続します。
  リモートで接続している場合、ローカル機器へのキー出力を止める時に使用します。
  リモート接続で自動オフにはしませんので、VOX運用時にはリモートTX、ローカルTXの同時出力にならないよう注意を払ってください。

□ ステレオプラグ
  接続する電鍵が往復電鍵、双パドルのマニュピレータではステレオプラグを使用してチェックをします。
  スルーモードで縦振り電鍵、バグキー、エレキーを接続する場合はチェックを外します(モノラルプラグ)。

□ リバース
  単点と長点の接点を反転させます。


カスタマイズ
  プログラムと同じフォルダー内の"CwControlClient.ini"を編集します。

[Client]
Left=0
Top=0
[TargetServer]
IP=192.168.0.251
Port=50004
ID=JA7EIF
[ControlSw]
SW4-Label=SW4    ← =SW4 を =テスト と変更すると、画面のSW4がテストと表示されます
SW4=0
SW5-Label=SW5
SW5=0
SW6-Label=SW6
SW6=0
SW7-Label=SW7
SW7=0
[SideTone]
SW=1
Freqency=800
Volume=22
SampleRate=48000
Bitrate=32
       ←削除しました(記載されていても無視されます)
[KeyPort]
J2=3          ←キーを接続するポ−ト番号です
[DashPort]
J2=2          ←ステレオプラグを使用して長点の端子を接続するポート番号です
[ActiveTime]
Time(S)=5       ←使用しない時サーバーへの送信を停止するタイマーです(デフォルト5秒)
[KeyMode]
MODE=1
Speed=42
Ratio=1
DotSpace=3
DashSpace=3
Reverse=0
Local=1

  プログラムと同じフォルダー内の"USB_IO.ini"を編集します。

[Form]
Top=0
Left=107
[CurrentDevice]
CurrentDevice=USB-IO2.0 Device VID=1352 PID=0121
[Label]
J1-0=J1-0
J1-1=J1-1
J1-2=J1-2
J1-3=J1-3
J1-4=J1-4
J1-5=J1-5
J1-6=J1-6
J1-7=J1-7
J2-0=J2-0
J2-1=J2-1
J2-2=J2-2
J2-3=J2-3
[OUT PORT INI]
J1-0=0
J1-1=0
J1-2=0
J1-3=0
J1-4=0
J1-5=0
J1-6=0
J1-7=0
[Watch Timer]
mS=5        ←USB_IOを監視する時間間隔です(デフォルト5ms) 注)参照

注)
Windowsでミリ秒の正確なタイマーはほぼ無理です。
例えばsleep(1)関数は1ms待機を指定しても、10ms〜50msと制御には使用できそうにありません。
マルチメディアタイマー(timeSetEvent)を使用すると、環境によっては1msの精度はかなり良くなりますが、PCによっては精度が悪い物もありました。
普通の環境で2msならいけそうでしたが、重いPCでは5ms必要のようですので、5msをデフォルトにしています。
ここでの設定は1ms〜10msです。

サーバー側
CwControlServer.ini

[SERVER]
Left=0
Top=0
Port=50004
ID=JA7EIF
[TxTimeOut]
Time(S)=5      ←クライアントからキーデータが途絶えた場合、強制的にキー・オフにするタイマーです(デフォルト5秒) Ver2.6で修正

[CurrentDevice]
CurrentDevice=USB-IO2.0 Device VID=1352 PID=0121
[Form]
Top=0
Left=0
[Label]
J1-0=J1-0
J1-1=J1-1
J1-2=J1-2
J1-3=J1-3
J1-4=J1-4
J1-5=J1-5
J1-6=J1-6
J1-7=J1-7
J2-0=J2-0
J2-1=J2-1
J2-2=J2-2
J2-3=J2-3
[OUT PORT INI]
J1-0=0
J1-1=0
J1-2=0
J1-3=0
J1-4=0
J1-5=0
J1-6=0
J1-7=0
[Watch Timer]
mS=2          ←サーバーでは使用していません

注1
  信号の拡張機能を許可しないでください。
  □オーディオ機能拡張を有効にする
  ↑チェックを外してください



以上で説明を終わりますが、プログラム不具合、改良、その他質問がございましたら下記へメールください。
ja7eif @ gmail.com ←@間の空白を取り除いてください。