ステップ1: 作る
説明
無線を使ってもう一台のmicro:bitがどれだけ近くにあるかを検出し、宝さがしゲームを作ったり、安全なソーシャルディスタンスにいることを知らせるために使えます。
はじめに
プログラミングガイド
動作の仕組み
- これにはmicro:bitが最低二台必要です。 異なるプログラムを二つ作成します。一つは、低電力の無線メッセージを常に送信するビーコンです。 もう一つのプログラムはその受信機になります。
- レシーバーがビーコンからメッセージを拾えば、その強度をsignal と呼ばれる変数に格納し、LEDディスプレイに表示します。
- 無線信号は送信機に近づけば近づくほど強くなります。信号が強い場合は、もう一方のmicro:bitがおそらく近いことを意味します。
- 無線信号が弱い場合、もう一方のmicro:bitはおそらく遠くにあります。
- 信号が強く接近すると大きくなる棒グラフが表示されます。 「数学」のマップブロックを使って、無線信号の強度を、約-95 (弱)から約-42 (強)までの範囲を0から9にマッピングし、棒グラフを表示します。
Pythonのバージョン
- Pythonには、棒グラフやマップ関数が組み込まれていないので、動作が少し違います。 ビーコンに近づけば、LED全てが点灯し、さらに接近すれば明るくなります。
- 無線強度の読み取りには、
radio.receive_full()
コマンドを使います。 この値は、メッセージ、信号強度、タイムスタンプを提供します。 信号強度だけが知りたいので、signal = message[1]
でこれを抜き出し、 signalという変数に格納します。 - 信号強度は-98(最も弱い)から-45(最も強い)までの範囲になりえます。 そしてPythonプログラムはLEDの明るさを変更するために使える0〜9の範囲に変換するmapと呼ばれる関数を定義します。0はオフを意味し、 9はLEDの最大輝度です。 (この関数は、MakeCodeのmapブロックと非常に似た動作するので、他のPythonプロジェクトで使えます)
- Pythonプログラムで ライトという空白の5 x 5のイメージをコマンド
light = Image(5,5)
を使って作成し、その明るさはlight.fill()
コマンドを使って変化させます。
必要なもの
- micro:bit2個と電池ボックス2個
- MakeCodeまたはPythonエディター
- バッテリーパック(オプション)
ステップ2: プログラムする
送信機 / ビーコン
受信機
1from microbit import *
2import radio
3radio.config(group=1)
4radio.on()
5light = Image(5,5) # create an empty image
6
7# function to map signal stength to LED brightness
8def map(value, fromMin, fromMax, toMin, toMax):
9 fromRange = fromMax - fromMin
10 toRange = toMax - toMin
11 valueScaled = float(value - fromMin) / float(fromRange)
12 return toMin + (valueScaled * toRange)
13
14while True:
15 message = radio.receive_full()
16 if message:
17 signal = message[1]
18 brightness = map(signal, -98, -44, 0, 9)
19 light.fill(round(brightness))
20 display.show(light)
21
ステップ3: 改善する
- ビーコン/受信機コードを組み合わせれば、両方のタスクを行うmicro:bitを1台で持つことができます。
- 近接検出器を着用できるよう、手首バンドを作成しましょう。
- 1、2メートル離れているときの信号の強度はどのくらいですか? 誰かが近寄りすぎると、目や耳で感じるアラームを鳴らすようプログラムを変更してみましょう。
- これらのプログラムを使って、宝探しゲームを作りましょう。ビーコンを隠して、たくさんのmicro:bitに受信機コードを入れましょう。
- 屋外や広い空間では、送信機の電力を変えて実験してください。 0から7までの任意の数にすることができます
This content is published under a Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) licence.