モールス符号解読器(Python)

2017.4.30 JH7UBC


モールス信号は、GPIO24に入力します。10kΩでプルアップしています。
無信号時HIGH、信号時LOWになります。今回は、メモリーキーヤーからモールス信号を入力します。
解読した文字は、Python Shellのウインドウに表示されます。

信号がLOWの時間を測定して、短点(dot)と長点(dash)かを判定します。
モールス符号の内部コードMcodeは、初期値=1(スタートビット)とし、信号dotまたはdashが入力される度に
左に1bitシフトし、LSB(最下位ビット)をdotなら0(何もしない)、dashなら1(1を加える)とします。
この操作で、例えばA(・−)なら2進数で101となります。ほかの符号についても同様にして、内部コードに変換します。
信号が、約2dot分なければ、内部コードを文字に変換します。
あらかじめ、内部コード順に並べたリストOubun[ ]に対して、print Oubun[Mcode],で文字を表示できます。
Pythonのリストは、配列と同じですが、使ってみると便利です。
文字を表示してから、4dot以上時間が経過したら(HIGHmp状態が4dot上なら)、スペースを表示します。
この条件ですと、無信号時に連続してスペースが表示されるので、Flagを使い、
文字を表示したら、Flagを立て(Flag=1とし)、スペースを1つ表示したらFlagを下ろします。(Flag=0とします)
Flag=1の時、スペースを表示することにすれば、文字の後にスペースが1個だけ表示されます。
以上のことをフローチャートで下に示します。

プログラム(スクリプト)は、こちら(テキストファイルです)

Raspberry Piとメモリーキーヤーをプルアップ回路を介して接続しています。

メモリーキーヤーからの信号を解読して、Python Shellに表示した様子です。

Pythonでは、print (),とカンマを付けることにより、改行せずに文字を表示することができますが、文字の後にスペースが入ってしまいます。
ちょっと間延びした感じになりますが、見やすいので良しとします。

今のところ、欧文のアルファベットと数字だけの解読ですが、Oubun[ ]のリストを拡大すれば、記号も解読可能になります。
また、Wabun[ ]というい和文リストを作り、ホレを受信したら和文リストに切り替えることにより、和文も解読可能になると思います。

inserted by FC2 system