今回は、mBot2プログラミングシリーズ(mBlock編)の第5回です。
この回では、mBot2に搭載されている超音波センサーを使って、障害物を検知し、それを回避するプログラムを作成します。
障害物を検知して回避する動きは、ロボット工学や自動運転技術にも通じる重要なトピックです。ぜひ一緒に学んでいきましょう!
目標
- mBotの超音波センサーの仕組み
- 超音波センサーに関するブロックとその使い方
- 障害物を検知して回避するプログラムの作成方法
超音波センサーとは
mBot2の超音波センサーは、目になっている部分で、音波を使って物体までの距離を測ることができます。
前方にある障害物の距離をセンチメートル単位で計測でき、測定範囲は5cm~300cm(3m)です。

右目のTransmitter(送信機)で超音波を送信し、左目のReceiver(受信機)で反射した超音波を受信します。
超音波センサーの仕組みを次に示します。

- 送信機(T)から超音波を出す
- 何かに反射して超音波が跳ね返ってくる
- 受信機(R)で跳ね返ってきた超音波を受信する
- 送信から受信までの時間を測定し、距離を計算する
mBlockとは?『スクラッチ(Scratch)』との違い
mBlockは、小学校や学習塾で取り入れられている『スクラッチ(Scratch)』をベースとしたビジュアルプログラミングツールです。
スクラッチの基本的な操作感を引き継ぎながら、ロボットやハードウェアの制御に特化しているため、mBlockを使えば、プログラミング初心者でも簡単にロボットプログラミングを始めることができます。
mBlockで使用するブロック
『超音波センサー2』パレット
mBot2の超音波センサーに関するブロックが入っています。
今回は距離測定のブロックを使います。

超音波が測定した距離を5~300の値で表します。

超音波センサーの測定可能範囲(5~300cm)に物体が無い場合に真(True)、物体がある場合に偽(False)を返します。
『見た目』パレット
見た目パレットはCyberPiのディスプレイ表示を制御するブロックが入っています。
今回は、センサー値をモニターするために、次のブロックをご紹介します。

CyberPiのディスプレイにテーブルを表示します。
最大4行×3列のテーブルが作成できます。
表のイメージ | 1列目 | 2列目 | 3列目 |
---|---|---|---|
1行目 | |||
2行目 | |||
3行目 | |||
4行目 |
簡単な動作プログラム作成
『超音波センサーの値をCyberPiのディスプレイに常時モニタリングする』プログラムを作ってみます。

『超音波センサー2がオブジェクトまでの距離を検出する』ブロックの値を、CyberPiのディスプレイの表(1行2列)に表示させます。
表(1行1列)には分かりやすい名称を入れておきます。今回は『距離』としました。
CyberPiには次のように表示されます。


【例題】超音波センサーで障害物を回避しよう
例題1:センサー値に応じて処理を切り替える
- 例題
- 解答例
『mBot2を前進させ、障害物が近づいたら停止させる』プログラムを作ってみましょう。
※障害物が遠ざかったら、前進を再開しましょう

- 繰り返し処理で、超音波センサーの値を常時読み出す
- 『障害物が近づいたら』の条件は、比較演算『超音波センサーの値 < 10cm』を使う
※10cmの距離は任意に設定してください
例題2:障害物回避動作をさせてみよう
- 例題
- 解答例
『mBotを前進走行させて、障害物が近づいたら方向転換する』プログラムを作ってみましょう。

- プログラムの構造は例題1と同じ
- 『方向転換』するために、『左折』または『右折』ブロックを使う
『左折』または『右折』ブロックに設定する角度は、90°~180°回転する時間を設定するのが良いでしょう。
短すぎる場合、回転が小さく、障害物に対して斜めに前進していく可能性があります。
超音波センサーでの障害物の検出は、斜めの壁に対しては検出しにくいことがありますので、そのことも念頭に入れてプログラミングしてみてください。
まとめ
今回は、超音波センサーを使うことで、mBot2が自律的に障害物を回避するプログラミングについてご紹介しました。
この機能を活用して、迷路を通り抜けるチャレンジなど、さらに面白いプログラムに挑戦してみてください。
次回は、超音波センサーのLED制御について解説します。
mBlockを使ったmBot2のプログラミング方法を丁寧に解説していておススメです。
CyberPi単体でもプログラミング教育に非常に役立ちます!
