今回は、Arduino を使って CW(モールス信号)を解読できる「cwdecoder」というプロジェクトを試してみました。
紹介するのは、oz1jhm.dk という海外のサイトで公開されているものです。
oz1jhm.dk
なお、このサイトには、CW の欧文だけでなく、和文のモールス信号も解読できるように、私が個人的に修正したスケッチ(プログラム)も掲載されています。
和文と欧文の切り替えは自動で行われ、「ホレ」で和文、「ラタ」で欧文に切り替わるようになっています。ぜひ、皆さんのアマチュア無線の活動に役立ててみてください。
接続はジャンパワイヤだけでOK。ただし私は I2C を使ってみました。
元のスケッチ通りにジャンパワイヤで配線すればすぐに動作しますが、私は LCD ボードとの接続をもっとシンプルにしたかったので、パラレル接続ではなく I2C モジュールを使えるようにスケッチを少し修正しました。
I2C 対応の LCD は便利ですが少し高めなので、私は安価な「1602 LCD」ボードに、別途購入した I2C モジュールをハンダ付けして使っています。

このI2Cモジュールは、5個で600円程度の格安品(いわゆる中華製)で、アドレスは「0x27」のようです。

安物の ”1602 LCD” に取り付けて使います。

I2CモジュールはLCDの裏側に取り付けます。配線はたった4本(VCC、GND、SDA、SCL)で済むので、作業もスッキリします。
ArduinoのI2Cピン配置(Unoなどの場合)
SDA:A4
SCL:A5

実際に使ってみました
Arduinoにスケッチを書き込み、電源を入れると、LCDに「00 WPM」と表示され、モールス信号の入力待ち状態になります。

ここで、CW 練習ソフト「CW MANIA」を使って、「CQ DE JH1LHV K」という文字列をオーディオ出力してみました。

すると、LCDに送信速度とともに文字がしっかり表示され、正しくデコードされていました。
以前にも CW デコーダを自作して試したことがありますが、今回の「cwdecoder」は、反応も安定していて、かなり完成度が高いと感じます。
どうやら Goertzelアルゴリズムというデジタル信号処理の手法を使っているようです。


必要な部品はとても少ない
使う部品もシンプルで、以下のような構成で始められます。
- 抵抗:3本
- コンデンサ:1個
- LED:1個
- Arduino本体
これだけあれば、すぐに試せるはずです。
なお、LCD は「20×4」(4行20桁)のタイプを使うと、より見やすくなるのでおすすめです。
■ ■ ■
今日はこのあたりで一区切りにしますが、今後は AVR のワンチップ(ATmega328Pなど)だけで最小構成の基板化もしてみたいところです。
市販の CW デコーダは数千円するものもありますが、この「cwdecoder」を使えば、かなりの精度でデコードできますし、自作ならではの楽しさも味わえます。
しばらくはこの「cwdecoder」で遊べそうです!