マイクロビット用ピアノモジュール

 今回は「micro:bit用ミニピアノモジュール」を制御してみます。マイクロビット用のピアノモジュールは複数ありますが、今回使用するのは以下のものです。

・micro:bit用ミニピアノモジュール(Waveshare)
https://www.waveshare.com/wiki/Piano_for_micro_bit
・Amazonでの販売(micro:bit用ミニピアノモジュール mini piano module I2Cインターフェイス)
https://www.amazon.co.jp/dp/B07DYTSRJK/

 このミニピアノモジュールはタッチセンサーがついており、手で押すか何かで鍵盤を押せば音がなります。もちろん、プログラムから制御することもできます。
 また、ミニピアノモジュールには4つのフルカラーLEDがついています。ピアノ演奏をしなくてもLEDを制御して楽しむこともできます。

 マイクロビットのブロックエディタは2018年10月26日以降新しくなりましたが、このミニピアノモジュールは新しいブロックエディタに対応しています。もちろん、古いブロックエディタでも使う事ができます。

 ミニピアノモジュールは図のように差し込みます。なお、必ずマイクロビットにミニピアノモジュールを差し込んだ後に電源をつないでください。マイクロビットに電源をつないだまま、ミニピアノモジュールを接続すると正しく機能しないことがあります。

  • ミニピアノモジュール

    ミニピアノモジュール

ミニピアノモジュールの詳細については公式サイトで以下のページにPDFとして用意されています。
https://www.waveshare.com/w/upload/a/a4/Piano_for_microbit_User_Manual_EN.pdf

ミニピアノモジュールの機能を追加

 ミニピアノモジュールは、そのままではブロックエディタで使うことができません。ミニピアノモジュールを使うためには拡張機能としてブロックを追加する必要があります。
 以下の手順に従って機能を追加します。なお、旧ブロックエディタでも同じように機能を追加できます。

  • 「高度なブロック」のカテゴリをクリックします

    「高度なブロック」のカテゴリをクリックします

  • 「拡張機能」のカテゴリをクリックします

    「拡張機能」のカテゴリをクリックします

  • ミニピアノモジュールは直接URLを入れないと出てきません

    ミニピアノモジュールは直接URLを入れないと出てきません

  • 入力欄に「https://github.com/waveshare/TouchPiano」と入力したら虫眼鏡ボタン(検索ボタン)をクリックします

    入力欄に「https://github.com/waveshare/TouchPiano」と入力したら虫眼鏡ボタン(検索ボタン)をクリックします

  • TouchPianoをクリックします

    TouchPianoをクリックします

  • しばらくするとプログラムが読み込まれ「WSTouchPiano」「Neopixel」のカテゴリが追加されます。今回使用するのは「WSTouchPiano」です

    しばらくするとプログラムが読み込まれ「WSTouchPiano」「Neopixel」のカテゴリが追加されます。今回使用するのは「WSTouchPiano」です

 これでミニピアノモジュールを使う準備ができました。

鍵盤をタッチしたら音を鳴らす

 まず、鍵盤をタッチしたら音が鳴るようにしてみましょう。「WSTouchPiano」のカテゴリをクリックします。すると図のようなブロックが表示されます。

  • 「WSTouchPiano」のカテゴリをクリックします

    「WSTouchPiano」のカテゴリをクリックします。

「Play Piano」のブロックを「ずっと」のブロックの中に入れます。

  • このようにブロックを組み上げます

    このようにブロックを組み上げます

 JavaScriptコードでは以下のようになります。

basic.forever(function () {
    WSTouchPiano.TP_PlayPiano()
})

 これでプログラムはできあがりです。簡単にできるのはタッチしたら演奏するためのブロックがあらかじめ用意されているからです。あとは、作成したプログラムをダウンロードしマイクロビットに転送して演奏できるか確認してみましょう。

  • 鍵盤をタッチすると音がなり、さらにLEDが点灯します
  • 鍵盤をタッチすると音がなり、さらにLEDが点灯します
  • 鍵盤をタッチすると音がなり、さらにLEDが点灯します

音楽を演奏する

 それでは次にプログラムから音を鳴らしてみましょう。プログラムで音を鳴らすには「Play Music」ブロックを使います。「Play Music」ブロックで音階と音の長さを指定します。
 ドレミファソラシドと鳴らすには以下のようにブロックを並べます。

  • 音を鳴らすブロックを演奏する順番に並べます

    音を鳴らすブロックを演奏する順番に並べます

 JavaScriptコードでは以下のようになります。

WSTouchPiano.TP_PlayMusic(262, music.beat(BeatFraction.Whole))
WSTouchPiano.TP_PlayMusic(294, music.beat(BeatFraction.Whole))
WSTouchPiano.TP_PlayMusic(330, music.beat(BeatFraction.Whole))
WSTouchPiano.TP_PlayMusic(349, music.beat(BeatFraction.Whole))
WSTouchPiano.TP_PlayMusic(392, music.beat(BeatFraction.Whole))
WSTouchPiano.TP_PlayMusic(440, music.beat(BeatFraction.Whole))
WSTouchPiano.TP_PlayMusic(494, music.beat(BeatFraction.Whole))
WSTouchPiano.TP_PlayMusic(523, music.beat(BeatFraction.Breve))
basic.forever(function () {

})

 JavaScriptプログラムを見ると分かりますが、音階は数値(周波数)で指定されています。長い音楽を演奏するような場合、頑張ってブロックを並べるのは大変です。このような場合、配列を使うと多少楽になります。配列を使ってもブロックエディタではちょっと面倒ですので、どちらかと言えばJavaScriptコードエディタで入力した方が楽でしょう。

 「ドレミファソラシド」と鳴らすには図のようにブロックを組み上げます。

  • 音の周波数を配列に入れておき演奏させます

    音の周波数を配列に入れておき演奏させます

 JavaScriptコードでは以下のようになります。

let 配列: number[] = []
配列 = [262, 294, 330, 349, 392, 440, 494, 523]
for (let 値 of 配列) {
    WSTouchPiano.TP_PlayMusic(値, music.beat(BeatFraction.Whole))
}
basic.forever(function () {

})

 音を鳴らす値を少しずつ変化させるようにするとサイレンのような音にすることもできます。

  • 周波数を少しずつ変化させて音を鳴らします

    周波数を少しずつ変化させて音を鳴らします

 JavaScriptコードでは以下のようになります。

for (let カウンター = 0; カウンター <= 600; カウンター++) {
    WSTouchPiano.TP_PlayMusic(カウンター, music.beat(BeatFraction.Sixteenth))
}
basic.forever(function () {

})

LEDを制御

 それでは最後に4つのLEDを制御してみましょう。LEDは個別に制御することができないので、常に4つのLEDの色を指定することになります。
 LEDの表示色を指定するには「Set RGB LED Color」ブロックを使います。このブロックのLED1〜4の値を指定することで特定の色か任意の色を表示できます。
 あらかじめ用意されている色を指定する場合は「Set Color」ブロックを使います。このブロックには以下の9色が用意されいます。

red 赤
orange 橙
yellow 黄
green 緑
blue 青
indigo 藍
violet 紫(すみれ色)
purple 紫
white 白

 以下のようにブロックを組み上げるとLED1には赤色、LED2には青色、LED3には黄色、LED4には白色が表示されます。

  • 指定した色を表示します

    指定した色を表示します

 JavaScriptコードでは以下のようになります。

WSTouchPiano.TP_ShowRGB(
WSTouchPiano.TP_SetColor(RGB_COLOR.RED),
WSTouchPiano.TP_SetColor(RGB_COLOR.BLUE),
WSTouchPiano.TP_SetColor(RGB_COLOR.YELLOW),
WSTouchPiano.TP_SetColor(RGB_COLOR.WHITE)
)
basic.forever(function () {

})
  • 実行結果

    実行結果

 任意の色を指定する場合は「red( ) green( ) blue( )」ブロックを使います。値は0〜255の輝度を指定します。数値が小さいほど暗く、大きいほど明るくなります。
 以下のようにブロックを組み上げるとLED1には赤色、LED2には緑色、LED3には青色、LED4には白色が表示されます。

  • 数値を指定して色を表示します

    数値を指定して色を表示します

 JavaScriptコードでは以下のようになります。

basic.forever(function () {
    WSTouchPiano.TP_ShowRGB(
    WSTouchPiano.TP_SetRGB(255, 0, 0),
    WSTouchPiano.TP_SetRGB(0, 255, 0),
    WSTouchPiano.TP_SetRGB(0, 0, 255),
    WSTouchPiano.TP_SetRGB(255, 255, 255)
    )
})
  • 実行結果

    実行結果

 赤色、青色、緑色の明るさを乱数にして光らせることもできます。「Set RGB」ブロックを使って特定の色の範囲だけにすることもできますし、以下のように多くの色域を含む値にすることもできます。

  • 4つのLEDをランダムに光らせます

    4つのLEDをランダムに光らせます

 JavaScriptコードでは以下のようになります。

basic.forever(function () {
    WSTouchPiano.TP_ShowRGB(
    Math.randomRange(0, 255),
    Math.randomRange(256, 65535),
    Math.randomRange(65536, 16777216),
    Math.randomRange(0, 16777216)
    )
})
  • 実行結果

    実行結果

 他にも鍵盤が押されたらLEDを光らせるといったこともできますし、演奏にあわせてLEDの色を変えたりすることもできます。音とLEDをうまく組み合わせて何か作ってみるのもよいでしょう。

著者 古籏一浩
プログラミングをベースにして面白そうなものはとりあえずやってみるというスタンス。複雑なものよりシンプルで楽しめるものが好み。最近は30年前に移植したゲーム(mz-700版 SPACE HARRIER)の話などを書いたりしています。
著者サイト:http://www.openspc2.org/