micro:bit(マイクロビット)は手のひらサイズの小さなコンピューター。いろいろな機能が備わっていて、自分でプログラミングをすることができるよ。ブログラミングは「MakeCode(メイクコード) for micro:bit」を使えば、初心者でもかんたんにできるんだ。
『子供の科学』本誌の連載「micro:bitでレッツプログラミング!」では、micro:bitを使った「探検ウォッチ」というツールを使って、その機能をプログラミングでつくったけれど、この連載が「コカネット」にお引っ越し。Web連載でも、探検ウォッチのいろいろな機能をプログラミングでつくっていくぞ!
これまでの本誌連載のバックナンバーは、micro:bit特設サイトで公開しているよ(コカネットの無料会員登録が必要)。本誌の連載を見たことがないという人は、まずこちらを見てみてね。Web連載は、本誌の連載の続きになっているから、基本的なことがわからなくなったら本誌のバックナンバーを振
り返ろう。
さて、今回は探検ウォッチを楽器にしてみよう。「テルミン(Theremin)」という電子楽器を再現してみるよ。この連載では「KoKa micro:bit探検ウォッチキット」が必要なので、持っていない人は「KoKa Shop!」で手に入れて、探検ウォッチをつくっておこう。
1 テルミンってなんだ?
みんなはテルミンを知っているかな? 1920年にレフ・セルゲーエヴィチ・テルミン博士というロシアの発明家が発明した世界初の電子楽器だ。木の箱から金属製のアンテナが、水平と垂直に2本飛び出している外観
が特徴だ。この箱の中には2つの高周波発信器
が入っていて、手を近づけたり、離
したりすると2つの発信器の周波数に差が生じる。それによって音の高さが変わるというしくみなんだ。次の写真は、テルミン博士がテルミンを弾
いているときのものだよ。2本のアンテナに手を近づけたり離
したりして、演奏するんだ。
テルミンの演奏は今でも聞くことができる。下で紹介している「ザ・ぷー」の「テルミン・テルミン」という曲でテルミンが演奏されているよ。どんな音なのか聞いてみよう。
左手の水平のアンテナは音量(音の強弱)、垂直に立っているアンテナは音程(音の高低)を調整するしくみになっているんだ。
2 光テルミンのしくみを考える
さて、このテルミンをmicro:bitで再現するために、今回は光センサーを使って音程を変える方法を使ってみることにした。明るさの変化によって音が変わる「光テルミン」にするぞ。
micro:bitの光センサーは、実はLEDディスプレイなんだ。なぜLEDディスプレイが光センサーになるのかは、連載第8回「リモートで明るさを測ろう」(2019年5月号)で紹介しているので、、「micro:bitでレッツプログラミング!」旧サイトのバックナンバーを見てみてね。
また、探検ウォッチ1つでは、音程と音の強弱の両方をコントロールすることはできない。まずは音程のみをコントロールすることにしよう。
micro:bitの光センサーにライトをかざして、micro:bitから離れている(暗い)場合は低い音、ライトを近づけて光が明るくなるにつれて音が高くなっていくしくみにする。これはテルミンの、垂直に伸びているアンテナから手を遠ざけると低い音、近づけると高い音になるのと同じしくみだ。アンテナと手の距離
のかわりに、明るさの変化を利用している。明るさは部屋によって違うと思うので、まずは基準となる明るさを設定して、明るさに音程をマッピング(配置)していくしくみも必要そうだね。
また、テルミンの演奏を聞いてみるとわかるけれど、ド、レ、ミ、と音は区切られてなくて、連続して音が高くなっていくので、このテルミンの音の特徴も再現してみたい。「音を鳴らすブロック」に周波数で音を鳴らすブロックがあるので、それを使ってプログラミングしてみよう
演奏のイメージはこんな感じだ。使うライトはペンライトや懐中電灯、スマートフォンのカメラのライトなど、身近にあるもので大丈夫だよ。
3 周波数によって音を鳴らす
光テルミンをつくるために、さっき考えたしくみが実現できるかどうか実験してみよう。
3.1 周波数による音の高さを調べる
まずは音を周波数で鳴らすテストからやってみる。何Hz(ヘルツ)でどのような音が鳴るのか調べるんだ。
ブラウザーを起動して、MakeCodeにアクセスしたら、「新しいプロジェクト」をつくろう。
① カテゴリーの「高度なブロック」をクリックして表示される、「入出力端子」カテゴリーの「その他」にある「音を鳴らす(Hz)“0” 長さ(ミリ秒)“0”」ブロックを「ずっと」ブロックに組み合わせる。「音を鳴らす(Hz)」の“0”には500と入力。500Hzのことだ。
② すると、シミューレーションが始まり、音が鳴り始めるはずだ。確認できたら「音を鳴らす(Hz)」の数字を変えてみよう。1000Hzと大きくしたらどうなるかな? シミュレーションすると、音が高くなったんじゃないかな。
③ 今度は100Hzと小さくしてみよう。シミュレーションすると、音が低くなったんじゃないかな。
ちなみに、このプログラムでは音が鳴りやまない。シミュレーターで音を止めたい場合は、停止ボタンをクリックするよ。
これまでの実験による、周波数と音の高さの関係をまとめてみよう。
- 周波数が低いと低い音
- 周波数が高いと高い音
周波数をいろいろ変えてみて、どんな音が鳴るかを確認してみてね。
3.2 探検ウォッチのスピーカーで鳴る音を調べる
次に探検ウォッチのスピーカーで鳴る音の範囲を確認しよう。周波数を変えるために、毎回プログラムに戻って書き換えるのは大変だから、micro:bitのボタンAとBを押すことで変えられるようにプログラミングするよ。
①「変数」カテゴリーの「変数を追加する…」で変数「音の高さ」を追加する。
②「最初だけ」ブロックに、「変数」カテゴリーの「変数“音の高さ”を“0”にする」ブロックを組み合わせる。“0”は“500”にする。
③「ずっと」ブロックに、「入出力端子」カテゴリーの「その他」にある「音を鳴らす(Hz)“0” 長さ(ミリ秒)“0”」ブロックを組み合わせる。「音を鳴らす(Hz)」のところは変数「音の高さ」を組み込むよ。
④「入力」カテゴリーの「ボタン“A”が押されたとき」ブロックに、「変数」カテゴリーの「変数“音の高さ”を“1”だけ増やす」ブロックを組み合わせる。“1”は“100”に変えよう。
⑤ ④と同じようにボタンBが押された場合のプログラムをつくる。「変数“音の高さ”を“1”だけ増やす」ブロックの“1”は“-100”に変える。
⑥「ボタン“A+B"が押されたとき」ブロックは、「基本」カテゴリーの「数を表示」ブロックに、変数「音の高さ」を組み込んだものと組み合わせる。
「音確認」という名前をつけて保存して、探検ウォッチに書き込んで試してみよう。スイッチをオンにしたときは500Hzなので、ボタンAやBを押して、周波数を変えていこう。
試してみたら、0Hzは無音だった。Hzとは「1秒間に何回振動するか」をあらわす単位なので、振動が0回ということは音はならないんだ。
高いほうは9000Hzくらいまで試してみたけど、探検ウォッチのスピーカーで、音として聞こえそうなのは、2000Hzくらいではなかったかな? ちなみに、ピアノの鍵盤
の音階と周波数の関係を調べてみると、普通の88個の鍵盤
があるピアノで、一番低い「ラ」が27.500Hz、一番高い「ド」が4186.009Hzということだ。真ん中のドと呼ばれる、よく使うド~シは下の表のようになっているよ。
鍵盤番号 | 周波数 | 音階 | 音名(英米式) |
40 | 261.626 | ド | C4 |
41 | 277.183 | C#4 | |
42 | 293.665 | レ | D4 |
43 | 311.127 | D#4 | |
44 | 329.628 | ミ | E4 |
45 | 349.228 | ファ | F |
46 | 369.994 | F#4 | |
47 | 391.995 | ソ | G4 |
48 | 415.305 | G#4 | |
49 | 440 | ラ | A4 |
50 | 466.164 | A#4 | |
51 | 493.883 | シ | B4 |
周波数と音の高さの関係はイメージできたかな? 実験から、光テルミンを実現するには、0Hzから2000Hzくらいまでの音を、micro:bitの光センサーに当てる光の明るさでコントロールするプログラムをつくればよさそうだね。
今回はここまで。次回は、ライトを当てたときの光の明るさを測ってから、いよいよ光テルミンのプログラムをつくっていくぞ。お楽しみに!
(文/倉本大資 写真/青柳敏史)