Arduinoで横振り電鍵のエレキーを作った話
2週間程前にアマチュア無線3級を受験したのですが、昨日ようやく合格通知が届きました!
ちなみに前回はこちら。 kikyujin.hatenablog.com
やったぜ、これで電波出し放題・・・ではなく、これから免許証の申請をしないといけません。
このページを参考に申請するです↓ www.tele.soumu.go.jp
pdfで申請書があるので、印刷して、収入印紙と証明写真を貼って、住民票を添付して、切手を貼付した免許返送封筒を同封して、その一式を郵便で送付すると1ヶ月ぐらいで返送されてくるそうです。
あれ?デジタル化・・・いなくなってしもたん?
はは、目から鼻水が・・・
ちなみにこて台のスポンジは収入印紙の貼付に便利です
もう印紙の裏をぺろぺろしなくて良いですね😋
それはさておき
諸々準備が整うまでモールスの練習しようと思って、Amazonで安い横振り電鍵を買いました!
なんかカッコいい
ん?モールスってこういうヤツなのでは・・・?
kenelephant.co.jp
これはこれで今もあるんですが、どうも最近はトン・ツーをそれぞれ別のレバー(パドル)で打ち分ける方式になってるようなんです。
多分打電速度が安定するんじゃないかと。
しかし、電鍵言うからには言うてみればただのスイッチなので、このコードをつなぐ先がないと音は鳴りません。
当然のことながら無線機ならばこのコードを挿すところが付いているのですが、こちとらまだ電波を出すわけにいかないので、Arduinoで電波を出さずに好きなだけトン・ツーできる器具を自作しました。
必要なパーツ
- 言わずとしれたArduino UNO
3.5Φのステレオジャック
これは秋月でブレッドボードにさせるジャックキットを購入。 150円。そのへんに転がっていたパッシブブザー
無いとトン・ツー鳴りません。
まあLEDでチカチカさせるだけでも練習にはなりますが・・・
あ、アクティブブザーでも良いですが、その場合は音程が変えられません。抵抗
無くても音が大きいだけで問題ないかと。
1kΩでだいぶ低音量になります。
配線図
パッシブブザーはPWMできるD11に接続します。
ステレオジャックのL/R(この図ではRING1/2となってますが)はD7/8に接続。
どっちをどっちに繋いでも後々何とでもなります。
実際 ↓
プログラム
本物?のエレキーの動作が良くわかってないので、とりあえずで作成しました。
いろんな動画を見ていると、短音(トン)・長音(ツー)が同時押しされた時には長音が優先になっている気がしたので、そのように実装しました。
押しっぱなしでリピートします。
また、素人が打っても短音→長音、長音→短音を素早くすると入力落とすことがあったので、発音待ち時間で1回スキャンを入れました(このあたりは適当です)。
打電速度はDELAY_S
で調整しますが、ひとまずLCWOサイトの20WPMとほぼ同じになるように調整しました(ちょっと遅いかも)。
#define BUZ_PIN 11 #define LED_PIN 13 #define SW_S_PIN 7 #define SW_L_PIN 8 #define DELAY_S 70 #define DELAY_L (3*DELAY_S) #define TONE_N 0 #define TONE_S 1 #define TONE_L 2 unsigned char nextTone; void buz_on() { digitalWrite(LED_PIN, HIGH); tone(BUZ_PIN, 600); } void buz_off() { digitalWrite(LED_PIN, LOW); noTone(BUZ_PIN); } void setup() { pinMode(LED_PIN, OUTPUT); pinMode(BUZ_PIN, OUTPUT); pinMode(SW_S_PIN, INPUT_PULLUP); pinMode(SW_L_PIN, INPUT_PULLUP); nextTone = TONE_N; } // 長点 void longTone () { buz_on(); delay(DELAY_L); buz_off(); // 短点分間隔を開ける&合間に先読みをする delay(DELAY_S / 2); // まず半分待つ // 違うキー(短点)が押されているか?(長音優先) if (digitalRead(SW_L_PIN) == HIGH && digitalRead(SW_S_PIN) == LOW) { nextTone = TONE_S; // 次は短点 } delay(DELAY_S / 2); // 残り半分待つ } // 短点 void shortTone () { buz_on(); delay(DELAY_S); buz_off(); // 短点分間隔を開ける&合間に先読みをする delay(DELAY_S / 2); // まず半分待つ // 違うキー(長点)が押されているか? if (digitalRead(SW_L_PIN) == LOW) { nextTone = TONE_L; // 次は長点 } delay(DELAY_S / 2); // 残り半分 } void loop() { if (nextTone == TONE_L) { // 長点 nextTone = TONE_N; longTone(); } else if (nextTone == TONE_S) { // 短点 nextTone = TONE_N; shortTone(); } else { // キーが押されている?長点優先でチェック if (digitalRead(SW_L_PIN) == LOW) { nextTone = TONE_L; } else if (digitalRead(SW_S_PIN) == LOW) { nextTone = TONE_S; } } }
使ってみる
電鍵の底面が磁石になってて固定できるので、その辺にあった中国茶の缶の蓋に貼り付けました^^;
動画はこちら↓ youtube.com
んー、なかなかいい感じ?
というか、本物がどういう動作なのかわからないので比較ができない^^;
この後どうする?
このままでも全然良いのですが、せっかくなのでどこでも練習できるようにATtiny85を使って小型化&電池動作するようにしたいと思います。
ケース・・・どうしようかな・・・