マイクロビットを使ってみる 〜潜水艦ソナー用の距離センサを「ToFセンサ」に変更する

電子工作の作例

先日、マイクロビットとサーボモーターをつかって「潜水艦ソナー」のようなものをつくりました(記事は こちら)。


サーボモーターの回転軸に距離センサを取り付け、サーボモーターが動いた「角度」と距離センサが測定した「障害物までの距離」をマイクロビットに取り込み、「どちらの方向」で「どのぐらいの距離」に障害物があるかをPC画面上に表示するものです。

なかなかいい感じに画面表示されるのですが、ここで表示される画面を眺めているうちに、「距離センサの種類を変えたら測定結果も変わるのだろうか?」という疑問が出てきました。
今回つかった距離センサは「超音波センサ(HC-SR04)」なのですが、平らな面上の障害物を測定しても結果がガタガタになったり、同じ場所に障害物があっても測定のたびに結果が若干変わったりします。
別の種類の距離センサを使えば、測定結果がもっと高精度になるのではないか?と考えました。

今、手元にM5Stack製の「ToF測距センサユニット」という製品があります。


「超音波センサ」は超音波が障害物に当たって返ってくるまでの時間から距離を算出するものですが、「ToFセンサ」は赤外線レーザーが障害物に当たって返ってくるまでの時間から距離を算出するセンサです。
測定する方式によってそれぞれ長所・短所がありますが、今回は「潜水艦ソナー」の距離センサを「超音波センサ」から「ToFセンサ」に変更することで、測定結果がどのように変わるかを確認してみることにしました。

まずはToFセンサの動作確認をしてみます。
マイクロビット用プログラムは以下のとおりです。

「Rangefinder」という拡張機能があるので、それを使います。100ミリ秒毎にToFセンサで測定した距離を「シリアル通信」で書き出すだけのものです。

「ToFセンサ」はI2C方式なので、「Grove Shield for micro:bit」という拡張ボードの「I2C」端子に「ToFセンサ」をつなぎます。


「MakeCode for micro:bit」画面で「データを表示 デバイス」をクリックすると、以下のようなグラフが表示されます。
ToFセンサと障害物の距離を変えると値も変わります。問題なく測定できていることを確認できました。

これを踏まえて、先日つくった「潜水艦ソナー」プログラムを変更しました。内容は以下のとおりです。

基本的には、従来は超音波センサで距離を測定していた箇所を、ToFセンサで測定するように変更しただけです。

「潜水艦ソナー」用のハードウェアでは「KEYESTUDIOモータードライバー拡張ボード for BBC micro:bit(KS4033)」をつかっているので、ToFセンサもこの拡張基板に取り付けます。


マイクロビットのI2C端子は「SCL=P19」「SDA=P20」なので、ToFセンサの各端子を拡張基板に以下のとおり接続します。

ToFセンサ拡張ボード
GNDG
5V3V
SDAP20
SCLP19

サーボモーターに超音波センサを取り付けるための木片の裏面を利用して、そこにToFセンサを取り付けました。

これで準備完了です。

平らな板を立て、そちらに「潜水艦ソナー」を向けます。ソナーと板の間隔は15センチ程度です。
この状態で「潜水艦ソナー」を動作させます。正しく測定できていれば、「潜水艦ソナー」画面で横一直線に赤い点が描画されるはずです。

超音波センサで測定したときの結果はこちらです。

±30度あたりまではそれなりに測定できていますが、それを超えると結果が乱れてきます。±45度を超えた辺りからは全く観測できなくなります。

ToFセンサで測定したときの結果はこちらです。

測定範囲全体(±90度)にわたり良好な結果が得られました。

センサの方式によって結果はかなり異なっており、非常に興味深い結果となりました。

 

なお、私がマイクロビットの使い方を習得するのにあたっては、以下の書籍を参考にさせていただきました。


初心者向けから、比較的高度なものまで、さまざまな情報が記載されているだけでなく、子供向けの作例も多数掲載されていますので、「プログラミング教育」のための題材さがしなどにもおすすめです。