Skip to content

アクティビティ

ホタル

上級 | MakeCode, Python | LED表示, 無線 | ランダム化, 抽出, 通信

ステップ1: 作る

micro:bit をいくつか使い、妖しく光るホタルの群れを、無線通信を使って再現しよう

無線をきっかけに一時的に光る、一組の micro:bit

学ぶこと

  • 無線通信を使って micro:bit 同士の間でイベントを発生させる
  • そのイベントで micro:bit の LED表示 を明るくしたり暗くしたりする方法
  • 乱数と偶然を使い、現実の振る舞いを模倣する方法

説明

ホタルは生物発光(体内で作られた光)を使って互いに通信する昆虫です。

このプロジェクトは、micro:bitの無線通信機能を使用して実際のホタルの振る舞いを模倣しています。 PythonのバージョンはNicholas H. Tollerveyによって作成され、MakeCodeのバージョンはこれに基づいています。

同じ部屋にある3つ以上の micro:bit にプログラムを書き込みます。 どれか一つの micro:bit の Aボタンを押すと、無線メッセージを受信した micro:bit が「群れ」のように光ります。 暗い部屋にたくさんの micro:bit があるとうまく動作します。

無線メッセージを受信した micro:bit は、10分の1の確率で今度は自分から無線メッセージを送信し、他の micro:bit が光るきっかけになります。

そのうち光が止まったら、どれかの micro:bit のAボタンを押すと、光の「群れ」がもう一度始まります。

動作の仕組み

  • このプログラムでは、いずれかの micro:bit のAボタンが押されたときに、メッセージ「flash」が無線で送信されます。
  • メッセージを受信したそれぞれの micro:bit は、50ミリ秒から350ミリ秒のランダムな時間、一時待機します。 その後、 LED表示 を明るく光らせてから徐々に暗くして、ホタルの光りかたを模倣します。
  • 次に、0から9の間の乱数を生成します。 乱数が0だった場合、他の micro:bit を光らせるきっかけとして、無線メッセージ「flash」を送信します。 そのため、それぞれの micro:bit が、10分の1の確率で次の光のきっかけになります。
  • 旧型と新型の micro:bit を混ぜて使うことができますが、全部が MakeCode か Python のどちらかで書き込まれている必要があります。 (無線通信は、それぞれのプログラミング言語で若干異なる動作をします。 MakeCode のプログラムと Python のプログラムは、互いに無線で通信できません。)

必要なもの

  • 少なくとも3つの micro:bit  多いほどよい
  • バッテリーパック (オプション)

ステップ2: プログラムする

1# A micro:bit Firefly.
2# By Nicholas H.Tollervey. Released to the public domain.
3import radio
4import random
5from microbit import display, Image, button_a, sleep
6
7# Create the "flash" animation frames. Can you work out how it's done?
8flash = [Image().invert()*(i/9) for i in range(9, -1, -1)]
9
10# The radio won't work unless it's switched on.
11radio.on()
12
13# Event loop.
14while True:
15    # Button A sends a "flash" message.
16    if button_a.was_pressed():
17        radio.send('flash')  # a-ha
18    # Read any incoming messages.
19    incoming = radio.receive()
20    if incoming == 'flash':
21        # If there's an incoming "flash" message display
22        # the firefly flash animation after a random short
23        # pause.
24        sleep(random.randint(50, 350))
25        display.show(flash, delay=100, wait=False)
26        # Randomly re-broadcast the flash message after a
27        # slight delay.
28        if random.randint(0, 9) == 0:
29            sleep(500)
30            radio.send('flash')  # a-ha
31            
32

ステップ3: 改善する

  • ディスプレイが光るときに表示される画像を変えてみよう
  • 次の発光イベントを引き起こす確率が、増えたり減ったりするようにプログラムを変更してみよう。 乱数の範囲は、使う micro:bit の個数と同じになるかもしれません。micro:bit の個数が少ない場合は、確率が高くなるようにしましょう。
  • 別の無線グループ番号を使って、ホタルを小さなグループに分けてみましょう。 同じ番号の micro:bit だけがお互いに通信できます。
  • 無線信号の強さを変えて実験してみよう。
    MakeCode では、「無線の送信強度を設定」ブロックを使います。
    Python では、 radio.config(power=7) を使い、
    0 (無線信号が最も弱い) から 7 (最強) の間で選びます。
    無線の強度を変えると、どんな変化があるでしょうか?