マイクロビット用ピアノモジュール
今回は「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
ミニピアノモジュールの機能を追加
ミニピアノモジュールは、そのままではブロックエディタで使うことができません。ミニピアノモジュールを使うためには拡張機能としてブロックを追加する必要があります。
以下の手順に従って機能を追加します。なお、旧ブロックエディタでも同じように機能を追加できます。
これでミニピアノモジュールを使う準備ができました。
鍵盤をタッチしたら音を鳴らす
まず、鍵盤をタッチしたら音が鳴るようにしてみましょう。「WSTouchPiano」のカテゴリをクリックします。すると図のようなブロックが表示されます。
「Play Piano」のブロックを「ずっと」のブロックの中に入れます。
JavaScriptコードでは以下のようになります。
basic.forever(function () {
WSTouchPiano.TP_PlayPiano()
})
これでプログラムはできあがりです。簡単にできるのはタッチしたら演奏するためのブロックがあらかじめ用意されているからです。あとは、作成したプログラムをダウンロードしマイクロビットに転送して演奏できるか確認してみましょう。
音楽を演奏する
それでは次にプログラムから音を鳴らしてみましょう。プログラムで音を鳴らすには「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」ブロックを使って特定の色の範囲だけにすることもできますし、以下のように多くの色域を含む値にすることもできます。
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/