K3NG CW Keyer を作成

K3NG CW Keyer を作成

K3NG CW Keyer を作成

2022年に再開したアマチュア無線ですが、気が付くとFT8というデジタル通信方式にどっぷり漬かっていました。
そんな私でも時々モールス信号を耳にしていましたのでモールス通信も再開しようと思いましたが、モールス符号は覚えているのに解読速度が遅く、電鍵を打つ手がもつれるなどとても再開できる状態ではありませんでした。
となるとトレーニングですが、無線機にモニター機能や簡単なトレーニング機能が実装されていましたが、トレーニングのために無線機の電源を入れるのは電力の無駄ですのでリハビリにも適していそうなキーヤーを作成することにしました。

”k3ng cw keyer”でネット検索すると日本を含め多くの制作サイトを見ることが出来ます。
本家のgithubサイト”Welcome to the K3NG Arduino CW Keyer wiki!”では必要な全ての情報が得られます。
かなりの情報量ですがgoogleのウェブサイト翻訳が使え見出しが見やすいので辞書の様に使えます。
”200 Build: Configuring Your Keyer”はK3NGソフトウェアのカスタマイズ方法の理解に役立ちました。
ソフトウェアは同ページ左上の”<> CODE”を開いたところにあります。
また、同ページの末尾に書かれているマニュアル”Cees, PA3CVI, has published an excellent Dutch manual and an English Translation.”はArduino IDEが初めての人でも解るように説明されています。

先ずはブレッドボードにArduino nanoと表示器SSD1306を使ってベーシックなK3NGキーヤーを組上げて動作を確認しました。

試用して気に入りましたがArduino nanoではメモリー不足でほしい機能を全て組み込むことが出来ませんでしたので小型のMEGA 2560 PROを使って作成することにしました。

制作用回路図フリーソフトのKicadを初めて使ってみました)

PCBレイアウト(Excelで作成⇒Snipping Toolで画面コピー⇒ペイントソフトで両面図作成)

今回新たにアマゾンで購入した主な部品はMega2560 pro @2,139-とLCD 1602 @375-の二つだけで他の部品は単価が数円から数十円ほどです。

完成 モバイルバッテリーで動作します。(100均のプラケースに収めました)


前足スタンドも100均のこれです。

コードをダウンロードして解凍してできたk3ng_cw_keyer-masterホルダーの中にあるk3ng_keyerには複数のハードウェアに合わせた専用コードが多く含まれていて参考になりますが、今回はトレーニング用として以下のコードだけを使いました。
コンパイル時にライブラリーが見つからないというエラーが発生したらk3ng_cw_keyer-masterホルダーの中にあるlibrariesホルダーから追加します(追加手順は最初に案内したマニュアルにも書かれています)。


コードの変更箇所(オリジナルのコードに変更を加えた箇所のみ)
k3ng_keyer.inoはファイル名をk3ng_keyer_mega2560pro_jq3gju.inoに変更しています。

k3ng_keyer_mega2560pro_jq3gju.ino:SSD1306を使ってみた時に警告が出ていたので修正。
3802	#endif			//* Removed ";" 

keyer_features_and_options.h:機能の有効化と無効化の変更です。
	#define FEATURE_BUTTONS
	#define FEATURE_COMMAND_MODE
	#define FEATURE_COMMAND_LINE_INTERFACE
	#define FEATURE_MEMORIES
	#define FEATURE_MEMORY_MACROS
	#define FEATURE_BEACON
	#define FEATURE_BEACON_SETTING
	#define FEATURE_TRAINING_COMMAND_LINE_INTERFACE
	#define FEATURE_POTENTIOMETER
	#define FEATURE_SERIAL_HELP
	#define FEATURE_DEAD_OP_WATCHDOG
	#define FEATURE_AUTOSPACE
	#define FEATURE_FARNSWORTH
	#define FEATURE_LCD_4BIT
	#define FEATURE_ALPHABET_SEND_PRACTICE
	#define FEATURE_COMMAND_MODE_PROGRESSIVE_5_CHAR_ECHO_PRACTICE
	#define FEATURE_STRAIGHT_KEY
	#define FEATURE_STRAIGHT_KEY_ECHO
	// #define OPTION_PRIMARY_SERIAL_PORT_DEFAULT_WINKEY_EMULATION
	// #define OPTION_WINKEY_STRICT_HOST_OPEN
	// #define OPTION_WINKEY_2_SUPPORT
	// #define OPTION_WINKEY_SEND_BREAKIN_STATUS_BYTE
	// #define OPTION_WINKEY_INTERRUPTS_MEMORY_REPEAT
	// #define OPTION_WINKEY_2_HOST_CLOSE_NO_SERIAL_PORT_RESET
	// #define OPTION_WINKEY_IGNORE_LOWERCASE
	#define OPTION_MORE_DISPLAY_MSGS
	#define OPTION_ADVANCED_SPEED_DISPLAY
	#define OPTION_PROSIGN_SUPPORT

keyer_pin_settings.h:作成する回路に合わせてI/Oピン番号を変更しました。
	#define paddle_left 8
	#define paddle_right 6
	#define tx_key_line_1 11
	#define sidetone_line 13
	#define potentiometer A5
	#define ptt_tx_1 5
	  #define command_mode_active_led 23
	  #define lcd_rs 33
	  #define lcd_enable 35
	  #define lcd_d4 37
	  #define lcd_d5 39
	  #define lcd_d6 41
	  #define lcd_d7 43
	  #define pin_straight_key 12

keyer_settings.h:キーイング速度の初期値と表示範囲を設定しました。
	#define initial_speed_wpm 16
	#define initial_command_mode_speed_wpm 16
	#define LCD_COLUMNS 16
	#define LCD_ROWS 2