micro:bitで全自動マウスシールドを作ってみた

第2回

100円ショップの材料とmicro:bitで作った会食用の全自動マウスシールドをプログラミング

ワクチンの接種も始まりましたが、国民全員に行き渡るのは当分先、変異種も発見され始めており、コロナ対策はまだまだ予断を許しません。プログラミングを用いた社会課題解決の一環として、料理を食べるときに全自動で開閉する実用的(?)なマウスシールドを作成してみよう、というこの連載。第2回の今回は、前回作成したマウスシールドをプログラムで動かしてみましょう。

前回作った100円ショップの材料とmicro:bitのマウスシールドをプログラミングしていきます
【新型コロナウイルス感染症対策について】
マウスシールドは、あくまでもコロナウイルス感染症対策の補助的な防御手段です。会食の際は新型コロナウイルス感染症対策推進室(内閣官房)が示す「会食時に注意したいポイント」を守ってください。

micro:bitプログラミングの準備

まず、micro:bit(マイクロビット)のセットに入っているUSBケーブルを使って、micro:bitとパソコンを接続します。

今回はmicro:bitとセットで販売されているケーブルを使いますが、micro:bitを単品で購入した場合は給電とデータ通信に対応したMicro USBケーブルを用意してください

micro:bit v2はUSBケーブルからの電力だけでサーボモーターを動かすことができますが、初代のmicro:bitは電池ボックスを繋がないと電力が足りず動かすことができないので注意しましょう。

初代micro:bitを使う場合は、別売の電池ボックスも必要です

次にパソコンの設定をしましょう。WebブラウザーでMicrosoft MakeCodeのサイトを開いて、「micro:bit」をクリックします。

Microsoft MakeCodeのサイトでmicro:bitを選択しましょう

「新しいプロジェクト」をクリックして、ここでは「マスク」というプロジェクトを作成します。

新しいプロジェクトを作成します

新しいプロジェクトが作成できたら、次にmicro:bitと接続します。「ダウンロード」の横の「…」をクリックし、「デバイスを接続する」をクリックします。表示された「BBC micro:bit XXXXX-XXX」を選択して「接続」をクリックしてください。もしも上手く接続できない場合は、一度サーボモーターを外してから接続すると上手くいきます。

画面左下の「ダウンロード」から「デバイスを接続する」をクリックし、接続されているmicro:bitを選択します

最初に、micro:bitのボタンAを押すとシールドが閉じ、ボタンBを押すとシールドが開く、というプログラムを作って、うまく開閉することを確認してみましょう。MakeCodeの「入力」から「ボタンAが押されたとき」のブロックに、「高度なブロック」から「入出力端子」の「サーボ出力する端子P0角度180」のブロックを組み合わせます。ボタンAのブロックを右クリックして「複製する」を使って複製し、ボタンを「B」に、角度を「0」に書き換えると、ボタンBのブロックも簡単に用意できます。

ボタンAでシールドを閉じるプログラムを作ってから、それを複製してボタンBでシールドを開くプログラムも作ります
ボタンAでサーボを180度(シールドが閉じた位置)に、ボタンBでサーボを0度(シールドが開いた位置)にするプログラム

プログラムができたら再び画面左下の「ダウンロード」をクリックして、micro:bitにプログラムをダウンロードします。「Download completed!」のメッセージが表示されたら、micro:bitへのプログラムの転送は成功です。

早速micro:bitのAとBのボタンを押してみましょう。シールドが、ボタンAで閉じる、ボタンBで開くことを確認します。

ボタンでシールドを開閉できるようになりました

次に食事を口に運ぼうと前に屈んだ時に自動的にマスクが開くように、micro:bitの傾きの角度(ピッチ)を検知して開閉するプログラムを作ってみましょう。

まずは「基本」から「ずっと」のブロックを取り出しておきます。次に「変数」から「変数を追加する」をクリックして「かたむき」という変数を作成し、「変数かたむきを0にする」のブロックを「ずっと」のブロックに、「入力」の「その他」から「傾斜(°)ピッチ」のブロックを「変数かたむきを~」のブロックに、それぞれ組み合わせてください。傾きを0.5秒に1回検知するようにしたいので、「基本」から「一時停止(ミリ秒)」のブロックを「500」に設定して組み合わせます。

変数「かたむき」を作成して、micro:bitが検知した傾きの角度の値を定期的に代入します
0.5(500ミリ)秒に1回、変数「かたむき」にmicro:bitの傾斜角度(ピッチ)の値を代入するプログラム

最後に、「傾斜(°)ピッチ」が100度より小さい場合はシールドを閉じ、110度より大きい場合は開くようにプログラミングします。

まず、「論理」から「もし<真>なら~でなければ~」のブロックに、同じく「論理」から「くらべる」の「0<0」のブロックを組み合わせます。「変数」から「かたむき」の変数ブロックの値と比べて、「100」より小さい時は「サーボ出力する端子P0角度180」のブロック、「110」より大きい時は「サーボ出力する端子P0角度0」のブロックを実行するように組み合わせます。

条件分岐のブロックを使って、micro:bitの傾きを検知した値が指定した数値以下か以上かでサーボを制御し、シールドを自動開閉できるようにします
「傾斜(°)ピッチ」が100度より小さい場合はシールドを閉じ、110度より大きい場合は開くプログラム

私はこの角度設定がちょうどいいのですが、マスクへのmicro:bitの取付位置や、食事の際にどれくらい頭を傾けるかによっても異なりますので、うまく動かなかった場合には微調整をしてください。

下を向くとシールドが自動で開きます

一見するとこれで完成に見える全自動マウスシールドですが、1つ欠点があります。皆さん飲み物を飲むとき、顔はどう傾けますか? そう、前を向いた状態でコップに口をつけて、上を向いて飲みますよね。今回のように、下を向いた角度の検知だけでは、飲み物が飲めないのです。

この欠点を改善するため、次回はAIを使って飲み物を認識し、マスクが自動開閉するようにプログラムを作ってみます。

【第2回の記事の解説動画はこちら】
【STEAM教育】100円ショップとmicro:bitで作る自動フェイスマスクPART02
【STEAM教育】100円ショップとmicro:bitで作る自動フェイスマスクPART03