スポンサーリンク
Scratch

micro:bitで距離センサーを作ろう(車の距離センサーっぽい)

Scratch

車の距離センサーのようなものを作ってみます。
バック駐車するときに障害物との距離が詰まるとピーピーと音でお知らせしてくれるやつです。
距離が詰まっていくとピピピと音の間隔が短くなっていきます。
このプログラム単体では大した機能ではありませんが、壁にぶつからないように自立して動くロボットなどいろいろな場面で応用できます。

スポンサーリンク

超音波センサー

今回は、micor:bitのオプションパーツ「超音波センサー」を使います。
その他、補助で「拡張用コネクター(GROVEシールド)」も使います。

これらの部品は、「マイクロビット アドバンスセット V2対応版」に含まれています。
基本的な勉強をするのにいい部品がそろったキットなのでお勧めです。

micor:bitの準備

今回使う備品はこれです。

①micor:bit本体
②超音波センサー
③超音波センサーをつなぐケーブル
④拡張用コネクター(GROVEシールド)
⑤USBケーブル(パソコンとつなぐ用)

これをこのように組み立てておいてください。

MakeCode for micro:bit

アドバンスセットを使えるようにする

超音波センサーなどの部品を使えるようにするためには拡張機能を追加する必要があります。
拡張機能をクリックします。

拡張機能画面で、
検索欄で「Grove」と入力して検索するか、
下のパネルから「Grove」を探して、クリックしてください。

Groveという部品が使えるようになります。

プログラム

Aボタンを押すとセンサーが動き始めます。
Bボタンを押すとセンサーを止めることができます。
メインのプログラムは、Aボタンが押されたかBボタンが押されたかを見て動き始めます。

Aボタンのプログラム

Aボタンが押されたときの動くプログラムを作ります。

変数「ONOFF」を用意します。
Aボタンが押されたら「真」、Bボタンが押されたら「偽」を入れる変数とします。

次に念のため、音量の設定をします。
ピピピとなる音の音量です。
音量の設定はAボタンが押されたときに実行する必要はありません。
初めに1回だけ実行していれば構いません。
今回は、プログラムを簡単にするために、ここに作りました。

Bボタンのプログラム

Bボタンが押されたときに動くプログラムを作ります。

変数「ONOFF」に「偽」を設定します。

メインプログラム

メインのプログラムはずっと動き続けるように作っています。
ただし、変数「ONOFF」の内容を見て、主要な部分を実行したりスキップするように作っています。

Aボタンが押されたか、Bボタンが押されたかを見て、プログラムを実行するかスキップするかを分岐します。
変数「ONOFF」にはAボタンが押された後には「真」が入っています。
Bボタンが押された後には「偽」が入っています。
真のの場合には「もしxxx」の中のプログラムが実行されます。

変数「距離」に超音波センサーで読み取った距離(cm)の数値を入れます。

まず、ピという音を鳴らします。
この後、距離に応じてプログラムを一時停止する時間を変えながらピっと鳴らす処理を繰り返します。
(音を鳴らすタイミングは、超音波センサの測定前もしくは、あとで出てくるプログラムの一時停止の後でも構いません。一時停止の後の方がわかりやすプログラムになるでしょうね。)

この時点で音を鳴らすことに違和感を感じるかもしれません。
この後に説明する一時停止の後に音を鳴らすほうがわかりやすいかもしれません。
一時停止の後に鳴らしてもOKです。

センサーで測定した距離が50センチより離れていた場合の分岐処理をします。

50センチより離れていた場合、1000ミリ秒(1秒)プログラムを停止をします。
50センチ以上離れていた場合は1秒間隔でピという音を鳴らすようにします。
50センチ未満になると音の間隔を短くしていきます。

50センチより近くなった場合のプログラムを書いていきます。
50センチより近くなったら、ピの音を短い間隔で鳴らします。

距離に応じて、音の間隔を決めます。
今回は、距離(センチ)を10倍にした値を音のなる間隔(ミリ秒)にします。
例えば、40センチ離れている場合は400ミリ秒(0.4秒)の間隔で音を鳴らします。
だんだん距離が短くなって10センチになったときは100ミリ秒(0.1秒)の間隔で音を鳴らします。

ここからは、micro:bitが誤動作をしないための仕組みを入れます。
あまりに短い間隔で処理を繰り返すと、なぜかプログラムが動かなくなる現象が起きます。
そこで、変数「間隔」が50以下(0.05秒以下)にならないように仕掛けを入れます。

変数「間隔」が50未満になる場合は、変数「間隔」を50に書き換えます。
これで、間隔が50未満になることはありません。

最後に「間隔」の時間だけプログラムを停止します。
この後はプログラムの先頭に戻って、音を鳴らす処理などを繰り返します。

コメント

タイトルとURLをコピーしました