ステップ1: 作る
説明
吹き消せる電子ロウソクを作ろう! 新型の micro:bit の内蔵マイクで息を吹く音を検出し、ロウソクを消したり、また点けたりできます。
はじめに
プログラミングガイド
学ぶこと
- 乱数を使ってランダムにLEDを点灯する方法
- センサー入力に反応して出力を切り替える方法
- ブール論理(真偽)を使用して、同じイベントでトリガーされたときにオンとオフを切り替えるスイッチを作る方法
動作の仕組み
- 1から3の間の乱数を変数flickerに格納します。
- この数字を使って、LEDをランダムにオン/オフし、炎がちらついて見えるようにします。
- micro:bitのLEDは、グリッド状に配置され、列と行は0から4の番号が振られています。 プログラムは変数 flicker に格納されている乱数に応じて最上段の異なる列の LED を転送したり消灯したりします。
- LEDの座標は、まず「列」(x軸)の左右、次に「行」(y軸)の上下で表されます。 炎の真ん中は、座標 2, 0 になります。
- 無限ループでアニメーションを実行し続けます。
- プログラムは変数 lit を使って、ロウソクに火がついているかを記録しています。 これは真偽値の変数です。 真偽値の変数は2つの値だけをとります: 真(on)または偽(off)です。
- マイクセンサーが大きな音を検出したとき、たとえば息を吹きかけたとき、コードは lit の値を
not lit に切り替えます。 つまりマイクに息を吹きかけると、 lit が真であれば 偽となり、画面がクリアされてLEDが消灯するというわけです。 - lit が偽であれば真となり、元のアニメーションに切り替わります。
必要なもの
- micro:bit
- MakeCodeまたはPythonエディター
- バッテリーパック(オプション)
ステップ2: プログラムする
1from microbit import *
2import random
3
4lit = True
5
6while True:
7 if microphone.was_event(SoundEvent.LOUD):
8 lit = not lit
9 sleep(500)
10 if lit:
11 display.show(Image(
12 "00900:"
13 "09990:"
14 "09990:"
15 "09990:"
16 "09990"))
17 sleep(150)
18 flicker = random.randint(1, 3)
19 if flicker != 2:
20 display.set_pixel(2,0,0)
21 display.set_pixel(flicker,0,9)
22 sleep(150)
23 else:
24 display.clear()
ステップ3: 改善する
- 音を使ってアニメーションの表示をオン/オフする独自のプログラムを作成してみよう。
- 「うるさいかどうかのしきい値」ブロックを「最初だけ」ブロックに追加して、「うるさくなった」ブロックをより反応しやすくしたり、より反応しずらくしてみよう。 このブロックは「入力」の「… その他」にあります。 より小さな数値でより小さな音に反応するようになり、より大きな数値でより大きな音に反応するようになります。
- Python でしきい値を変更するには
microphone.set_threshold(SoundEvent.LOUD, 128)
をwhile True:
ループのすぐ前に指定します。数値の 128 を 0 から 255 の間のすきな値に変えてみよう。 これは 0 から 255 までの任意の数値で、255 が最大の音です。
This content is published under a Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) licence.