この記事では、MakeCode for micro:bitのチュートリアル「クラップライト(Clap Lights)」を解説します。
Clapは英語で「たたく、うつ」という意味。
今回は、マイクロビットについているマイクを使って、手をたたいた音でLEDを点灯・消灯させるプログラムを作ります。
チュートリアルを開始する
MakeCode for micro:bitのホーム画面を開きます。
チュートリアル「Clap Lights」を選択し、ブロックの「チュートリアルを開始」をクリックしましょう。
不要なブロックを消す
「最初だけ」ブロックは今回使わないので消しましょう。
まわりの音がうるさくなったとき
手をたたいて、マイクが音を感知したときの処理を作りましょう。
入力カテゴリにある「まわりの音がうるさくなったとき」ブロックを配置します。
「うるさいかどうか」のしきい値以上の音量を感知したとき、中にあるプログラムを実行します。
変数「lightsOn」を作成する
変数カテゴリを選んで「変数を追加する…」をクリックし、lightsOnという名前の変数を作りましょう。
変数とは、プログラムで使う数字や文字のようなデータを一時的に保存するための場所のことです。よく数字や文字を入れておく箱と言われたりします。
変数について「変数とは?スクラッチ(Scratch)を使って解説」でくわしく解説しています。
「lightsOn」はLEDが点灯しているか記録する変数
変数「lightsOn」は、LEDが「点灯しているか」または「消灯しているか」記録する役割があります。
- 点灯している場合は「真(しん)」
- 消灯している場合は「偽(ぎ)」
そもそも真と偽って何?ってことですが、カンタンに言うと
- 真はそうだよ
- 偽はちがうよ
という意味です。英語で、真はtrue、偽はfalseと表現されます。
真偽値については「論理演算(かつ・または・ではない)とは?スクラッチ(Scratch)を使って解説」でくわしく解説しています。
点灯している?消灯している?
変数「lightsOn」の値が真か偽かで処理が分かれます。
- 変数「lightsOn」の値が真 → LEDを点灯
- 変数「lightsOn」の値が偽 → LEDを消灯
論理カテゴリの「もし<真>なら/でなければ」ブロックを出し、「まわりの音がうるさくなったとき」ブロックの中に配置します。
変数カテゴリの変数「lightsOn」を出し、「もし<真>なら/でなければ」ブロックの<真>の部分に配置します。
「もし lightsOn なら」という条件にピンとこないかもしれません。
これは「変数「lightsOn」が真なら」と同じ意味です。
「もし<真>なら/でなければ」ブロックは、もし条件が真の場合は「なら」の下にある命令を実行し、偽の場合は「でなければ」の下にある命令を実行します。
なので、変数「lightsOn」の値が真の場合、「なら」の下にある命令が実行されます。
変数「lightsOn」が真なら
変数「lightsOn」が真なら、LEDを点灯します。
基本カテゴリから「LED画面に表示」ブロックを出し、「もし lightsOn なら/でなければ」ブロックの「もし lightsOn なら」の下に配置します。
LEDは自由にデザインしましょう!
変数「lightsOn」が真でなければ
変数「lightsOn」が偽なら、LEDを消灯します。
基本カテゴリから「表示を消す」ブロックを出し、「もし lightsOn なら/でなければ」ブロックの「でなければ」の下に配置します。
変数「lightsOn」の値を逆にする
手をたたいてマイクが音を感知するたびに、変数「lightsOn」を逆の値(真⇔偽)にします。
変数カテゴリから「変数 lightOn を 0 にする」ブロック出し、「もし lightsOn なら/でなければ」ブロックの上に配置します。
論理カテゴリから「ではない」ブロックを出し、「変数 lightOn を 0 にする」ブロックの 0 の部分に配置しましょう。
変数カテゴリから変数「lightsOn」ブロックを出し、「ではない」ブロックの空いている部分に配置します。
入力が真なら偽、偽なら真を返します。
シミュレーターで確認する
シミュレーターで作ったプログラムを試してみましょう。
LEDの右に出てきた音量のコントローラーを上下にドラッグすることで、音量を上げ下げできます。
音量を上げてみてください。ある値以上になると、LEDがついたり消えたりするはずです。
チュートリアルの説明では128以上となっていますが、165以上にするとLEDが点灯・消灯します。
マイクロビットにプログラムを転送する
シミュレーターで正しく動くことを確認できたら、マイクロビットに転送して動かしてみましょう。
マイクロビットにプログラムを転送する方法は「【マイクロビット】パソコンとのつなぎ方・外し方、プログラムの転送方法」でくわしく紹介しています。
しきい値を調整する
マイクロビットに転送して動かしてみてると、手をたたいてないのにマイクが音を感知してしまったり、反対に手をたたいても音を感知してくれなかったりするかもしれません。
そんな時は、音のしきい値を調整しましょう。
入力の下にあるその他カテゴリにある「うるさいかどうかのしきい値を128に設定する」ブロックは、「うるさいかどうか」のしきい値を設定するブロックです。
しきい値とは、さかい目になる値のこと。まわりの音の大きさがしきい値以上の場合は「うるさい」と判断します。
何も設定しなかった場合、しきい値は165になっています。
しきい値を小さくすると、小さな音でも感知するようになり、しきい値を大きくすると、大きな音をたてないと感知しないようになります。
試行錯誤しながら、ちょうどいい値をさがしてみてくださいね。
変数「lightsOn」には、最初何の値が入っている?
プログラムはこれで完成ですが、ここで問題です。
変数「lightsOn」には、最初何の値が入っているでしょう?
一番最初に音を感知した時「変数 lightsOn を lightsOn ではない にする」ブロックで、変数「lightsOn」が何から何に変わっているのか気になりませんか?
「エディター切り替え」ボタンで、プログラムの表示をブロックからJavaScriptに切りかえてみてください。
そうすると、ブロックで作ったプログラムがJavaScriptというプログラミング言語で表示されます。
その中に、
という命令があります。
これは、lightsOn という変数を作って false(偽)を設定しなさいという命令です。
よって、変数「lightsOn」には最初「偽」が設定されていることが分かります。
変数は最初何が入っているか分かりません。使用する前に値を入れて初期化する必要があります。
ブロックでプログラミングしていると変数に最初何が入っているのか分かりにくいです。
変数にどんな値が入っているのか意識するようにしましょう。
まとめ
チュートリアル「クラップライト(Clap Lights)」について紹介しました。
今回使用したブロック
- 「まわりの音がうるさくなったとき」ブロック
「うるさいかどうか」のしきい値以上の音量を感知したとき、中にあるプログラムを実行します。
- 「~ではない」ブロック
入力が真なら偽、偽なら真を返します。
- 「うるさいかどうかのしきい値を128に設定する」ブロック
「うるさいかどうか」判断するしきい値を設定する。
下の記事で、マイクの機能についてくわしく解説しています。興味があったら読んでみてください。