ビニールテープやマジックで描いた黒い線のコースに沿って、
micro:Maqueenを走らせてみます。
コースから外れないように賢く動かすためのプログラムには、
どんな工夫が必要になるでしょうか?
プロジェクト「ライントレース」
紙などの上に描かれた黒線に沿って進むmicro:Maqueen。外部からの操縦ではなく、搭載しているmicro:bitが適切な方向を定めて黒線をなぞるように進みます。このロボットカーの定番テーマ「ライントレース走行」のプログラミングに挑戦しましょう。
このプロジェクトで解決したい課題
このプロジェクト「ライントレース」では、次の課題の解決に挑戦します。
micro:Maqueenに「ライントレース」機能を組み込み、
紙に描いた黒線に沿って走らせよう!
具体的には、次のイラストのようなことができるしくみとプログラムを考えます。
テストコース
![]() |
上の図をクリックしてダウンロード |
右図のような「テストコース(A3サイズPDF)」を用意しています。こちらからダウンロード後、プリンターで印刷してご利用ください。「20cm直線コース」も描いています。
この他、白い紙等に黒いビニールテープを貼ってコースとすることもできます。
プロジェクトの考え方
「線をみる」仕組み
「黒線に沿って走行」するためには、黒い線を見つけることがまず必要です。
micro:Maqueenの底面には、2つの「反射光センサー(フォトリフレクタ)」という部品が取り付けられています。
反射光センサーは、赤外線を発する赤外線LEDと光の強さにより電流の流れ方が変わるフォトトランジスタが一体になったセンサーで、簡単な「目」の働きをします。
実際にMaqueenの電源を入れて底面を見ても、反射光センサーは写真のように明るく光っていません。赤外線は私たちが感じることができる光(「可視光」)より波長が長く肉眼では見ることができません。しかしスマートフォンなどで使われている「イメージセンサー」では光として撮影することができます。
また、センサーの動作の様子は、車体前部に取り付けられている「ラインセンサー・インジケーターLED(標示器)」で確かめることができます。光の反射がある「白」の時は点灯し、光の反射がない「黒」の時は消灯します。
ラインセンサーの値を読み取るブロック
ラインセンサーの値を読み取るためには、次の「read (left/right)line tracking sensor(ラインセンサーの値を読み取る)」ブロックを使います。
左右どちらのセンサーの値を読み取るかは、「left▼」の部分の▼をクリックして切り替えます。
このブロックは、「0」または「1」の「デジタル値」を返します。反射光が少ない(ラインセンサー下が黒)時は「0」を、反射光が多い(ラインセンサー下が白)時は「1」となります。
黒線と車体の位置とラインセンサーの値
micro:Maqueeinのラインセンサーの説明は理解できたでしょうか?
ここで、黒線と車体の位置とラインセンサーの値の関係を考えてみましょう。
左右2個のラインセンサーで黒線を読み取ることを考えた場合、次の4通りのパターンに分類できます。
この4つのパターンそれぞれの場合で、線から外れないようにするには、どのような動きをすればよいかを考えてプログラムを組み立てましょう。
プログラム
micro:Maqueenでライントレース走行を実現するプログラム、いろいろなプログラミングのテクニックがありますが、基本的な方法で考えてみたいと思います(※紹介するのは一例です。もっと良いプログラミング方法もあるかもしれません)。
プログラミングの基本的な考え方
「黒線と車体の位置とラインセンサーの値」でも触れたように、左右2個のセンサー値の組み合わせは、4通りあります。それぞれの場合で、黒線から外れないように動くようにするプログラムを考えます。
ラインセンサーの値を読み取る
ラインセンサーの値をもとにコースの黒線と車体の位置関係を判定するわけですが、判定途中でセンサーの値が変わると不都合なので、判定前にセンサーの値を変数「左センサー」・「右センサー」に納めておきます。
「かつ」
チャート図中に「左:0かつ右:0」と書いていますが、「かつ」で結び付けると「2つの条件がともに成り立ったとき」に成り立つ条件式となります。
例えば、車体が黒線の左側になった時は、次のような「かつ」を用いた条件式となります。
黒線と車体の位置関係は、4つのパターンになることは、前に紹介しました。それぞれ、どのような条件式にすればよいか、考えてください。
四条件分岐
左右2個のラインセンサーを持つmicro:Maqueenでライントレース走行をさせるには、センサー値の組み合わせで4通りの分岐処理をすればよいようです。ただ、ツールボックス「論理」にある「条件分岐」ブロックは、「もし~、でなければ~」の2分岐までしかありません。
次の方法で、分岐の数を増やすことができます。
作成途中プログラム
次のプログラム例は作成途中のものです。「編集」ボタンを押してMakeCodeエディターを起動して、プログラムを完成させてみてください。
あらかじめ「四分岐条件」のブロックは用意していますが、分岐条件式とそれぞれの場合の動きはまだプログラミングしていません。
完成したプログラム例はこちら。
アドバイス
パターンごとの動き
左右のセンサーの値で、車体と黒線の位置関係を調べることができます。それぞれの位置関係ごとの動きの案をまとめてみました(完成したプログラム例)。
コースの黒線上であれば前進、コースから外れそうになったときは黒線に戻るように旋回するように動けば、黒線の上を進みます。
コースアウトの場合
問題だったのが、コースを外れて白い紙の上になってしまったときです。
はじめは「停止」するようにプログラムを組んでみましたが、旋回するときセンサーが黒線上にあるときでも反射の具合が悪いためか「左右とも白」と反応してしまうことがあったので、「微速前進」としました。ここら辺は実際にテスト走行してみることが大切です。