mBotが持つ赤外線(IR)通信機能

 mBotでプログラミングの学習をする場合、よくある事例が、標準で付属する超音波センサーを使った、衝突回避プログラムの作成、ラインフォロワーセンサーを利用したライントレースプログラム(黒いラインの上に沿って走行させる)の作成、ブザーを利用して音楽プログラムの作成、LEDの光らせ方を変えるプログラムの作成だったりします。

 今回は、それ以外に、mBotの赤外線通信機能を利用した、応用プログラミングをしてみようと思います。

 mBotには、赤外線リモコンが付属していますね。mBotのデフォルトプログラムには、このリモコンの十字キーを利用したラジコン操作モードがあります。リモコンからの赤外線通信を受信したmBotが十字キーの方向に動くモードです。

Makeblock_mbot_リモコン画像

 このリモコン操作の場合は、mBotは赤外線での信号を受信するだけですが、実は、mBotには、赤外線の送信機能もあるんですねえ。

mBot_IR受光器_送信器 画像

mBotには、赤外線(IR)の送受信器がついている

 

 リモコンからの赤外線送信だけでなく、mBot自身も赤外線を送信させることが可能なんです。この機能を使い、2台のmBotを準備すれば、赤外線の送信をしたmBotに合わせて、受信したmBotが動作するというプログラムを作ることが出来ます。プログラミング教室で、生徒さん同士で協力して2台の協調プログラム作成なんてこともできます。

 赤外線通信(IR通信)を使うには、mBlock5の「調べる」ブロックパレットの所にあるブロックを利用します。

mBlock5_IR通信用ブロック説明画像

↑の画像の、「赤外線メッセージを送信する」と「IRメッセージを受信した」というブロックを利用します。

mBlock5を利用してmBotの赤外線通信プログラムを作成

 では、早速、2台のmBotを利用して、赤外線通信プログラムを作成していきましょう。プログラムは、一方のmBotに送信側プログラムをアップロードし、もう一方のmBotに受信側のプログラムをアップロードする形になります。

mBot赤外線通信、送信側のmBotプログラム

まずは、送信側プログラムです。このプログラムは、受信側のmBotに、赤外線でメッセージを送るというものです。ブロックは、↓のブロックを利用します。

mBlock5_赤外線メッセージブロック画像

 デフォルトでは、helloと記載されていますが、今回は、メッセージを送ったタイミングで、受信側のmBotが動作し始めるというプログラムなので、メッセージの中身自体には、意味を持たせる必要はありません。ですので、文字は短くしましょう。「a」とかで大丈夫です。文字を短くすると、その分、通信時間も短くなりますので。

mBlock_赤外線メッセージブロック画像2

この後は、赤外線を送るプログラムを作ります。先に完成のプログラムはこちらになります。

mblock5_mBot_IR送信側プログラム

 赤外線通信は1回送るだけだと一瞬なので、ある一定期間送り続けるには、制御ブロックの中の「繰り返す」を利用します。上のプログラムは、

「mBotが起動したら、30回赤外線メッセージを送り、その間はLEDを赤に点灯。3秒間は、赤外線をメッセージを送らずに、その間はLEDも点灯しない」というプログラムです。

あえて、赤外線メッセージを送らない時間を設けているのは、mBotの動作で見える形で、赤外線を送っているかどうか表現したい為です。

上のプログラムを作成したら、送信側のmBotにプログラムをアップロードします。

mBot赤外線通信、受信側のmBotプログラム

 次に、受信側のmBotプログラムの作成です。今回は、3種類の動作例を作ってみます。

1、赤外線を受信している間、LEDが赤く光る

まずは、簡単に、受信側mBotのLEDを赤く光らせるというプログラムです。

mBlock5_IRメッセージを受信したプログラム画像

このように、演算ブロックを使って、「aというメッセージを受信した」というブロックを作成します。

mBlock5_IRメッセージ受信するまで待つプログラム画像

 このプログラムでは、赤外線メッセージを受信するまではLEDは光らせず、受信している間は、LEDを赤く光らせるという事を書いています。

 作成したら、受信側mBotにアップロードしましょう。実行すると、このような動画の挙動を確認することが可能になります。

 

 最初の30回の送信時は、受信側mBotが反応しませんが、その次から反応していますね。この辺はタイムラグがあるのでしょうかね。

さて、この受信側のプログラム、上記以外でも、同じ動作を実現させることが可能です。例えば、

mBlock5_赤外線受信プログラム2画像

この場合は、もし○○なら、出なければ■■というブロックを使っています。こちらの方が直感的に理解しやすいかも知れませんね。

2、赤外線を受信している間、LEDが赤く光り、mBotが回転する

次は、mBotを動かすプログラムです。

mBlock5_赤外線通信受信側プログラム_mBot回転

恐らく、はまるポイントは、上の「動きを止める」というブロックを入れ忘れたりするところかなって気がします。このプログラムでの動作は↓のようなものになりますね。

 

1、と同じく、最初の30回送るでは、反応しませんが、そのあとは、メッセージ受信の時だけmBotが回転します。

3、赤外線を受信している間、LEDが赤く光り、ライントレース走行する

 さて、最後は、赤外線のメッセージを受信している間、ライントレース走行するという動作です。
ここまで来た方は、簡単にできると思います。

メインプログラムをこのように作成し、ライントレース動作の定義(関数)ブロックを作りましょう。

mBlock5_赤外線受信プログラム_ライントレースメイン画像

メインプログラム

mBlock5_赤外線受信プログラム_ライントレース関数画像

ライントレース定義ブロック

 

ちなみに、ライントレースのプログラムに関してのページもご参照ください。
参考記事:mBotのライントレースセンサーを使って自動運転

動作としては、このような動画の動きになります。

 

 ここまでの要素、ライントレースや、定義ブロックのプログラミング要素も利用できるので、プログラミング教室のカリキュラムの成果確認とかで、取り入れると、プログラミング+他の生徒とコミュニケーションしながらのプログラム作成みたいな授業になるので、なんか、こう、STEM教育の授業やってるな的な感じになりますよね(笑)