私はボランティアで、小中学生にマイクロビットプログラミングや電子工作などを教えるワークショップを行っています。
先日開催したワークショップで、作例として「マイクロビットロボカー」に「超音波センサ」を取り付け、お掃除ロボットのように障害物を避けて動き続ける「ぶつからない車」(記事は こちら)を紹介したのですが、それをつくった小学3年生の受講生から「超音波センサで自分を検知して、自分についてくる車をつくりたい」というリクエストが出てきました。
2個の超音波センサをロボカーの左右に取り付け、前方の物体との距離をそれぞれのセンサで測定し、その差に基づき進行方向を調整するようにすれば、受講生のつくりたい「自分についてくる車」を実現できそうです。
早速試してみることにしました。
今回使用した超音波センサは以下の製品です。
まずは、このセンサがどのぐらいの範囲(角度)の物体を検知できるのか確認してみました。
ドキュメントによると検知角度は15度とのことです。実際に実物で動作確認してみても、やはり概ねそのぐらいの範囲の物体しか検知されませんでした。
かなり検知範囲が狭いので、ふたつのセンサの設置角度をあまり広げてしまうと、物体(自分)がロボカーの真正面にあるときに検知できなくなりそうです。
そのため、ふたつのセンサを、以下のように少しだけ角度をつけて、ロボカーの左右前方に取り付けることにしました。
このぐらいであれば、真正面の物体を検知できなくなることもなく、左右の距離の差を調べることができそうです。

また、今回使ったロボカーは、前輪と後輪のサイズの関係で、前方がやや上を向いています。ロボカーに取り付けたセンサもやや上を向くことになるので、床を物体として誤検知してしまうこともなさそうです。
次はプログラムです。
受講生からは「ロボカーが自分に近づいてくるだけでなく、自分がロボカーに近づきすぎた時にはロボカーが逃げるようにしたい」という要望もありましたので、以下のような仕様でロボカーの進行方向を制御するようにしました。

具体的なプログラムはこちらです。

左側の超音波センサはマイクロビットのP2に、右側はP8に接続しています。
それぞれのセンサの測定結果に基づき、先ほどの仕様どおりにふたつのモーターを制御しているだけの単純なプログラムです。
動作確認してみました。
狭い部屋で動かすと、壁やその他の物体で誤認識してしまい、ロボカーが変な方向に進んでしまうこともありますが、なんとか自分についてくることができました。人が近づきすぎて逃げる方は、かなりいい感じで動きました。
ワークショップの教室で、受講生に試してもらいました。
床とタイヤの材質が合わないようで、タイヤが空回りしていますが、それでも一応、ロボカーが人についてくることを確認できました。