PR

【mBotプログラミング例⑨】ライントレースセンサーを使って自動運転させよう(mBlock編)

小学生向けロボット
この記事は約6分で読めます。

今回は、mBotプログラミングシリーズの第9回です。

この回では、ライントレースセンサーを活用して、ラインに沿って自動運転するプログラムを作成します。
ライントレースの動きは、倉庫内の仕分けロボット配送ロボットの仕組みにも似ており、実社会での応用例をイメージしながら学ぶことができます。

初心者でも無理なく取り組めるよう、具体的な手順をわかりやすく解説しますので、ぜひ最後までお付き合いください!

かにロボ
かにロボ

ライントレース用の黒色ラインの作成には、反射の少ない黒色マスキングテープがお勧めです。
(黒色マジックペンでは、反射してセンサーが黒色を認識しないことがあります)

目標

  • ライントレースセンサーの仕組みを理解する。
  • ライントレースセンサーから得られる値を利用する方法を学ぶ。
  • ラインを検知して自動運転するプログラムを作成する。

ライントレースとは

ライントレースとは、地面に描かれたライン(通常は黒や白)をセンサーを使って検知し、そのラインに沿ってロボットを走らせる技術です。
mBotのような教育用ロボット自動車の高速道路での自動運転や、物流システムの自動化などの分野で広く利用されています。

ライントレースセンサーとは

ライントレースセンサーは、地面の色の違いを検知するセンサーです。
mBotには、を識別できるセンサーが2つ搭載されており、ラインの左右位置を判定できます。

mBot左下に位置するセンサーが『sensor1』、右下が『sensor2』となります。

また、各センサーには素子が2つ付いています。
1つはLEDライト、もう一つがフォトダイオード(光センサー)です。

ライントレースセンサーの仕組みを次に示します。

  1. LEDライトの光が地面に当たる
  2. 光が反射する量は、「白い地面=多い」「黒い地面=少ない」
  3. 光センサーで検出する光の量に応じて、『白』または『黒』と判断する

『お掃除ロボット』が階段から落ちないのも、同様の仕組みです。

必要なブロック

『センサー』パレット

各種センサーのブロックが入っています。
今回はライントレースセンサーのブロックを使います。

ライントレースセンサーの値を表します。

値の意味は次の通りです。

センサー値
(ブロックが示す値)
sensor1の値
(左センサー)
sensor2の値
(右センサー)
意味
000両方とも黒
101左:黒
右:
210左:白
右:
311両方とも白

各センサーの値は、黒の認識で『0』、白の認識で『1』です。
左右のセンサー値を0,1で並べて、2進数としてみた時の値が0~3となります。

2進数とは、0と1の2つの数字だけを使って数を表現する方法のことです。
コンピュータやデジタルシステムで使われる数値表現であり、非常に重要な概念です。

ここでは簡単に10進数と2進数の対応表を示します。

10進数2進数
0000
1001
2010
3011
4100
5101

左右のライントレースセンサー状態の真偽値を表します。

ブロックのプルダウンで次の選択が可能です。
センサーの場所:『左側』『右側』『全て(のセンサー)
センサーの認識:『』『

※ブロックの日本語に違和感がありますが、
 正しくは、『ライントレースセンサー「ポート2」の「左側」が「黒」を認識
 と思われます。


簡単な動作プログラム作成

ライントレースセンサーの値をmBlockのステージ上に常時モニタリングする』プログラムを作ってみます。

変数『ライントレースセンサー』を作って、ライントレースセンサーブロックの値を変数に入れます。
『変数を表示する』ブロックを処理することで、ライントレースセンサーの値がmBlockのステージ上に表示されます。

旗マークを押すたびに、その時のセンサー値で値が更新されます。

【例題】ライントレースセンサーを使って自動運転させよう

ライントレースセンサーを使った自動運転をプログラムする場合は、mBlockのアップロードモードをオンにすることをお勧めします。
オフの状態では、プログラムを動かすPC(もしくはタブレット)と、センサー認識をするmBotとの間にタイムラグが発生し、上手く制御できない可能性があります。

例題1:ライントレースさせてみよう①

  • 例題
  • 解答例

黒いラインの上をライントレースさせる』プログラムを作ってみましょう。
ライントレースセンサーの値による動作は次の通りとします。

  • 左右ともライン上の場合:直進
  • 左がラインから外れた場合:右回転
  • 右がラインから外れた場合:左回転
  • 左右ともラインから外れた場合:後退

なお、ライントレースセンサー値の判定には、以下のブロックを使ってください。

プログラムのポイント
  • 条件『左がラインから外れた』は、プログラムにすると『左が白、かつ右が黒』のAND条件を用いる
  • 条件『右がラインから外れた』も同様にAND条件とする

条件『左がラインから外れた』のプログラムを、『左が白』のブロックのみでプログラムとしてしまうと、『右が黒』『右が白』どちらも場合もその処理が実行されてしまうので注意が必要です。

例題2:ライントレースさせてみよう②

  • 例題
  • 解答例

例題1と同じ動作をするプログラムを作ってみましょう。

なお、ライントレースセンサー値の判定には、例題1とは違い、以下のブロックを使ってください。

プログラムのポイント
  • 変数『ライントレースセンサー』を作成し、繰り返し処理の最初で、センサー値を代入する
  • 条件分岐の判定には、センサー値ではなく、変数を用いる

例題1のプログラムの条件分岐ブロックの条件式のみを変更しています。

条件に『変数』を用いる理由

一連の処理の途中で、参照するセンサー値が変わらないようにするためです。
『変数』ではなく、センサーブロックのセンサー値を条件式に用いた場合、処理の途中で随時値が変化してしまいます。
例えば、1番上の条件式が成立し、その後に2つ目の条件式も成立し、両方処理をする、ということが起きてしまいます。
今回のライントレースプログラムでは問題は起きませんが、今後、応用的なプログラムを作成する際に、意図しない動作となってしまうことがあるため、注意してください。

まとめ

ライントレースセンサーを使った自動運転プログラムを作成することで、センサーとモーターの連携について深く学ぶことができます。
このような知識は、単なるロボットの操作にとどまらず、現実世界の様々な場面で応用する力となります。
さらに、今回学んだ技術は他のセンサーや新しいロジックとの組み合わせで、より複雑なプログラムを作成する土台になります。

次回は、赤外線センサーを使った協調制御プログラムを作成します。

mBlockを使ったmBotのプログラミング方法を丁寧に解説していておススメです。

mBotを使用した拡張的な遊びは『mBotでものづくりをはじめよう』が参考になります。mBotのパーツを段ボールと組み合わせてオリジナルのロボットを作るといったような拡張的な遊びが楽しめます。

コメント

タイトルとURLをコピーしました