mBotのライントレースセンサーとは?
mBotに最初にインストールされているプログラムには、黒い線の上を沿って走る、ライントレースモードがあります。
このページでは、mBotの基本キットに入っているライントレースセンサーの基本的な仕組みと、プログラミングの考え方について、最新のmBlock5を使って説明します。

mBotの設定やmBlockのプログラミングの基本的な部分は、以下のページをご参照下さい。
準備その1 mBotの組み立てからPC接続まで
準備その2 ファームウェア更新からログイン設定
基本1 mBotのLEDを光らせてみよう
基本2 mBotのブザーを鳴らせてみよう
基本3 動きブロックを使ってmBotを自在に動かそう
・mBot_v1.1 日本国内正規品 Bluetooth版 購入時期は2019年8月
(新型Bluetoothモジュール)
・mBlock_v5.1 (ローカル版)
・オンラインのファームウェアバージョン_06.01.107
・Windows10
・アップロードモードオフ(USBケーブルが邪魔な場合は、PC内蔵Bluetoothか、Makeblock社のBluetooth変換のUSBドングルで接続をお勧めします)
mBotのライントレースセンサーの仕組み
ライントレースセンサーには、光を発する赤外線ライトと、光を検出するLEDフォトダイオードのセットが2つついています。

ライントレースセンサーは、LEDから発光された赤外線が、白い線や、黒い線にあたり、反射してくる光の量によって、白か黒かを見分けます。
下の図のように、白い線に赤外線をあてると、反射する光の量が多く、黒い線に赤外線をあてると、反射する光の量が少ないのです。

反射する光の量を検出(しゅつ)したライントレースセンサーについている、左側のセンサーと、右側のセンサーが、それぞれ、黒か白かを判定します。

判定結果は、上の図のように、「0~3」の数字(センサーの値)で、PCのmBlock5に送信されます。

上の画像は、mBotのライントレースセンサーの判定によるLEDの光り方の違いです。画像を見てわかる通り、センサーが白と判定すると、ライントレースセンサーのLEDが青く光ります。
ライントレースセンサーのデータをmBlock5で確認する
ライントレースセンサーの判定結果は、全部で4種類です。その判定結果をmBlock5に、表示させるには、「センサー」ブロックパレットの中にある「ライントレースセンサーの値」ブロックの横にある、チェックボックスにチェックを入れます。

チェックボックスにチェックを入れた後、白い紙の上にmBotを載せると、ライントレースセンサーの、両方のセンサーが「白=3」と検知して、その情報をPCに伝えて、スプライトエリアに、「3」と表示されます。
数字が確認できたら、片方だけ黒い線にあてたり、両方のセンサーを、黒い線の上にあててみて、数字が変化することを確認しましょう。
尚、mBlock3では、センサーデータをパンダに言わせるというのが、結構簡単にできました。
一方、mBlock5では、スプライト(パンダ)とデバイス(mBot)が、別々のオブジェクト(スプライト)として扱われるので、センサーデータをスプライトに送信する場合は、「グローバル変数」か、mBotのmBlock5の拡張機能である、「アップロードメッセージ」というものを使う必要があります。その辺りの連携は、また別のページで説明いたします。
参考:「グローバル変数」を使ったセンサーデータ連携の記事
ライントレースセンサーで白黒判定プログラムを作る
ライントレースセンサーが、白か、黒かを判定できることが分かったら、センサーの判定種類に合わせて、LEDを、別々の色に光らせてみましょう。
尚、ライントレースセンサー使ってプログラミングをする時、

上の画像のブロックを使う事も出来ますが、センサーの値(0~3)と、それに対応するセンサーの状態を頭に入れておく必要があったり、演算ブロックを使う必要があるので、ここでは、より簡単に出来る下の画像のブロックを使っていきます。

※ポート番号について
mBotの基本キットを組み立てる時、ライントレースセンサーは、ポート2に接続するように書かれています。mBlock5のブロックも、最初の設定はポート2になっていますので、ここでは、特に変える必要がありません。例えば、もし、mBotのメインボード「mCore」のポート1にセンサーケーブルが接続されている場合は、ブロックを「ポート1」に変える必要があります。

mBlock5のライントレースセンサー条件ブロックとデータの関係図
上の図は、センサーの値、判定種類に対応するライントレースセンサーの条件ブロックの設定です。この条件ブロックを使って、白黒判定プログラムを作る場合の考え方の一例を以下のご紹介します。
もし、全てのセンサーが黒と判定したなら、mBotのLEDを青く光らせるプログラムの考え方
センサーの判定条件によって、mBotのLEDや動きを変えるプログラムを作るには、制御ブロックパレットの中にある、2つの条件ブロックを使い分けます。

mBlock5_条件分岐ブロック画像
条件分岐ブロックは、「六角形」に、条件を表す「六角形のブロック」を入れて、その条件になっているときに、mBotがどう動くかのブロックを入れて使います。


mBlock5の条件を表すブロックは。全て六角形をしている
例えば、もし、条件が、「ライントレースセンサーの検出が、両方とも黒」なら、mBotのボード上の両方のLEDを「青く点灯」という、プログラムを作る場合は、下の画像のようなプログラムを作ります。

このプログラムで、重要なのは、STEP2で出てきた、繰り返しの「ずっと」ブロックを使う事です。
もし、ずっとブロックを使わない場合、イベントを実行したの瞬間(上のプログラムの場合は、スペースキーを押した瞬間)のライントレースセンサーの検出状態が、「両方とも黒」じゃないと、LEDが青く光りません。
センサーの判定種類が変わったらLEDの光り方を変えるプログラムを作りたい場合は、「ずっとブロック」で、もし~~ならのブロックを囲ってあげる必要)があります。
もし●●なら、でなければ〇〇 を使うプログラム
前のプログラムだと、一度、両方のセンサーが黒と判定して、LEDが青く光ると、その後は、例えば、両方のセンサーが白と判定しても、LEDは青く光りっぱなしです。
次は、「両方のセンサーが黒と判定した時だけ」LEDを青く光らせて、そうではない時は、LEDを赤く光らせてみましょう。
その場合、 ライントレースセンサーの検出が両方黒という条件が正しくない時=「〇〇でなければ」に、mBotに行わせる動作を設定する必要があります。今回は、ボード上の両方のLEDを赤く光らせたいので、このようなプログラムを作ります。

ティンカリング ~色々mBotを動かしてみよう~
・ライントレースセンサーの4つの判定種類によって、LEDの光り方をかえるプログラムに挑戦してみましょう。
ヒントは、このプログラムを作る場合、まず、言葉にすると、どうなるかを考える事です。
ロボットプログラミングにチャレンジする場合は、プログラムを作る前に、ロボットにどのような動きをして欲しいかを、しっかり、考え、こうすれば動くだろうという、プログラムの処理手順(=アルゴリズム)を、予想を見通しをしてから、作り始めることが大切です。
プログラミングに慣れてくると、簡単な処理なら、頭の中で、アルゴリズムが作れるようになりますが、複雑な処理を考える時や、初めのうちは、上のようにノートに書いて、考えることをお勧めします。
ここがポイント:条件分岐と入れ子構造(ネスト)
下は、チャレンジで、挑戦するプログラムの例です。

このプログラムでは、「もし~~なら、でなければ・・・」の中に、別の「もし~~なら、でなければ・・・」が入っています。このように、制御ブロックの中に、別の制御ブロックが入っている事を、「入れ子(ネスト)」と言います。
入れ子を使う事で、条件を複雑にしたり、繰り返しの繰り返し、といった処理をすることも可能です。
