コンテストはCWで参戦することが多く、欧文は(コンテストに出るくらいは)送受信できる
のですが、和文モールスはさっぱりです。
K3NG Keyerの和文対応をしたとき、そろそろ和文も練習したいと考えるようになりました。
送信の練習は、モールス信号をデコードして、PCにキーボード入力として送る形が良いだろうと。
K3NG Keyerには FEATURE_USB_KEYBOARD があるので、これを使おうか…とも考えましたが、
デコーダーの方式を風呂に入りながら検討してみたところ、それほど難しくなさそうだったので、
頭の体操も兼ねて、自分で実装することにしました。
マイコンは、USB HIDに対応する、Arduino Micro (ATMega32u4) を使用することにします。
このボードは、Keyboard.h をインクルードすることでUSBキーボードとして動作し、
キーボードから入力されたように文字をPCに送ることができます。
接点が接となった時、断になるまでの時間を1ms間隔でカウントします。
カウントが閾値以下ならば短点、閾値より大きければ長点とします。
短点の時間は 20WPM の場合、 1 WPM = 50 dots で 1分あたりは 20*50 = 1000 dotsなので
一短点は 1000/(1000/60) = 60ms となります。閾値は1:3のちょうど間の2短点としました。
接点が断になっている時間も重要です。
接点が断になったあとすぐに接になった場合、それは符号の入力中なのでまだ文字は確定しません。
ある程度(無線局運用規則 第十二条では3短点)の時間が空いた場合は、文字が確定するので
符号のビット列を判定処理に送って、文字を決定&キーボード入力をします。
キーボードに文字を入力したあと、さらに断になっている時間が規定時間(7短点)空いた場合、
それは単語と単語の間なので、直前が訂正符号でなければ、スペースを1回だけ入力します。
実際使ってみると規定時間では間延びしている印象なので、プリプロセッサ命令で変えられるようにしてあります。
欧文入力中に DO(ホレ)で和文モード、SN(ラタ)で欧文モードに戻ります。
ラタは訂正符号にも使用しますが、マイコンは訂正符号か和文終了か区別がつかないので、
訂正(BackSpace入力)は HH を使用することにします。
和文モールス中に 括弧 で一時的に欧文モードになります。
K3NG Keyerではキーボードの刻印のキーコードを送信していましたが、
今回はPC側の入力モードがトグル動作かつ、どちらか不明で、カナ入力にすると数値の切り替えが面倒なので
普段使用している、ローマ字入力 で日本語文字の入力を行うことにしました。
和文モード使用時は IMEをONにしてローマ字入力にしていることが前提となります。
この方式の良いところは、アルファベット入力も入力モードを切り替えることなく Shift+ で可能なことです。
和文モードの場合は 小文字アルファベットで子音と母音を送信して ENTERで確定、
欧文モードの場合は 大文字アルファベットを入力して即 ENTER 確定です。
日本語106/109キーボードとして動作させる場合は、Keyboard.h の替わりに、Keyboard_jp.h を使用します。
スピードとトーン周波数は半固定抵抗で調整できるようにしました。
確認用のボタンを押している間は V の連続がブザーから鳴りますので、
聞きながら半固定抵抗を回して、お好みの速度・周波数に調整します。
調整範囲はスピードが 8〜60 WPM、 トーン周波数が 500〜1011Hzです。
2022/1/1追記
バグキーだけではなく、パドル操作にも対応しました。
パドル操作の場合、接点を検出後に長短点を出力し、1短点分の休止後に始めに戻って接点を検出します。
スクイーズ動作にも対応しました。
パドル/ストレートキー(バグキー)操作、パドルの極性反転、IMEの使用有無を変更できるようにしました。
例えば、STR(・・・−・−・) と続けて打つとストレート(バグキー)モードになります。
同様に、PD はパドルモード、REVはパドルの極性反転、NORはパドルの極性ノーマルとなります。
日本語入力は、ローマ字入力としているので、確定時にENTERを送出する必要がありますが、
これは KAN と続けて打って設定します。英数モードに戻すには ENG と打ちます。
設定はEEPROMに保存されます。
電源投入時に設定をEEPROMから読み込み、状態を {S|P}{R|N} {K|E} と鳴動して知らせます。
例えば、パドル、極性反転、カナ モードの場合は、PNK と鳴動し、ストレート、極性ノーマル、英数モードの場合は SNE と鳴動します。
ボタンを押しながら電源投入で初期化されます。ファーム書き込み後の初回起動時には初期化することをおすすめします。
マイコンボードはArduino pro Micro (ATmega32U4)、半固定抵抗10kΩ x2、タクトスイッチ、
ブザー(PKM13EPYH4000-A0)、3.5Φステレオジャックを使用しています。
ケースはタカチのSW-55で、Dタイプのユニバーサル基板を一部カットして使用しています。
高さは余裕がないので マイコンボードはロープロファイルのピンヘッダを使用しています。
幅はジャストサイズでした。超音波カッターで加工しています。
コードは github に GPLv3 で公開しています。
バグ報告のIssueや、機能追加の Pull Request は歓迎しますのでお気軽にどうぞ。