マイコンボードの収集をしているわけじゃないけど。。。
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 コールサイン・トレーナ」でも作ってみようかと思います。