ロボットキットレビューtinkeringTwitterFacebookはてブPocketPinterestLINEラインフォロワーセンサーの様々な用途mBotに標準で付属するラインフォロワーセンサー(ライントレースセンサー)。黒い線を検知し、線に沿ってmBotを走行させるためのお馴染みのセンサーです。ラインフォロワーセンサーで検出した値(データ)は、↓の表のように、なっています。両方のセンサーが白このラインフォロワーセンサー、白か黒かの判定と思われがちですが、実は、そうではありません。センサーの原理は、発光された赤外線が跳ね返ってくる量によって、白か黒かを見分けます。赤外線が多く跳ね返るのは、白いライン、跳ね返りが少ない場合は黒と判定します。「赤外線の跳ね返りの量」の判定ですので、実際には、白・黒じゃなくてもセンサーは反応します。指で、センサーをタッチする(覆い隠す)と、指は白くはありませんが、赤外線の跳ね返りが多いので、上記の表でいう所の3の値が出力されます。この原理を利用すれば、ラインフォロワーセンサーをタッチセンサーや近接センサー(ものが近づくと反応するセンサー)として利用することが可能になります。それを使ったのが、例えば、↓の動画。デスクライトの柱部分に、ラインフォロワーセンサーを付け、そのセンサーに指を近づけることによって、赤外線の跳ね返りの量が変わり、それの応じてセンサーの出力が変わった事を検知すると、LEDが光るようになっています。音声&光センサーパック編このように、センサーの原理を理解すると、そのセンサーを様々な用途に応用することが可能になりますね。このラインフォロワーセンサーを応用した重要な使い方に、ラインカウントがあります。mBotが黒い線の上を通過すると、1回とカウントするような事が可能になります。ラインカウントのプログラミングさて、↑の動画のように、黒いラインの上を通ったら、「1回」とカウントするにはどうしたらよいでしょうか?上のような動きをさせるためには、まずは、その動きの要素を分解して考えましょう。1、mBotが起動したら3秒後に動き出す2、5秒で止まる3、黒いラインの上を通る毎に「1」ずつカウントする4、カウントした数字をLEDマトリクスに表示させる1、mBotが起動したら3秒後に動き出す「mBotが起動したら、三秒後に動き出す」は、それほど難しくないですね。下のブロックを使えば簡単です。2、5秒で止まる時間を計測してmBotを制御するにはどうしたらよいでしょうか?これは、mBotに内蔵されているタイマー機能を使えばよいです。タイマー機能とは、このタイマーブロックを使い、タイマーをリセットするからずっと時間を計測する機能です。タイマー機能はとても便利で、mBotの走る速さを途中から変えたり、LEDの光りかたを段々変えていくような可変プログラムを作る時に大変役に立つ機能です。3、黒いラインの上を通る毎に「1」ずつカウントする変動するような数をプログラムするには、変数を使います。変数とはデータ(文字・数・センサーの値etc)を記憶しておく入れ物のことです。一つの「変数=入れ物」には、一度に一つしかデータを入れておくことが出来ません。新しくデータを入れると、それまで「変数=入れ物」に入っていたデータは、消えてしまいます。このプログラムの場合、黒い線の上を1回通るごとに、1ずつ数を入れ物に入れていくイメージです。この変数を使うためには、「変数ブロック」を自分で作成する必要があります。変数ブロックはは、このような感じで簡単に作ることが出来ます。https://j-tinkering.com/wp-content/uploads/2019/03/20190307_140212.mp4この動画をで「カウント」というのが変数名です。入れ物にどんなデータが入っているかすぐにわかるように自分で任意で名前を付けて登録します。使うブロックは、この上の3つです。上の画像の、一番上の「オレンジ色の丸いカウント」ブロックが「入れ物」で、その中に、入れる数を下の2つのブロックで制御していくイメージです。4、カウントした数字をLEDマトリクスに表示させるLEDマトリクスをポート1に繋げます。LEDマトリクスは、mBot標準ではついていませんが、追加で購入可能です。LEDマトリクスレビューこのように分解して考えた後、それをつなぎ合わせると、↓のようなプログラムが出来ますね。ちなみに、mBlock5だと、初めからラインフォロワーセンサーが黒であるか、というブロックが用意されているので、大分直感的に分かりやすくプログラムを組むことができます。mBlock3だと、ラインフォロワーセンサーの値が「0~3」となっていたので、それに比べると大分わかりやすいです。一方で、センサーの原理を知らず、単にブロックだけでラインフォロワーセンサーの機能を考えてしまうと、↑タッチセンサーの使い方は発想できないかも知れません。このプログラムで動かした動画がこちらです。https://j-tinkering.com/wp-content/uploads/2019/03/MOV_0065.mp4おかしいですね。黒い線を通過した数と、カウントしてLEDパトリクスに表示した数があっていません。何というか、黒い線の上を走行中は数が増え続けていっています。ラインカウントする時は、「状態」をカウントするイメージさて、なぜ↑のような、意図していないプログラムになるのでしょうか?実は、↑で作ったプログラムだと、mBotは、「ラインフォロワーセンサーが黒を検知している間はずっと1ずつカウントを増やす」と理解します。プログラムを作る側は、ラインフォロワーセンサーで、黒い線の数を数えたいのですが、それをmBotに理解させるためには、さらに、詳細なプログラムを組んであげないとmBotは、人間の思い・言葉を理解してくれないのです。ラインフォロワーセンサーで、黒い線の数をカウントするという事を、mBotが理解できるように翻訳すると、「ラインフォロワーセンサーで黒と検知している状態から、白と検知している状態に切り替わる数をカウントする」というように指示してあげなければなりません。この場合、「状態」という変数を作って、その「変数名=状態」のブロックをラインフォロワーが白と検知している状態の時は「0」に設定し、黒と検知したら、状態を「1」にして、その時にカウントを1ずつ増やすというプログラムを組んで上げる必要があります。このプログラムで、冒頭のような動画の通り、正確なラインカウントができるようになります。最新の「mBlock5」に対応した「mBot」の基本活用術も連載中です。合わせてご覧ください。17MakeX2019のテーマ・開催概要が発表されました。J-tinkering。