ステップ1: 作る
説明
拍手などの大きな音が続いた時間を、新型micro:bit に内蔵のマイクで測ってみましょう。
はじめに
プログラミングガイド
学ぶこと
- マイクでとらえた音の大小でイベントを発生させる方法
 - micro:bit に内蔵されているタイマーの使い方
 - 音の大小を区別する「しきい値」を設定する方法
 
動作の仕組み
- プログラムのはじめに、大きな音(うるさくなった)と小さな音(静かになった)を分ける「しきい値」(境目になる値)になる数を設定します。 分ける境目を大きな音にしたければ、しきい値を大きくし、小さな音にしたければ、しきい値を小さくします。 しきい値は 0 から 255 までの任意の数にできます。
 - 変数 start を 0 に設定します。 この変数は、大きな音がいつ始まったか記録するために使います。
 - マイクが大きな音を捉えたら、micro:bit の現在の稼働時間を変数 start に設定します。そしてLED ディスプレイにアイコンを表示して、タイマーがスタートしたと分かるようにします。
 - 稼働時間とは、micro:bit がプログラムを実行している時間をミリ秒(千分の1秒)単位で測っているものです。
 - 大きな音が止むと、「静かになった」のイベントが発生します。
 - 大きな音(うるさくなった)のイベントでタイマーがスタートしていれば、変数 start が 0 より大きく(>)なっているはずです。 そうであれば、変数 time に、現在の稼働時間から start の時間を引いたものを設定します。 これで大きな音がどれぐらいの時間続いたのかが分かります。
 - 時間はミリ秒単位で測っているので、プログラムではそれを 1000 で割って秒単位に変換してから LED ディスプレィに表示します。
 
必要なもの
- micro:bit
 - MakeCodeまたはPythonエディター
 - バッテリーパック(オプション)
 
ステップ2: プログラムする
1from microbit import *
2microphone.set_threshold(SoundEvent.LOUD, 150)
3start = 0
4
5while True:
6    if microphone.was_event(SoundEvent.LOUD):
7        start = running_time()
8        display.show(Image.TARGET)
9
10    if microphone.was_event(SoundEvent.QUIET):
11        if start > 0:
12            time = running_time() - start
13            start = 0
14            display.clear()
15            sleep(100)
16            display.scroll(time / 1000)ステップ3: 改善する
- 大きな音と小さな音を分けるしきい値を変更して試してみて、最適な値を見つけましょう。
 - 拍手の大きさ測れるように、サウンドロガーのプロジェクト にあるコードを追加してみましょう。
 
This content is published under a Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) licence.


