Quantcast
Channel: JH7UBCブログ
Viewing all articles
Browse latest Browse all 440

ラズパイ Python モールス符号解読器

$
0
0
 Raspberry Piでモールス符号解読器を作ってみました。言語は、Pythonです。

 入力はGPIO24で、10kΩでプルアップしています。無信号時HIGH、信号時LOWの信号を入れます。

 解読された文字は、Python Shell画面に表示されます。

 今回は、メモリーキーヤーの信号を入れます。

イメージ 1

 モールス符号の解読アルゴリズムは、IchigoJam Morse decoderのものをPythonに移植しました。

 信号の時間の長さや無信号の時間の長さを測定するのは、sleep(秒)関数を使いました。

 sleep(0.001)でループさせ、カウンタをカウントアップすることにしました。カウンタは、信号がHIGHの時間を測定するカウンタをHcounter、LOWの時間を測定するカウンタをLcounterとします。

 解読アルゴリズムは、次のとおりです。
イメージ 2

 プログラム(スクリプト)は、次のとおりです。とりあえず、欧文のみA-Z 0-9の解読です。

 速度は、約10WPM~30WPMの解読を確認しています。速度の変化にはある程度追従します。

-------------------------------------------------------
# -*- coding:utf-8 -*-
"""
morse decoder Ver 0.5
2017/04/28
JH7UBC Keiji Hata
"""
import RPi.GPIO as GPIO
from time import sleep
GPIO.setmode(GPIO.BCM)
GPIO.setup(24,GPIO.IN)
#character list
Oubun = ['*','*','E','T','I','A','N','M','S','U','R','W','D','K','G','O','H','V','F','*','L','*','P','J','B','X','C','Y','Z','Q','*','*','5','4','*','3','*','*','*','2','*','*','*','*','*','*','*','1','6','*','/','*','*','*','*','*','7','*','*','*','8','*','9','0','*','*']
Mcode = 1
Lcounter = 0
Hcounter = 0
T = 120
W = 400
Flag = 0
print "MORSE DECODER Ver.0.5"
print "STOP = ctrl+C"
try:
    while True:
       
        #GPIO.input=HIGHの時の処理
        while GPIO.input(24) == GPIO.HIGH:
            if Mcode != 1:
                sleep(0.001)
                Hcounter += 1
                if Hcounter > T:
                    if Mcode < 66:
                        print Oubun[Mcode],
                    else:
                        print "*",
                    Flag = 1
                    Mcode = 1
            else:
                sleep(0.001)
                Hcounter += 1
                if Flag == 1 and Hcounter > W:
                    print ("  "),
                    Flag  = 0                   
 
        Lcounter = 0
        #GPIO.inout=LOWの時の処理
        while GPIO.input(24) == GPIO.LOW:
            sleep(0.001)
            Lcounter +=1
           
        if Lcounter < T:
            Mcode <<= 1
            T = Lcounter * 1.8
            W = Lcounter * 4
        else:
            Mcode <<= 1
            Mcode += 1
           
        Hcounter = 0
except KeyboardInterrupt:
    pass
-----------------------------------------------------------------------

メモリーキーヤーとラズパイを接続した様子です。

イメージ 3

解読した画面です。

イメージ 4

なお、詳細はJH7UBCホームページに掲載します。

Viewing all articles
Browse latest Browse all 440

Trending Articles