Quantcast
Viewing all articles
Browse latest Browse all 440

ラズベリーパイ CWビーコン送出プログラム

 ラズベリーパイでのPythonプログラミングの練習として、CWビーコン送出プログラムを作って見ました。

 アルゴリズムは、CQ誌2014年3〜5月後に掲載された7J3AOZ局の記事を参考にさせていただきました。
 簡単に説明しますと、モールス符号の短点を0、長点を1で表し、ストップビットを1とします。

 Aは、トツーつまり、・ーですので、最下位ビットから順に0。1そして次にストップビット1をセットして、110とします。
 同じようにして、Bは、ー・・・なので、1001となります。これをモールス符号の内部コードとします。
 内部コードを10進数で表すと。A,B,C,D,E,F・・・=6,17,21,9,2,20・・・

 内部コードを最下位ビットから順に送出します。内部コードを右にシフトして、ストップビットだけになったら(内部コードが1になったら)1文字送信終了です。

 ハード面では、基本的には、Lチカと同じで、GPIO25を出力に使い、GPIOがHIGHの時に送信になります。
 メッセージの文字に対応したモールス符号の内部コードをとりだし、最下位ビットから0なら短点、1なら長点を送出します。

 モールス信号の規則に従い、長点は、短点の3倍の長さ、短点と短点、短点と長点の間は、短点と同じ時間、文字と文字の間は、短点の3倍、文と文の間は、短点の7倍とします。

 テストプログラムですので、送信速度は固定で、短点を0.1秒としています。(約12WPM)

 Pythonでの自分で作った初めてのプログラムです。これで一応動きました。
--------------------------------------------------------------------------------
import  RPi.GPIO as GPIO
from time import sleep
GPIO.setmode(GPIO.BCM)
GPIO.setup(25,GPIO.OUT)
Morse_Code =[63,62,60,56,48,32,33,35,39,47,1,1,1,1,1,1,1,6,17,21,9,2,20,11,16,4,30,13,18,7,5,15,22,27,10,8,3,12,24,14,25,29,19]
message='VVV VVV DE JH7UBC JH7UBC PM97WR'
message_len=len(message)
def  dot():
        GPIO.output(25,GPIO.HIGH)
        sleep(0.1)
        GPIO.output(25,GPIO.LOW)
       
def dash():
        GPIO.output(25,GPIO.HIGH)
        sleep(0.3)
        GPIO.output(25,GPIO.LOW)
def space():
        sleep(0.6)
try:
        while True:
                for  i  in  range(message_len):
                        char_code = ord(message[i])
                        if char_code == 0x20:#space code
                                space()
                        else:
                                Mcode = Morse_Code[char_code - 48]
                                while  Mcode !=  1:
                                        mark =  Mcode & 1
                                        if  mark == 0:
                                                dot()
                                        else:
                                                dash()
                                        sleep(0.1)
                                        Mcode >>=1
                                sleep(0.3)
                sleep(0.7)
                        
except KeyboardInterrupt:
        pass
   
GPIO.cleanup()
-----------------------------------------------------------------------
ラズパイでの実際のプログラミングの様子です。予約語や関数などは、色が付き、分かりやすくなっています。

Image may be NSFW.
Clik here to view.
イメージ 1

左のウインドウが、Python2(IDLE)2.7.9 Shell

右のウインドウが、エディタです。

このGUIが使えるようになって、コマンドラインからの操作より、ずっと便利になりまし。(実は、2015年にPythonの勉強をしようとしましたが、中断してしまいました。)

送信機の代わりに、モールス練習機を接続して、動作を確認しました。

Image may be NSFW.
Clik here to view.
イメージ 2

ラズパイとのインターフェースは、ベースに1kΩを入れた2SC1815をオープンコレクタとして使いました。

フォトカプラを使っても良いと思います。

少し、Pythonでのプログラミングの仕方が分かってきました。

Viewing all articles
Browse latest Browse all 440

Trending Articles