濃厚接触判定アラームをつくろう③

 micro:bit(マイクロビット)は手のひらサイズの小さなコンピューター。いろいろな機能
きのう

そな
わっていて、自分でプログラミングをすることができるよ。ブログラミングは「MakeCode(メイクコード) for micro:bit」を使えば、初心者でもかんたんにできるんだ。

 『子供の科学』本誌
ほんし
連載
れんさい
「micro:bitでレッツプログラミング!」では、micro:bitを使った「探検
たんけん
ウォッチ」というツールを使って、その機能
きのう
をプログラミングでつくったけれど、この連載が「スタプロ」にお引っ越し。Web連載でも、探検ウォッチのいろいろな機能をプログラミングでつくっていくぞ!

 これまでの本誌連載のバックナンバーは、「micro:bitでレッツプログラミング!」旧サイトで公開しているよ。本誌の連載を見たことがないという人は、まずこちらを見てみてね。Web連載は、本誌の連載の続きになっているから、基本的なことがわからなくなったら本誌のバックナンバーを
り返ろう。

 今回は、探検ウォッチをつけている人同士が、一定時間近くにいるとアラームが鳴る「濃厚接触判定
のうこうせっしょくはんてい
アラーム」をいよいよ完成させるぞ。これまでは、micro:bitの無線
むせん
機能を使って距離
きょり
を測り、タイマーを使って15分という時間を測るプログラムをつくったよ。それらを組み合わせて、プログラムをつくっていこう。完成したら探検ウォッチに書き込んで、身に着けて試してみよう。

1 1メートルの距離を測定する

 「濃厚接触判定アラームをつくろう①」で、2台のmicro:bitを使って、電波
でんぱ
の強さが距離で変化することがグラフで分かるプログラムをつくったね。  
 micro:bitに書き込んで
ため
してみると、グラフの変化でmicro:bit同士の距離の変化がわかる。グラフの高さがディスプレイの半分くらいだと、電波の強さが最大値86の半分で43だと想定
そうてい
できるね。それより大きくなる、つまり近づいたらタイマーのカウント開始としよう。このように、その値を
さかい
にして上下で条件や判定
はんてい
などが違ってくる値のことを、閾値
しきいち
というぞ。

 1メートルくらい離れているときに、閾値が43くらいにするためには、無線の送信強度を変えるとよさそうだ。

 「無線送信実験」のプログラムの「最初だけ」ブロックに「無線」カテゴリーの「無線の送信強度を設定(7)」ブロックを追加しよう。無線の送信強度を変えつつ、micro:bitに書き込んで試してみてほしい。

 著者が試したところ、送信強度を1にすると、micro:bit同士の距離がだいたい1メートルくらいで、でグラフの高さがディスプレイの半分くらいになった。

「最初だけ」ブロックに、「無線の送信強度」を設定

 この実験をふまえて、前回つくった「濃厚接触判定アラーム」プログラムで、無線電波を発信するコードを追加しよう。

 変更箇所
へんこうかしょ
は2か所。「最初だけ」ブロックでは、無線のグループ(①)と無線の送信強度(②)を設定する。

「濃厚接触判定アラーム」で無線の電波を発信するコードを追加。「最初だけ」ブロックに無線のグループと送信強度を設定

 「ずっと」ブロックでは「無線で数値を送信」を設定するぞ(③)。

「ずっと」ブロックに無線で数値を送信を追加

 前回つくったプログラムでは、ボタンAを押したら1メートル以内にいることにした。これを無線で受信したときに切り替えるので、「ボタンAが押されたとき」ブロックのプログラムを変更しよう。

 「無線」カテゴリーの「無線で受信した時“receivedNumber”」ブロックを使うよ(④)。このプログラムでは「論理
ろんり
」カテゴリーの「もし“真”なら~でければ~」ブロックを使い、次のようにコードをつくるよ。

 「受信した信号強度+128」が「43」より大きければ(⑤)、変数「1m以内」を1にする(⑥)。そうでなければ変数「1m以内」を0にする(⑦)。

無線で受信したときのプログラム

 ここまで出来たら、1回テストをしてみよう。シミュレーターが2台表示されるので、これまで使っていた1画面のエディターでも試せる。

 シミュレーターで表示されているmicro:bitのアンテナマークの部分を、マウスカーソルで
れることで電波の強度を調整
ちょうせい
してみよう。他方のLEDディスプレイが、時計やスマイルのアイコンに切り替わればOKだ。

 近くにいるという状況にしてタイマーが動くか、近づいたり離れたりしてもタイマーが継続
けいぞく
されるか、などさまざまな状態を試してみよう。シミュレーターでもしっかり動作の確認をしてみよう。

2 探検ウォッチで使いやすいプログラムにする

 シミュレーターで試してうまくいくようなら、micro:bitに書き込んで試してみよう(micro:bitは2台以上必要だ)。

 ただし、使っている間に電池が切れてしまうと困るので、書き込む前に、プログラムで電池の消費
しょうひ

おさ
える工夫もしてみよう。

 例えば、「ずっと」ブロックのプログラムでは、離れている時間を計測している間、LEDディスプレイに時計のアイコンを表示するなど、動作の確認をするためのアイコンをたくさん入れているよね。これを外したり、かんたんな表示にするだけで変わるよ。

アイコンの例①
チェックマークの「アイコンを表示」ブロックや、「LED画面に表示」ブロックを外すことで、電池の消費を抑えられる
アイコンの例②
この2つの「アイコンを表示」ブロックも外す

 とはいえ、アイコンが表示されないと、ちゃんとプログラムが実行されているかわからないので困るかもしれない。その場合は、「LED」カテゴリーの「点灯x(0) y(0)」ブロックや、「基本」カテゴリーの「表示を消す」ブロックなどを代わりに使ってみよう。LEDを1つ点灯するだけなので、アイコン表示より電力消費を抑えられそうだ。15分を計測中は「点灯x(0) y(0)」ブロックでLEDを点灯させて(⑧)、一時的に離れている時間を計測中は「表示を消す」ブロックでLEDを消灯させているよ(⑨)。

アイコンのブロックを外して、LEDを点灯させる

 LEDを消灯するに「表示を消す」ブロックを使ったのは、この後、濃厚接触のアラートを鳴らしたときに「こまり顔」のアイコンを表示させているからだよ。アラート鳴らした後、この「こまり顔」アイコンも消したいので、「表示を消す」ブロックにしたんだ。

 そして「ずっと」ブロックのプログラムの最後に「一時停止(ミリ秒)」ブロックも入れてみよう(⑩)。電波の送信の回数を減らして、電力消費を少なくすることができる。

一時停止のブロックを追加

 ここまで出来たら、実際にmicro:bitに書き込んで試してみよう。また、実機
じっき
でのテストが終わったら、忘れずに時間の設定を3分から15分に変えておこう。「最初だけ」ブロックのプログラムで、変数「15分(ミリ秒)」のコードで計算している部分の値を変えるだけだ。

変数「15分(ミリ秒)」の計算部分で「3」に設定
「変数”15分(ミリ秒)を3×60×1000にする」ブロックの「3」を
変数「15分(ミリ秒)」の計算部分で「15」に設定
「15」に変更すれば15分カウントできる

3 濃厚接触判定アラームが完成だ!

 これで、濃厚接触判定アラームが完成だ。このプログラムを書き込んだ探検ウォッチをたくさんの人がつけていたら、15分以上近くにいたらアラートが鳴るので、
みつ

けることが出来るね。

アラートの表示
濃厚接触と判定されたら、LEDディスプレイに「こまり顔」のアイコンが表示される

 今回は2台の探検ウォッチで試しているけど、探検ウォッチを持っている人が3人以上集まれるようなら、どの相手との距離を測るのか、検知できる距離に変化があるのかなども試してみよう。

 例えば3台になると、一方の電波は1メートル以内にいると検知すると同時に、他方の電波は1メートル以上離れていると判断されることになる。だいたいは、両方の電波について交互に検知されて処理が行われるけど、タイマーがリセットされなかったほうが濃厚接触と判断されるだろう。

 また、今回距離の検知に使っている無線電波(Bluetooth Low Energy)は
あいだ
障害物
しょうがいぶつ
などがなければ精度よく距離を検知できるが、水分を多く含む人の体や、ガラス、金属など通り抜けるのが苦手なものもある。障害物を経た電波は弱い状態で受信されて、実際の距離より遠いとプログラムが判断してしまうことにもなる。

 こうしたことは実際に大勢
おおぜい
で実験してみないと気づかないことも多いし、あらかじめ想定してつくることも
むずか
しいだろう。ぜひ友だちと教室などで集まって、密集
みっしゅう
を避けつつも実験をして、プログラムをよりよくしたり、もっと便利な機能を考えて追加してみてね!

(文/倉本大資 撮影/青柳敏史)

プログラミング教材 micro:bit

KoKa micro:bit探検ウォッチキット

¥7,700- (税込)

KoKa Shop!で購入する

最新号好評発売中!

子供の科学 2020年 12月号

CTR IMG