今回は、mBot2プログラミングシリーズ(Python編)の第2回です。
この回では、mBot2に搭載されている超音波センサーを使って、障害物を検知し、それを回避するプログラムをPythonで作成します。
障害物を検知して回避する動きは、ロボット工学や自動運転技術にも通じる重要なトピックです。ぜひ一緒に学んでいきましょう!
全講座の一覧はこちら
目標
- 超音波センサーの仕組みを理解する
- 超音波センサーの値を取得するAPIを理解する
- 障害物を検知して回避する動きをプログラミングする
Python環境(mBlock Python editor)の立ち上げ
ここでは、『mBlock Python editor』を使って、Pythonコードでプログラミングしていきます。
事前にPython環境を導入しておいてください。
環境の導入に関しては、次の記事を参考にしてください。
超音波センサーとは
mBot2の超音波センサーは、目になっている部分で、音波を使って物体までの距離を測ることができます。
前方にある障害物の距離をセンチメートル単位で計測でき、測定範囲は3cm~300cm(3m)です。

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

- 送信機(T)から超音波を出す
- 何かに反射して超音波が跳ね返ってくる
- 受信機(R)で跳ね返ってきた超音波を受信する
- 送信から受信までの時間を測定し、距離を計算する
APIとは
API(Application Programming Interface)は、ソフトウェアやハードウェアが外部のプログラムとやり取りをするためのインターフェース(接点)です。
簡単に言うと、『決められたルールに従って機能を利用するための仕組み』です。
cyberpiライブラリをインポートすることで、CyberPiや、mBot2、センサーなどの各機能を簡単に利用できます。
超音波センサーのPython API
超音波センサーに関するAPIの中で、今回は障害物回避に使用するものを紹介します。
障害物との距離取得
ultrasonic2.get(index = 1)
障害物と超音波センサーとの距離を取得します。
- 範囲:3~300cm
- 誤差:±5%
簡単な動作プログラム作成
『超音波センサーの値をCyberPiのディスプレイに常時モニタリングする』プログラムを作ってみます。
from cyberpi import table, ultrasonic2
#1行1列
table.add(1, 1, "距離")
while 1:
#1行2列
table.add(1, 2, ultrasonic2.get(index = 1))
『障害物と超音波センサーとの距離』の値を、CyberPiのディスプレイの表(1行2列)に表示させます。
表(1行1列)には分かりやすい名称を入れておきます。今回は『距離』としました。
常時モニタリングするため、センサーの値はwhileループで常に取得するようにします。
CyberPiには次のように表示されます。

ディスプレイのテーブル表示に関するAPIの詳細は、以下の記事に書いています。

【例題】超音波センサーで障害物を回避しよう
例題1:センサー値に応じて処理を切り替える
- 例題
- 解答例
『mBot2を前進させ、障害物が近づいたら停止させる』プログラムを作ってみましょう。
※障害物が遠ざかったら、前進を再開しましょう
mBot2のモーター駆動に関するAPIの詳細は、以下の記事に書いています。
from cyberpi import mbot2, ultrasonic2
while 1:
#障害物が近い場合
if ultrasonic2.get(index = 1) < 10:
mbot2.EM_stop("all")
#障害物が遠い場合
else:
mbot2.forward(50)
- 繰り返し処理で、超音波センサーの値を常時読み出す
- 『障害物が近づいたら』の条件は、比較演算『超音波センサーの値 < 10cm』を実施する
※10cmの距離は任意に設定してください
例題2:障害物回避動作をさせてみよう
- 例題
- 解答例
『mBotを前進走行させて、障害物が近づいたら方向転換する』プログラムを作ってみましょう。
from cyberpi import mbot2, ultrasonic2
while 1:
#障害物が近い場合
if ultrasonic2.get(index = 1) < 10:
mbot2.turn(90, 50)
#障害物が遠い場合
else:
mbot2.forward(50)
- プログラムの構造は例題1と同じ
- 『方向転換』するために、mBot2を回転させるAPI
mbot2.turn()
を使う
mBot2を回転させるAPIは様々ですが、今回は角度を指定するAPIが良いでしょう。
時間指定で回転させる場合、mBot2の電源状態や外部環境によって、回転角度にばらつきが発生する可能性があるためです。
まとめ
今回は、超音波センサーを使うことで、mBot2が自律的に障害物を回避するPythonプログラミングについて紹介しました。
この機能を活用して、迷路を通り抜けるチャレンジなど、さらに面白いプログラムに挑戦してみてください。
次回は、超音波センサーのLED制御について解説します。
mBlockを使ったmBot2のプログラミング方法を丁寧に解説していておススメです。
CyberPi単体でもプログラミング教育に非常に役立ちます!
