マイコンボードの収集をしているわけじゃないけど。。。
1年以上も積みボードにしていた micro:bit。
この連休中に文字列表示以外のこと、morse を鳴らして遊んでみました。
圧電ブザーで morse
まずは、お手軽な圧電ブザーから。
micro:bit の A0 端子と GND 端子に圧電ブザーを取りつけます。

ケースは 3D Printer で作成。
それと、マイクロビット用コネクターブレイクアウトボードキットを使ってます。
プログラムは MicroPython です。
Micro:bit のウェブにある Python editor でもプログラムは書けますが、
Code With Mu が超お勧めです。
A0 をデジタル出力に設定してブザーをオン/オフするだけです。
私のコールサイン「JH1LHV」をモールスで3回繰り返してみました。
# by JH1LHV
from microbit import *
dot_speed = 60
msg = "JH1LHV JH1LHV JH1LHV"
morsetab = {
'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': '--..',
'0': '-----',
'1': '.----',
'2': '..---',
'3': '...--',
'4': '....-',
'5': '.....',
'6': '-....',
'7': '--...',
'8': '---..',
'9': '----.',
' ': ' ',
'?': '..--..',
';': '-.-.-.',
':': '---...',
'-': '-....-',
'/': '-..-.',
'(': '-.--.-',
')': '-.--.-',
'_': '..--.-',
}
def dot():
pin0.write_digital(1)
sleep(dot_speed)
pin0.write_digital(0)
def dash():
pin0.write_digital(1)
sleep(dot_speed * 3)
pin0.write_digital(0)
for m in msg.upper():
for c in morsetab[m]:
if c == '.':
dot()
elif c == '-':
dash()
sleep(dot_speed)
sleep(dot_speed * 3)
ブザーの個体差もあろうかと思いますが、実測してみると 約4,000Hz と甲高く、音も大きすぎ。
モールスを鳴らすには、不向きかと。。。
(ブザー音が大きすぎて、録音がサチっちゃいました。。。)
圧電スピーカで morse
次に、圧電スピーカを使って鳴らしてみます。
micro:bit の A0 端子と GND 端子に圧電スピーカを接続して、PWM で出力します。
# by JH1LHV
from microbit import *
dot_speed = 60
pin0.set_analog_period(1)
msg = "JH1LHV JH1LHV JH1LHV"
morsetab = {
'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': '--..',
'0': '-----',
'1': '.----',
'2': '..---',
'3': '...--',
'4': '....-',
'5': '.....',
'6': '-....',
'7': '--...',
'8': '---..',
'9': '----.',
' ': ' ',
'?': '..--..',
';': '-.-.-.',
':': '---...',
'-': '-....-',
'/': '-..-.',
'(': '-.--.-',
')': '-.--.-',
'_': '..--.-',
}
def dot():
pin0.write_analog(511)
sleep(dot_speed)
pin0.write_analog(0)
def dash():
pin0.write_analog(511)
sleep(dot_speed * 3)
pin0.write_analog(0)
for m in msg.upper():
for c in morsetab[m]:
if c == '.':
dot()
elif c == '-':
dash()
sleep(dot_speed)
sleep(dot_speed * 3)
圧電ブザーよりはマシな音にはなってますが、周波数を実測すると 約3,000Hz とチョット高め。
500Hz から1500Hz で鳴らすには、外部回路を使う必要がありそうです。
pin0.set_analog_period(1) <---- 1000Hz に設定
f = 500Hz とするなら、カッコ内の引数は、
周期 T (ms) = 1000 / f = 1000 / 500Hz = 2 <---- ms で設定する必要がある
pin0.set_analog_period(2) <---- 500Hz に設定
このように設定したところ、周波数は約1,500Hz(500Hzじゃない)にはなりましたが、
元が矩形波なので濁った音で聞こえてしまいます。
で、もう少し細かいステップで周波数を可変するためには、マイクロ秒で指定可能な
set_analog_period_microseconds(period) 出力される PWM 信号の周期を period にマイクロ秒単位で設定します。有効な最小値は 256μs です。
という、こんなメソッドもあるので、
set_analog_period_microseconds(1428) <---- 700Hz
とかやってみましたが、思うどおりの周波数で鳴ってくれません・・・ここはもう少し調査してみる必要がありそうです。
(ちなみに、1000 以下の数値を指定するとエラーになってしまいます。)
micro:bit
イギリスの小学生(高学年)に無償で配っているという micro:bit。
国内では秋月電子が取り扱いを始めたこともあって・・・多少は普及するかな。
Micro:bit の公式ウェブサイト:
Micro:bit財団は、技術による発明を誰にとっても楽しいものにする、グローバルな非営利団体です。

●主な仕様
・CPU:ARM Cortex-M0(16MHz)
・メモリ:16KB RAM
・LED×25個(5行5列)
・プッシュスイッチ×2個
・3軸加速度センサー×1個
・地磁気センサー×1個
・Bluetooth LE(Bluetooth Low Energy)
・リング×5(I/O×3、3V端子、GND)
・20ピンエッジコネクタ
・MicroUSBコネクタ×1個
・バッテリーコネクタ×1個(PHコネクタ:2ピン)
・外形サイズ:43×52×11㎜
・重量:9g
4cm×5cm の小さな基板にこれだけの機能が詰まって、秋月電子で @2,160円と、超お買い得です。
とまぁ、今回は micro:bit の触りだけということで。。。
次は、「CW コールサイン・トレーナ」でも作ってみようかと思います。