今回は、mBotプログラミングシリーズ(mBlock編)の第10回です。
この回では、mBotの赤外線センサーを活用して、複数のロボットが協調して動くプログラムを作成します。
協調制御は、工場の生産ラインや配送ロボットの動きに応用される技術の基盤でもあります。
赤外線センサーを用いた基本的なデータ送受信の仕組みを理解し、それを用いた簡単な協調プログラムを実現します。
初心者でも安心して学べるよう、ステップごとに丁寧に解説していきます。
この記事で分かること
- 赤外線センサーの仕組み
- 赤外線センサーに関するブロックとその使い方
- ロボット同士が協調してタスクを達成するプログラムの作成方法
赤外線センサーとは
赤外線センサーは、目には見えない赤外線を利用して情報をやり取りする装置です。
mBotの基板上にある『IR_T』が送信側(Transmitter)、『IR_R』が受信側(Receiver)です。

mBotに搭載されている赤外線センサーは、赤外線リモコンからの信号を受信するだけでなく、他のmBotに信号を送信する機能も持っています。
これにより、簡単なメッセージを送り合いながら、複数のロボットを協調して動作させることが可能です。
mBlockとは?『スクラッチ(Scratch)』との違い
mBlockは、小学校や学習塾で取り入れられている『スクラッチ(Scratch)』をベースとしたビジュアルプログラミングツールです。
スクラッチの基本的な操作感を引き継ぎながら、ロボットやハードウェアの制御に特化しているため、mBlockを使えば、プログラミング初心者でも簡単にロボットプログラミングを始めることができます。
mBlockで使用するブロック
『センサー』パレット
各種センサーのブロックが入っています。
今回は赤外線センサーのブロックを使います。

mBot用の赤外線リモコンのボタン操作を検知します。
リモコンの入力に応じてmBotを操作することができます。
ブロックのプルダウンで次の選択が可能です。
・『A~F』『↑↓→←』『設定』『0~9』

指定した文字列や数字を赤外線を使って送信します。

他のデバイスから送られてきた赤外線メッセージの内容(文字列や数字)を表します。
簡単な動作プログラム作成
『赤外線リモコンでmBotを操作する』プログラムを作ってみます。
各ボタンは以下の操作とします。
・『A』ボタン:前進
・『B』ボタン:後退
・『C』ボタン:止まる

ブロック『赤外線リモコン〇ボタンが押された』を使って『A』『B』『C』を判定します。
また、リモコン操作を常時監視するため、繰り返しブロック『ずっと』を使う必要があります。
次に、2台のmBotを使って協調制御をしてみます。
それぞれをmBot_A、mBot_Bとします。
『mBot_Aのボード上のボタンを押すと、mBot_BのLEDが光る』プログラムを作ってみましょう。

mBot_Aは、『ボード上のボタンが押されたら、赤外線メッセージ(hello)を送る』の処理を、繰り返し処理で継続します。

mBot_Bは、『受け取った赤外線メッセージが「hello」なら、LEDを点灯する』の処理を、繰り返し処理で継続します。
それぞれ繰り返し処理で継続する理由は、ボード上のボタンや、メッセージの受信を常に検出できるようにするためです。
これにより、『mBot_Aの操作 ⇒ mBot_Bへ赤外線送信 ⇒ mBot_Bが動作する』という協調制御が可能となります。

協調制御にはmBotが2台以上必要です。
2台目には見た目の可愛い『ピンク』もお勧め!
【例題】赤外線センサーで協調制御させよう
例題1:赤外線リモコンで操作しよう
- 例題
- 解答例
『赤外線リモコンでmBotを操縦する』プログラムを作ってみましょう。
各ボタンの動きは次の通りとします。
- ↑:前進
- ↓:後退
- →:右回転
- ←:左回転
- 設定:停止
- 1~3:タイヤの速度を変更する(1が遅く、3が早い)
- 1~3が押されないときのタイヤの速度は、3のボタンと同じ速さとする

- 速度を格納する変数『スピード』を作り、1,2,3のボタンごとに速度を設定する
- ↑↓→←のボタンの各処理に、『〇向きに〇%の速さで動かす』ブロックを使い、速度の部分に変数『スピード』をセットする
このプログラムは、ボタンの数だけ処理が増えることになりますが、それぞれのボタンの処理を適切に作成すれば、比較的簡単に処理を作り上げることができます。
例題2:危険を他のロボットに知らせる
- 例題
- 解答例
2台のmBot(mBot_AとmBot_B)を使用します。
以下の動作をするプログラムを作ってみましょう。
・mBot_Aが15cmより近くに障害物を検出すると、mBot_BがLEDを点灯させ、ブザーを鳴らす
(障害物が15cmより近くにある時、mBot_BはLEDを点滅してはならない)
・障害物が15cm以上の距離になると、mBot_BのLEDが消灯し、ブザーが止まる


- mBot_Aは、15cm未満と15cm以上で2種類のメッセージを送る
- mBot_Bは、2種類のメッセージそれぞれで処理を作る
作りがちなプログラムとして、
『mBot_Aは、障害物が15cm未満になった時だけ「danger」メッセージを送る』
『mBot_Bは、「danger」メッセージを受信したらLEDを点灯、それ以外は消灯』
というものです。


繰り返しブロック『ずっと』で処理を繰り返す間隔は、赤外線メッセージを受け取る間隔より短いため、障害物が15cm未満にい続けたとしても、mBot_Bは赤外線メッセージ「danger」を受け取れないタイミングが発生します。
そのため、上記のプログラムでは意図せずLEDを消灯してしまうことがあります。
まとめ
今回は、赤外線センサーを用いてロボット間でデータを送受信する方法を学びました。
このスキルは、ロボットの協調制御や簡易的な通信システムを構築するための基礎となります。
現実世界では、自律型ロボットが連携して動作する場面が増えており、今回学んだ内容はその基盤となるはずです。
次回は、より複雑なプログラミングを可能とする、ブロック定義について学びます。

協調制御にはmBotが2台以上必要です。
2台目には見た目の可愛い『ピンク』もお勧め!
mBlockを使ったmBotのプログラミング方法を丁寧に解説していておススメです。
mBotを使用した拡張的な遊びは『mBotでものづくりをはじめよう』が参考になります。mBotのパーツを段ボールと組み合わせてオリジナルのロボットを作るといったような拡張的な遊びが楽しめます。