JH7UBCブログ

アマチュア無線 電子工作 家庭菜園など趣味のブログです

micro:bit MicroPython モールス符号解読器の試作

2019-11-21 13:00:50 | micro:bit

 micro:bitでモールス符号解読器を試作しました。

 符号解読のアルゴリズムは、Rspberry Piでモールス符号解読器を作った時と基本的に同じですが、簡単に説明します。

 pin0をプルアップしておき、信号をpin0に加えます。したがって、モールス信号のdot(短点)またはdash(長点)の時にLowレベル(0)になります。

 下の図はAの符号が入力された場合で、スタートビット1をMcodeにセットし、信号が入力される度に1ビット左にシフトして(2倍して)dotのとき0,dashのとき1を加えます。これによって、モールス符号をコード化します。

 Aの場合は、101ですから、10進数で5になります。この方法で、A~Z,0~9,/をコード化し、10進数の順に並べてoubunというリストを作っておきます。

 実際に入力されたモールス符号をコード化し、コードに応じた文字をリストから表示すれば、でコードされたことになります。

 デコードのタイミングは、Hレベルが短点時間の1.5倍程度になった時としました。

 

 スクリプトです。

自作のキーヤーにパドルを接続して、テストしました。

 

 普通の速度のモールス信号なら解読できます。

 ただ、文字表示が1文字だけですので、同じ文字が続いた時に前の文字と区別がつきません。

 やはり、文字を横に表示していくタイプの表示器(例えばLCD1602)の方が解読器には適していると思います。

コメント

micro:bit MicroPython utimeを使ったレシプロカル式周波数カウンタ

2019-11-16 12:10:08 | micro:bit

 MicroPythonのutimeモジュールには、現在の時刻の取得、時間間隔の測定、遅延などの関数があります。

 詳細は、ドキュメンテーションを見ていただくとして、この関数を利用して、周波数カウンタを試作してみます。

 タイトルのレシプロカル式とは「逆数式」のことで、信号の周期を測定して、f=1/Tの関係から、周期の逆数を計算して周波数を求める方式です。

 pin0のデジタル入力を利用し、その前に簡単なアンプをつけました。

 pin0の電圧が1から0に変化する時の時刻(start_timeとend_time)を測定して、時刻の差をとれば、1周期の時間を測定できます。

 周期をus単位で測定し、f(Hz)=1000000/T(us)で計算すると周波数f(Hz)を測定することができます。

 スクリプトです。

 呼び出した時点でのmicro:bitの稼働時間をusで返す関数が、utime.ticks_us()です。

 1周期は、start_timeとend_timeを測定し、utime.ticks_diff(end_time, start_time)関数で、その時間差(周期)を計算します。

 計算したperiod(周期)は、小数点がついていますので、int()で整数化してからスクロール表示します。

 自作SGから100Hzの信号を出して、micro:bitで実測してみました。

 97Hz~103Hz程度(誤差3%)の値を表示しました。

 周波数がほぼ、正しく表示されるのは、10Hz~200Hz程度で、500Hz程度までは、それらしい数値を表示します。

 この周波数カウンタは、実用になるものではありませんが、utimeを使えば、こんなこともできるのでは、と思って作ってみました。

コメント

micro:bit MicroPython エレキー

2019-11-14 15:22:09 | micro:bit

 micro:bit でエレキーを作ってみます。

 パドルをpin1とpin2に接続し、pin0に出力します。

 pin1とpin2は、micro:bitの設定でPULL UPします。

 pin0の出力は、2SC1815のオープンコレクタで出力します。(リグに接続します)

 

 スクリプトです。

 スピードは固定です。

 

パドルはコードウォリーJrを使用し、モニタ用にブザーを接続してテストしました。

 ちゃんとエレキーとして動作します。

 スクイーズ操作もできますが、メモリ機能がないので、切れが早いので、慣れるまで若干練習が必要かもしれません。

コメント

micro:bit MicroPython PULL UP,PULL DOWN

2019-11-12 13:12:13 | micro:bit

 micro:bitの入力ピンは、プログラムによって、pULLUP,PULL DOWNそしてそのどちらもしない状態NO PULLにセットすることができます。

 pin0を0.5秒(500ms)ごとに、PULL UP,PULL DOWN,NO PULLの状態にセットして、pin0の電圧を観察してみます。

 スクリプトです。

 picoscopeの画面です。

PULL UP で3.3V

PULL DOWN で0V

NO PULL で約0.3V でした。

必要に応じて、各入力端子をPULL UP,PULL DOWN,NO PULLにセットして使用します。

 

コメント

micro:bit MicroPython モールス符号練習機

2019-11-09 15:06:50 | micro:bit

 micro:bit MicroPythonの組み合わせで、モールス符号練習機を作ってみました。

 micro:bitで音を出すメソッドは、music.pitch(frequency,duration,pin,wait)です。

 pinとwaitを省略するとpin0にfrequency(Hz),でduration(ms)間pin0に矩形波を出力します。

 AからZまでのモールス符号をランダムに出力させます。

 ボタンAを押すとスタートし、ボタンBでストップさせます。

 モールスの速度は、最初のバージョンなので固定として、JARLのモールス電信技能認定の3級より少し早い程度(30字/分)に設定します。(これは後で変更可能です)

 

 つまり、短点とスペースの時間を200ms、長点と文字間のスペースの時間を短点の時間の3倍の600msとします。

 スクリプトです。

 音の周波数は、700Hzにしています。(好みで変更してください)

 モールス符号は、A~Zの順に.と-で表し、morseというリストにしておきます。

 また、A~Zの文字は、mojiというリストにしておきます。

 0~25の乱数を発生させ、数字に対応した文字を表示し、モールス符号を送出します。

-------------------------------------------------------------------

from microbit import *
import music
import random
 
morse_code = ['.-','-...','-.-.','-..','.','..-.','--.','....','..','.---',
              '-.-','.-..','--','-.','---','.--.','--.-','.-.','...','-',
              '..-','...-','.--','-..-','-.--','--..']

moji = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N',
        'O','P','Q','R','S','T','U','V','W','X','Y','Z']
 
def dot():
    music.pitch(700,200)
 
def dash():
    music.pitch(700,600)
 
def space():
    sleep(200)
 
def ch_space():
    sleep(600)
 
def morse():
    while True:
        n = random.randint(0,25)
        m = morse_code[n]
        l = len(m)
        display.show(moji[n])
        for i in range(0,l):
            s = m[i]
            if s == '.':
                dot()
            else:
                dash()
            space()
        ch_space()
        if button_b.is_pressed():
            break
 
while True:
    if button_a.is_pressed():
        morse()
---------------------------------------------------------------------------------------
 
 pin0にスピーカを接続して音を出します。練習にちょうど良い音量です。(イヤホンでは、音が大きすぎます)
 電池で動きますので、持ち運び可能です。
 
 速度を変えられるようにするなど、皆さんで改良してみてください。

 

コメント