【マイクロビット×MakeCode】クラップライト(チュートリアル:Clap Lights)

この記事では、MakeCode for micro:bitのチュートリアル「クラップライト(Clap Lights)」を解説します。

マイクロビットには、音を感知するためのマイクがついています。

今回は、マイクを使って手をたたいた音でLEDを点灯・消灯させるプログラムを作りますよ。

Clapは英語で「たたく、うつ」という意味です。

 

新しいバージョン(V2.0~)用のチュートリアルです。

 

 

スポンサーリンク

チュートリアルを開始する

Clap Lightsを開始する

MakeCode for micro:bitのホーム画面を開きます。

チュートリアル「Clap Lights」を選択し、ブロックの「チュートリアルを開始」をクリックしましょう。

 

不要なブロックを消す

最初だけブロックを消す

「最初だけ」ブロックは今回使わないので消しましょう。

 

まわりの音がうるさくなったとき

まわりの音がうるさくなったとき

手をたたいて、マイクが音を感知したときの処理を作りましょう。

入力カテゴリにある「まわりの音がうるさくなったとき」ブロックを配置します。

「まわりの音がうるさくなったとき」ブロック
「うるさいかどうか」のしきい値以上の音量を感知したとき、中にあるプログラムを実行します。

 

変数「lightsOn」を作成する

変数「lightsOn」を作成

変数カテゴリを選んで「変数を追加する…」をクリックし、lightsOnという名前の変数を作りましょう。

変数とは、プログラムで使う数字や文字のようなデータを一時的に保存するための場所のことです。よく「数字や文字を入れておく箱」と言われたりします。

変数について「変数とは?スクラッチ(Scratch)を使って解説」でくわしく解説しています。

 

変数「lightsOn」は、LEDが「点灯しているか」または「消灯しているか」記録する役割があり、

  • 点灯している場合は「真(しん)」
  • 消灯している場合は「偽(ぎ)」

が設定されています。

真なら点灯、偽なら消灯

そもそも真(しん)と偽(ぎ)って何?ってことですが、カンタンに言うと

  • 真はそうだよ
  • 偽はちがうよ

という意味。英語で、真はtrue、偽はfalseと表現されます。

真偽値については「論理演算(かつ・または・ではない)とは?スクラッチ(Scratch)を使って解説」でくわしく解説しています。

 

点灯している?消灯している?

変数「lightsOn」が真なら

変数「lightsOn」の値が真か偽かで処理が分かれます。

  • 変数「lightsOn」の値が → LEDを点灯
  • 変数「lightsOn」の値が → LEDを消灯

論理カテゴリの「もし<真>なら/でなければ」ブロックを出し、「まわりの音がうるさくなったとき」ブロックの中に配置します。

変数カテゴリの変数「lightsOn」を出し、「もし<真>なら/でなければ」ブロックの<真>の部分に配置します。

 

「もし lightsOn なら」という条件にピンとこないかもしれません。

これは「変数「lightsOn」が真なら」と同じ意味です。

「もし<真>なら/でなければ」ブロックは、もし条件が真の場合は「なら」の下にある命令を実行し、偽の場合は「でなければ」の下にある命令を実行します。

なので、変数「lightsOn」の値が「真」の場合、「なら」の下にある命令が実行されます。

 

変数「lightsOn」が真なら

lightsOnが真なら、LEDを点灯

変数「lightsOn」なら、LEDを点灯します。

基本カテゴリから「LED画面に表示」ブロックを出し、「もし lightsOn なら/でなければ」ブロックの「もし lightsOn なら」の下に配置します。

LEDは自由にデザインしましょう!

 

変数「lightsOn」が真でなければ

lightsOnが偽なら、LEDを消灯

変数「lightsOn」なら、LEDを消灯します。

基本カテゴリから「表示を消す」ブロックを出し、「もし lightsOn なら/でなければ」ブロックの「でなければ」の下に配置します。

 

変数「lightsOn」の値を逆にする

lightsOnを逆の値にする

手をたたいてマイクが音を感知するたびに、変数「lightsOn」を逆の値(真⇔偽)にします。

変数カテゴリから「変数 lightOn を 0 にする」ブロック出し、「もし lightsOn なら/でなければ」ブロックの上に配置します。

論理カテゴリから「ではない」ブロックを出し、「変数 lightOn を 0 にする」ブロックの 0 の部分に配置しましょう。

変数カテゴリから変数「lightsOn」ブロックを出し、「ではない」ブロックの空いている部分に配置します。

「~ではない」ブロック
入力が真なら偽、偽なら真を返します。

 

シミュレーターで確認する

シミュレーターで確認する

シミュレーターで作ったプログラムを試してみましょう。

LEDの右に出てきた音量のコントローラーを上下にドラッグすることで、音量を上げ下げできます。

音量を上げてみてください。ある値以上になると、LEDがついたり消えたりするはずです。

チュートリアルの説明では128以上となっていますが、165以上にするとLEDが点灯・消灯します。

 

マイクロビットにプログラムを転送する

シミュレーターで正しく動くことを確認できたら、マイクロビットに転送して動かしてみましょう。

USBケーブルでマイクロビットとパソコンをつなぎ、画面左下にある「ダウンロード」ボタンをクリックします。

 

しきい値を調整する

しきい値を設定する

マイクロビットに転送して動かしてみてると、手をたたいてないのにマイクが音を感知してしまったり、反対に手をたたいても音を感知してくれなかったりするかもしれません。

そんな時は、音のしきい値を調整しましょう。

しきい値とは、さかい目になる値のこと。

まわりの音の大きさがしきい値以上の場合は「うるさい」と判断します。

しきい値を小さくすると、小さな音でも感知するようになり、しきい値を大きくすると、大きな音をたてないと感知しないようになります。

入力の下にあるその他カテゴリにある「うるさいかどうかのしきい値を128に設定する」ブロックは、「うるさいかどうか」のしきい値を設定するブロックです。

何も設定しなかった場合、しきい値は165になっています。

試行錯誤しながら、ちょうどいい値をさがしてみてくださいね。

 

変数「lightsOn」には、最初何の値が入っている?

プログラムはこれで完成ですが、ここで問題。

変数「lightsOn」には、最初何の値が入っているでしょう。

一番最初に音を感知した時「変数 lightsOn を lightsOn ではない にする」ブロックでは、変数「lightsOn」が何から何に変わっているのか気になりませんか?

「エディター切り替え」ボタンで、プログラムの表示をブロックからJavaScriptに切りかえてみてください。

そうすると、ブロックで作ったプログラムがJavaScriptというプログラミング言語で表示されます。

変数「lightsOn」には、最初何の値が入っている?

その中に、

let lightsOn = false

という命令があります。

これは、lightsOn という変数を作って false(偽)を設定しなさいという命令です。

よって、変数「lightsOn」には最初「偽」が設定されていることが分かりますね。

変数は最初何が入っているか分かりません。使用する前に初期化する必要があります。

ブロックでプログラミングしていると変数に最初何が入っているのか分かりにくいです。

変数にどんな値が入っているのか意識するようにしましょう。

 

まとめ

チュートリアル「クラップライト(Clap Lights)」について紹介しました。

今回使用したブロック

  • 「まわりの音がうるさくなったとき」ブロック
    「うるさいかどうか」のしきい値以上の音量を感知したとき、中にあるプログラムを実行します。
     
  • 「~ではない」ブロック
    入力が真なら偽、偽なら真を返します。
     
  • 「うるさいかどうかのしきい値を128に設定する」ブロック
    「うるさいかどうか」判断するしきい値を設定する。

 

下の記事で、マイクの機能についてくわしく解説しています。興味があったらみてくださいね。

 

タイトルとURLをコピーしました