Skip to content

アクティビティ

ロウソク

中級 | MakeCode, Python | LED表示, マイク | センサー, ブール論理, 抽出

ステップ1: 作る

説明

吹き消せる電子ロウソクを作ろう! 新型の micro:bit の内蔵マイクで息を吹く音を検出し、ロウソクを消したり、また点けたりできます。

はじめに

プログラミングガイド

学ぶこと

  • 乱数を使ってランダムにLEDを点灯する方法
  • センサー入力に反応して出力を切り替える方法
  • ブール論理(真偽)を使用して、同じイベントでトリガーされたときにオンとオフを切り替えるスイッチを作る方法

動作の仕組み

  • 1から3の間の乱数を変数flickerに格納します。
  • この数字を使って、LEDをランダムにオン/オフし、炎がちらついて見えるようにします。
  • micro:bitのLEDは、グリッド状に配置され、列と行は0から4の番号が振られています。 プログラムは変数 flicker に格納されている乱数に応じて最上段の異なる列の LED を転送したり消灯したりします。
  • LEDの座標は、まず「列」(x軸)の左右、次に「行」(y軸)の上下で表されます。 炎の真ん中は、座標 2, 0 になります。
micro:bit の LED ディスプレイの座標を表示するグリッド
  • 無限ループでアニメーションを実行し続けます。
  • プログラムは変数 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 が最大の音です。