n:bit でじたるかくれんぼ

しくみを考える

micro:bitには、ブルートゥースという無線機能があります。
この無線機能を使って、電波を出して隠すmicro:bit(HIDER)と、
その電波を探索するmicro:bit(SEEKER)のプログラムをつくります。
HIDERをどこかに見えないところに隠します。
SEEKERで電波の強弱を見ながら、隠れているHIDERを探すゲームです。


HIDERの作成

・1秒に1回電波を発信する(数字の1を送信する)。
・音を鳴らす。

radio.setGroup(9)
basic.showNumber(9)
basic.forever(function () {
radio.sendNumber(1)
music.playTone(523, music.beat(BeatFraction.Sixteenth))
basic.pause(1000)
})

隠すmicro:bitのプログラムです。電波を出すことを「送信」といいます。

「最初だけ」ブロックは、micro:bitの電源をいれたときに最初の一度だけ実行するブロックです。
ここで「無線のグループを設定」ブロックで、相互に通信するための番号を決めます。
micro:bitでは、グループIDと呼んでおり、これはテレビのチャンネルと同じような考えです。
グループIDは、0~255までの範囲で任意に決めることができますが、今回は9にしました。
グループIDは、「最初だけ」でひとつだけ設定します。

つぎに「ずっと」のブロックをつくります。
「無線で数値を送信」ブロックを実行すると、 micro:bit から電波が発信されます。
このときに、指定した(数値)の値を送信します。
今回は1を送信するようにしましたが、プログラムで送信した値は使わないので、どんな値でもかまいません。
本来の通信処理では、送信した数値や文字を、受信した相手が計算や表示に使うような使い方をします。

この処理を1秒ごとに繰り返します。

これで、 隠すmicro:bitのプログラムは終わりです。
ダウンロードをして、micr:bit本体にプログラムを保存してください。


SEEKERの作成

・受信した電波の強さを計測してグラフ(LED)で表示する。
・電波の強さに応じて、高い音、低い音を鳴らす。

radio.onReceivedNumber(function (receivedNumber) {
led.plotBarGraph(
150 + radio.receivedPacket(RadioPacketProperty.SignalStrength),
110
)
music.playTone(-20 * radio.receivedPacket(RadioPacketProperty.SignalStrength), music.beat(BeatFraction.Eighth))
basic.clearScreen()
})
radio.setGroup(9)
basic.showNumber(9)

無線のグループIDをHIDERと同じ「9」にします。
これも「最初だけ」ブロックで設定すればOKです。

「無線で受信したとき-(receivedNumber)」ブロックで、 おなじグループIDの電波を受信したときの処理を行います。
電波を一度も受信しなければ、このブロックの処理は行いません。
つまり「最初だけ」で実行した「9」を表示したままの状態になります。
「ずっと」ブロックは使いません。

.

グラフの表示

「受信したパケットの(信号強度)」では、電波強度 (単位はdb(デシベル))によって-42から-128までの値が入ります。
-42は電波が一番強い状態で、 すぐそばに電波を発信しているmicro:bitがあることになります。
-128に近いならば電波が弱いことになります。
グラフ表示するためには、この電波強度のマイナス値のままだと不便です。
そこで 150をたすことによって、 108(電波強度が-42の時)から(-128の時)22まで値が変化するようにします。
グラフの最大値は110にしています。

左:電波の強さが-強いとき(-42db) 右:電波が弱いとき(-128db)


音を鳴らす

「音を鳴らす」ブロックは、micro:bit単体では音はなりません。
そこで、n:bitのシールド基板にあるスピーカーで音を出します。
「音を鳴らす」には音の周波数を設定することで音程を決めます。
周波数が低いほど音も低く、高いほど高音になりますが、人が聞こえる音は、一般的に20から20000Hz(ヘルツ)と言われています。
「音を鳴らす」命令 の(真ん中のド)は、262Hzになります。

さて、今回の 「音を鳴らす」命令 では、受信した電波の信号強度に-20を乗算しています。
これは、840から2560Hz(電波強度は-42から-128)の音を出すこと意味します。
したがってHIDERが近いときは、だいたい上のラ(880Hz)の音になり、
離れるほど高い音が鳴ることになります。


かくれんぼゲーム

さあ、それではHIDERの電源を入れて、どこかに隠しましょう。
n:bitの外観は見えないように隠します。
n:bit基板のP0 Selectorスイッチを、SからPに切り替えると音は鳴りません(代わりに緑LEDが点滅します)。 

HIDERを隠し終わったら、ゲームの始まりです。
SEEKERの電源を入れて探索を始めます。
電波を探知すれば、グラフが表示されます。
動きまわりながら、グラフが大きくなるように移動していきます。
電波は壁などの通り抜けて、上下方向にも飛びますので、いろいろ方向を試して探しましょう。

遊び方は、「フォックスハンティング」も参考にしてください