K3NG氏設計のエレキーを作ります。多くの作例があり、オープンソース・Arduinoライブラリで手軽に作れるのが魅力です。
基本回路と変更点
本家の基本回路図(basic unit schematic)に少し変更を加えます。
基本回路図は、
https://github.com/k3ng/k3ng_cw_keyer/wiki/210-Build:-Schemati
のBasic Unit Schematicからダウンロードください。直接ダウンロードする場合はこのリンクをポチってください。PDFの回路図が見られます。
基本回路図からの変更点としては
(1)コマンドモードの時にはLEDを光らせる。
(2)トーン出力はトランジスタではなくて電子工作のお供LM386BDに取り替えボリュームをつける。
(3)液晶モニタをつける。
(4)3つのスイッチ数を4にする(ただし同ボタンにメモリ機能ももたせた場合は後述のようにメモリの関係で液晶利用とトレードオフの関係にあります。)。
(1)(2)(3)はCW練習・学習を意識しています。苦手なもので。
ハードの作成
部品調達
手持ち部品のみで作ります。
MCUはATmega 328pを使います。Arduino Duemillanove 328ボードをそのままケースに入れます。10数年前発表のレガシーボードです。この子の後継がUnoということになります。
328単体を回路に組み込むと安価に小さく出来ますが、ISP端子の配線や電源回路を省くために今回はボードをそのまま使います。あるいは今時ならmade in China製のArduino nanoをAliexpressあたりで買えば実はもっと安くお手軽なわけですがDuemillanoveボードが余ってるんです・・・
液晶はI2Cが取り回しが楽なのでSSD1306搭載0.96インチOLEDを使います。小さいので実用上どうかはさておきます。
なお同OLED用ライブラリをincludeしてコンパイルするとメモリが圧迫されるので、キーヤ機能をかなり限定してコンパイルする必要があります(後述)。
回路図では2N2222となっているTX出力のオープンコレクタ用トランジスタは汎用のものならなんでもいいので、電子工作の(かっての)お供2SC1815Yを装填しておきます。サイドトーン用のトランジスタ2N2222は無くしてそのかわりにカップリングコンデンサーを置き、ボリュームとLM386BDでスピーカーを鳴らします。
ケースはaitendoのアルミケース(120x35x80)を使います。上野末広町の実店舗で500円ぐらいでした。楽しいお店でしたがcovid-19以降閉店のままです・・。
作成
ケースの中にボードを固定。その上にDuemillanove
やUno用に販売されているプロトタイプ基板をのせて配線します。
写真真ん中にはLM386BDがあって、そのそばに両面テープでスピーカー(fosterの刻印があります)をケース底に貼り付けてます。蓋を閉めてもよく鳴ります。インピーダンスが3.5オームタイプなのでちょっとあれですが、当然!ここらへんは気にしないで次にすすみます。
電源はUSBのみとし、ボードからUSB端子の半田を外して、裏蓋に出します。プログラムも変更しやすいですし。
線を延長しているので通信エラー防止用に各線にFB101を入れました。なくてもOKだとおもいますがおまじないです。
あと音量ボリュームと出力用ジャック2点を配置してます。ジャックは向かって右がデフォルトのTX1です。自環境では出力は1つでいいんですが、枯れ木も山の賑わいです。
パネル前面には、液晶と速度調整用ボリューム、コマンドとメモリ用スイッチ5個、電源表示用LEDとコマンドモード表示用LEDがあります。
写真では見づらいですが上の方に赤く光ってるのが電源LED.。液晶右下の横にある穴がコマンドモード用LEDの明かり窓です。青色で光ります。
前面パネルに装着するためにユニバーサル基板を切って上の部品と分圧用抵抗(arduinoのアナログピン用)を配置・配線して、プロト基板側にピンヘッダで差し込みます。あとはこれにあわせてパネルの穴あけです。
液晶窓穴は下手な手ヤスリなのでこれが限界でした。ちょっと平行がでてないか・・。丸穴で済むものはいいのですが、直線を必要とするこの手の加工はフライス盤を使いたいです。がそのためには壊れ中のその子を修理しなければいけません・・(壊れた経緯は別記事で)。
ところでこの写真でわかるように液晶の右側の文字が少し切れています。10.2の2の部分です。これは窓開けが失敗しているのではなくて、液晶自体の問題です。後ほど原因を確認したいと思っています(って言いながら、結局放置するのが常ですが・・・)
ソースと設定
k3ng keyerのソースはgithubにあります。
https://github.com/k3ng/k3ng_cw_keyer
同サイトにはオプションでつかう各種外部ライブラリもアップされていますが、今回の用途にはつかいません。
k3ng_keyerディレクトリの中のもののみをダウンロードしてarduinoIDEのスケッチブックディレクトリに任意のディレクトリ名で入れます。
ただしオプション用.hファイルなどが合計70以上ありますので、それらはディレクトリから外しておくのが吉です。そうしないとk3ng_keyer.inoを開いたときに使う使わないにかかわらずarduinoIDEのファイルタブに読み込まれてしまいます(そういうIDE仕様なのでしょうか)。
今回利用したのは次のものだけ。コンパイルに必要最小限(だと思う)のファイルです。
k3ng_keyer.ino
keyer.h
keyer_debug.h
keyer_dependencies.h
keyer_features_and_options.h
keyer_hardware.h
keyer_pin_settings.h
keyer_settings.h
src<ーーこれはサブディレクトリ
上のうち機能拡張にかかわるkeyer_features_and_options.h、arduinoのピン端子対応をきめるkeyer_pin_setting.h、各種設定数値を決めるkeyer_settings.hの3ファイルの修正変更を行います。
機能拡張設定ーkeyer_features_and_options.h
次の機能を有効にします。
#define FEATURE_BUTTONS //タクトボタン有効化
#define FEATURE_COMMAND_MODE //コマンドボタン有効化
#define FEATURE_POTENTIOMETER //速度調節用ボリュームをつける
#define FEATURE_OLED_SSD1306 //利用液晶
メモリ機能を有効にするには#define FEATURE_MEMORIESのコメントを外す必要があります。しかし利用MCUのメモリ制約のためコンパイルが通りません。液晶表示を使わなければOKです。当面メモリは使わないのでコメントアウトのままにしています。
Arduinoピンの変更ーkeyer_pin_settings.h
回路を一部変えているので次の項目に変更を加えます。
#define sidetone_line 13 //サイドトーン出力用ピン。もとは4ピンですが遠すぎるので13ピンに変更。同ピンからカップリングコンデンサ−>VR−>LM386に信号が行きます。
#ifdef FEATURE_BUTTONS
#define analog_buttons_pin A1
// #define command_mode_active_led 0
#define command_mode_active_led 7 //コマンドボタンを押すと7ピン経由でLEDを光らせます
#endif //FEATURE_BUTTONS、
各種数値設定の変更ーkeyer_settings.h
次の部分を変更しています。
#define initial_speed_wpm 16 // "factory default" keyer speed setting 26ってわたしには高速(光速)ですので16にしました
#define initial_command_mode_speed_wpm 16 // "factory default" command mode speed setting 20は(以下略)
#ifdef FEATURE_BUTTONS
#define analog_buttons_number_of_buttons 5 // コマンドボタンプラス設定ボタン合計4がデフォルトですが1つ増やしたので5となります
#define analog_buttons_r1 10 //変更していませんが、ボタン用の抵抗分圧を変更することもできます。これは結構便利だと思います。
#define analog_buttons_r2 1
#endif
コンパイル
SSD1306液晶にはライブラリ(SSD1306Ascii.hとSSD1306AsciiWire.h)が必要になります。arduinoIDEのライブラリ管理画面を使えば問題なくインストールされます。
先述しましたが液晶とメモリ機能を同時有効にするとコンパイルはできません。
最大30720バイトのフラッシュメモリのうち、スケッチが31612バイト(102%)を使っています。
最大2048バイトのRAMのうち、グローバル変数が1522バイト(74%)を使っていて、ローカル変数で526バイト使うことができます。
text section exceeds available space in board
リファクタリングは大変なのでやりません。二台目を作るときは(え、作るのか?)、ここらへんのところを勘案して作成したいとおもいます。
操作
コマンドモードでの各種機能やボタンの機能については、ji1pvv氏のページが詳しいので、それを見ながらあれこれ動かしています。ありがとうございます。
https://ji1pvv.cocolog-nifty.com/blog/2021/12/post-71056c.html