CW Decoder
2018.05.19
手持ちのATMEGA328P-PUと表示器LCD1602の組み合わせで欧文/和文対応CW Decoderを作ってみました。
当初はJH7UBC局のトーン検出に567Dを使用したもの及びスケッチを利用させて頂き作成しました。
トーン検出性能の問題なのか入力レベルの大小、周波数、ノイズ等の影響なのか解読率が今一つでした。
中華製でAliExpress等にて1K円程度で売られているPIC16F+567Dの組み合わせのCW Decoderも解読率が悪く実用に耐えないと聞いています。
(トーン検出の前段にフイルタアンプ等を組み込めば改善されるかも?)
そこで今回は解読率アップを狙いOZ1JHM局のアナログ入力FFT方式、和文対応スケッチを採用してみました。
OZ1JHM局サイト
http://skovholm.com/cwdecoder
欧文スケッチ
https://github.com/SkillfulHacking/arduino-cwdecoder
和文対応スケッチ
http://www.skovholm.com/decoder_kh.ino (JA9MAT局が和文対応)
回路は簡単で外付け部品も少なくArduino UNO (nanoも可)を利用すれば簡単に作成出来ます。
サイトの図面でArduinoのD13に接続している発光ダイオードの向きは逆になっていますので修正して下さい。
和文対応スケッチで強制的に和文/欧文切り換えを行う場合はArduinoのD2及びD3に押しボタンスイッチ追加が必要です。
D2/D3に電圧がかかってい無くプルアップしないとD2/D3をスイッチでアースに落としても切り換え出来ませんでした。(アースに落とすのではなく+5vをスイッチ経由で入力すればOK? )
又、D13はDigital信号ON/OFF表示で使用していますので欧文/和文切り換え表示はD4に変更しました。LCDにモードが表示されますのでD4に接続するLEDは必要ないですが当初作成Dcoderでモート表示に使用していましたのでそのまま流用しました。
----------------------スケッチ112行目付近の修正---------------------
void setup() {
pinMode(2,INPUT) ; //スイッチに接続ピンをデジタル入力に設定
pinMode(3,INPUT) ; //スイッチに接続ピンD4をデジタル入力に設定
digitalWrite(2,HIGH); //D2プルアップ
digitalWrite(3,HIGH); //D3プルアップ
// pinMode(13,OUTPUT) ; //LEDに接続ピンをデジタル出力に設定
pinMode(4,OUTPUT) ; //LEDに接続ピンD4をデジタル出力に設定
---------------------スケッチ160行目付近の修正-----------------------
if (digitalRead(2) == LOW) { //スイッチの状態を調べる ORG:HIGH
// digitalWrite(13,HIGH) ; //和文スイッチが押されているならLEDを点灯
digitalWrite(4,HIGH) ; //和文スイッチが押されたならLEDを点灯
sw = 1; //和文に強制的に切り替える
}
if (digitalRead(3) == LOW) { //スイッチの状態を調べる ORG:HIGH
// digitalWrite(13,HIGH) ; //欧文スイッチが押されているならLEDを点灯
digitalWrite(4,LOW) ; //欧文スイッチが押されたならLEDを消灯
sw = 0; //欧文に強制的に切り替える
}
--------------------------------------------------------------------------
スケッチはTone検出周波数:744Hz / BandWidth:140Hz設定にてコンパイルしました。
OZ1JHM局のFFT方式は解読率は良く入力レベル変動、ノイズ等の影響は少ないようです。
スピードも10~30wpmの範囲内で若干タイムラグがありますが自動追従で解読出来ました。
後日、20x4の表示器に取り換え及びスイッチ等でTone検出周波数/BandWidthを変更出来る様に改良、ケースに入れたいと考えています。

567Dトーン検出方式からアナログ入力FFT方式に変更、回路はそのまま残しています。
写真右側中央付近の8Pソケットが567D用です。567Dを取付け、スケッチを変更すればトーン検出方式でも動きます。

LCD1602を取付けた写真です。表示エリアが狭いためLCD2004を使用した方が良いです。
---------追記-------------------
サイトURL https://k2jji.org/2014/09/18/arduino-base-cw-decoder/ を参考にAroduino(Atmega328P)のA0~A3の入力でTone検出周波数/BandWidthを各々4通りに設定、及び設定値をLCDに表示出来る様にスケッチを変更しました。
LCD2004(送料込み300円)はAliExpressに注文しましたので到着後交換予定です。
当初はJH7UBC局のトーン検出に567Dを使用したもの及びスケッチを利用させて頂き作成しました。
トーン検出性能の問題なのか入力レベルの大小、周波数、ノイズ等の影響なのか解読率が今一つでした。
中華製でAliExpress等にて1K円程度で売られているPIC16F+567Dの組み合わせのCW Decoderも解読率が悪く実用に耐えないと聞いています。
(トーン検出の前段にフイルタアンプ等を組み込めば改善されるかも?)
そこで今回は解読率アップを狙いOZ1JHM局のアナログ入力FFT方式、和文対応スケッチを採用してみました。
OZ1JHM局サイト
http://skovholm.com/cwdecoder
欧文スケッチ
https://github.com/SkillfulHacking/arduino-cwdecoder
和文対応スケッチ
http://www.skovholm.com/decoder_kh.ino (JA9MAT局が和文対応)
回路は簡単で外付け部品も少なくArduino UNO (nanoも可)を利用すれば簡単に作成出来ます。
サイトの図面でArduinoのD13に接続している発光ダイオードの向きは逆になっていますので修正して下さい。
和文対応スケッチで強制的に和文/欧文切り換えを行う場合はArduinoのD2及びD3に押しボタンスイッチ追加が必要です。
D2/D3に電圧がかかってい無くプルアップしないとD2/D3をスイッチでアースに落としても切り換え出来ませんでした。(アースに落とすのではなく+5vをスイッチ経由で入力すればOK? )
又、D13はDigital信号ON/OFF表示で使用していますので欧文/和文切り換え表示はD4に変更しました。LCDにモードが表示されますのでD4に接続するLEDは必要ないですが当初作成Dcoderでモート表示に使用していましたのでそのまま流用しました。
----------------------スケッチ112行目付近の修正---------------------
void setup() {
pinMode(2,INPUT) ; //スイッチに接続ピンをデジタル入力に設定
pinMode(3,INPUT) ; //スイッチに接続ピンD4をデジタル入力に設定
digitalWrite(2,HIGH); //D2プルアップ
digitalWrite(3,HIGH); //D3プルアップ
// pinMode(13,OUTPUT) ; //LEDに接続ピンをデジタル出力に設定
pinMode(4,OUTPUT) ; //LEDに接続ピンD4をデジタル出力に設定
---------------------スケッチ160行目付近の修正-----------------------
if (digitalRead(2) == LOW) { //スイッチの状態を調べる ORG:HIGH
// digitalWrite(13,HIGH) ; //和文スイッチが押されているならLEDを点灯
digitalWrite(4,HIGH) ; //和文スイッチが押されたならLEDを点灯
sw = 1; //和文に強制的に切り替える
}
if (digitalRead(3) == LOW) { //スイッチの状態を調べる ORG:HIGH
// digitalWrite(13,HIGH) ; //欧文スイッチが押されているならLEDを点灯
digitalWrite(4,LOW) ; //欧文スイッチが押されたならLEDを消灯
sw = 0; //欧文に強制的に切り替える
}
--------------------------------------------------------------------------
スケッチはTone検出周波数:744Hz / BandWidth:140Hz設定にてコンパイルしました。
OZ1JHM局のFFT方式は解読率は良く入力レベル変動、ノイズ等の影響は少ないようです。
スピードも10~30wpmの範囲内で若干タイムラグがありますが自動追従で解読出来ました。
後日、20x4の表示器に取り換え及びスイッチ等でTone検出周波数/BandWidthを変更出来る様に改良、ケースに入れたいと考えています。

567Dトーン検出方式からアナログ入力FFT方式に変更、回路はそのまま残しています。
写真右側中央付近の8Pソケットが567D用です。567Dを取付け、スケッチを変更すればトーン検出方式でも動きます。

LCD1602を取付けた写真です。表示エリアが狭いためLCD2004を使用した方が良いです。
---------追記-------------------
サイトURL https://k2jji.org/2014/09/18/arduino-base-cw-decoder/ を参考にAroduino(Atmega328P)のA0~A3の入力でTone検出周波数/BandWidthを各々4通りに設定、及び設定値をLCDに表示出来る様にスケッチを変更しました。
LCD2004(送料込み300円)はAliExpressに注文しましたので到着後交換予定です。
OLEDでオシロスコープ
2018.05.06
Arduino UNO + 0.96インチOLEDでオシロスコープをブレッドボードに組んでみました。
説明、及びスケッチは
https://www.youtube.com/watch?v=XHDNXXhg3Hg を参照しました。
コンパイルで必要なライブラリAdafruit_GFX_Library及びAdafruit_SSD1306は事前にArduinoIDEに追加しておきます。
0.96インチOLED(128x64)の場合のコンパイルエラー #error ("Height incorrect, please fix Adafruit_SSD1306.h!"); が出るのでAdafruit_SSD1306.hの修正が必要です。
修正内容は
#define SSD1306_128_64 のコメントを外す、#define SSD1306_128_32 のコメント化、及び #define SSD1306_LCDHEIGHT 64 の追加をします。
--------Adafruit_SSD1306.h (73行目付近)------------
#define SSD1306_128_64
// #define SSD1306_128_32
// #define SSD1306_96_16
#define SSD1306_LCDHEIGHT 64
----------------------------------------------------
取りあえずは動きましたが画面が小さすぎて当局の目では使用し難いためブレッドボードに組込み実験のみで製作はしません。

説明、及びスケッチは
https://www.youtube.com/watch?v=XHDNXXhg3Hg を参照しました。
コンパイルで必要なライブラリAdafruit_GFX_Library及びAdafruit_SSD1306は事前にArduinoIDEに追加しておきます。
0.96インチOLED(128x64)の場合のコンパイルエラー #error ("Height incorrect, please fix Adafruit_SSD1306.h!"); が出るのでAdafruit_SSD1306.hの修正が必要です。
修正内容は
#define SSD1306_128_64 のコメントを外す、#define SSD1306_128_32 のコメント化、及び #define SSD1306_LCDHEIGHT 64 の追加をします。
--------Adafruit_SSD1306.h (73行目付近)------------
#define SSD1306_128_64
// #define SSD1306_128_32
// #define SSD1306_96_16
#define SSD1306_LCDHEIGHT 64
----------------------------------------------------
取りあえずは動きましたが画面が小さすぎて当局の目では使用し難いためブレッドボードに組込み実験のみで製作はしません。

ZUMspotにOLED取付
2018.05.02
発注していた0.96インチOLEDが到着しましたのでZUMspotに取付けしました。
OLEDはJumboSpotと同様に2色タイプの物を購入しました。
ZUMspot基板GPIOの 1番ピン(3.3)-----OLEDの VCC
ZUMspot基板GPIOの 3番ピン(SDA)-----OLEDの SDA
ZUMspot基板GPIOの 5番ピン(SCL)-----OLEDの SCL
ZUMspot基板GPIOの 9番ピン(GND)-----OLEDの GND
ZUMspot基板とOLEDはケーブル+4PコネクタでOLEDに接続しました。
JumboSPOTの様にGPIOピンでOLEDを支える事が出来ないため2.6mmビスでケース上部に取付け実施しました。
コネクタでの接続理由は調整作業等でケース上部と下部を分離する際の半田付け作業を不要にするためです。
OLEDは不要と言えば不要なのですが動作モードが直ぐにわかる、及び今回のPi-StarバージョンアップでWlanのIPアドレスが表示される事によりテザリング等に於いてのWebコントロールが便利になりました。


OLEDはJumboSpotと同様に2色タイプの物を購入しました。
ZUMspot基板GPIOの 1番ピン(3.3)-----OLEDの VCC
ZUMspot基板GPIOの 3番ピン(SDA)-----OLEDの SDA
ZUMspot基板GPIOの 5番ピン(SCL)-----OLEDの SCL
ZUMspot基板GPIOの 9番ピン(GND)-----OLEDの GND
ZUMspot基板とOLEDはケーブル+4PコネクタでOLEDに接続しました。
JumboSPOTの様にGPIOピンでOLEDを支える事が出来ないため2.6mmビスでケース上部に取付け実施しました。
コネクタでの接続理由は調整作業等でケース上部と下部を分離する際の半田付け作業を不要にするためです。
OLEDは不要と言えば不要なのですが動作モードが直ぐにわかる、及び今回のPi-StarバージョンアップでWlanのIPアドレスが表示される事によりテザリング等に於いてのWebコントロールが便利になりました。


Pi-Star バージョンUp実施
2018.05.01
Pi-Starの新バージョンが出ましたのでアッデートを実施。
3.4.11 --> 3.4.12 です。
ZumSpot及びJumboSpot用共に実施しました。
------手順メモ------
sshで接続
rpi-rw
sudo pistar-update
rpi-rw
sudo pistar-upgrade
sudo reboot
------------追記-------------
5/6新バージョンが出ましたのでバージョン3.4.12 --> 3.4.13にアッデートを実施。
変更内容はモード YSF2NXDN / YSF2P25の追加 及びYSFモードでFCSホスト選択する事によりFCSに出れる様になりました。
3.4.11 --> 3.4.12 です。
ZumSpot及びJumboSpot用共に実施しました。
------手順メモ------
sshで接続
rpi-rw
sudo pistar-update
rpi-rw
sudo pistar-upgrade
sudo reboot
------------追記-------------
5/6新バージョンが出ましたのでバージョン3.4.12 --> 3.4.13にアッデートを実施。
変更内容はモード YSF2NXDN / YSF2P25の追加 及びYSFモードでFCSホスト選択する事によりFCSに出れる様になりました。
ZUMspotをケースに
2018.04.17
RaspberryPi Zero WHとZUMspotの組合せでケースに入れました。
使用ケースは タカチ TW5-3-9G です。
ケースの大きさはRaspberryPi Zeroより一回り大きいですがコンパクトに仕上がります。
側面にPOW/USB/HDMIコネクタが刺せるように切り込みを入れ穴をあけました。USB/HDMIは通常接続しないので穴あけはPOWの所だけでもOKと思います。
上部にはSMAコネクタ用に10mm程度の穴及び通気口を兼ねて発光ダイオードが見れる様に複数の小さな穴をあけています。下部にも通気を良くするため複数の小さな穴をあけました。
MicroSDカード用の穴はあけていませんが差替えは壊れた時以外不要ですので支障はありません。
上部に四角穴をあければOLED付きJumboSpotでもタカチ TW5-3-9G に収容可能と思います。
RaspberryPi ZeroはPOW/USB/HDM側をケースの側面に寄せて取付けます。寄せて取付しないとコネクタが挿し難くなります。
今のところ温度上昇も許容範囲ないで動作しています。
外観は下の写真通りです。

-------------追記--------------
0.96インチOLEDをAliExpress発注していますので届き次第ZUMspotにも取付予定です。
使用ケースは タカチ TW5-3-9G です。
ケースの大きさはRaspberryPi Zeroより一回り大きいですがコンパクトに仕上がります。
側面にPOW/USB/HDMIコネクタが刺せるように切り込みを入れ穴をあけました。USB/HDMIは通常接続しないので穴あけはPOWの所だけでもOKと思います。
上部にはSMAコネクタ用に10mm程度の穴及び通気口を兼ねて発光ダイオードが見れる様に複数の小さな穴をあけています。下部にも通気を良くするため複数の小さな穴をあけました。
MicroSDカード用の穴はあけていませんが差替えは壊れた時以外不要ですので支障はありません。
上部に四角穴をあければOLED付きJumboSpotでもタカチ TW5-3-9G に収容可能と思います。
RaspberryPi ZeroはPOW/USB/HDM側をケースの側面に寄せて取付けます。寄せて取付しないとコネクタが挿し難くなります。
今のところ温度上昇も許容範囲ないで動作しています。
外観は下の写真通りです。

-------------追記--------------
0.96インチOLEDをAliExpress発注していますので届き次第ZUMspotにも取付予定です。