SEARCH
MENU

親子ロボットプログラミング講座(5)「センサーを使ったプログラミング(1) ~ライントレースセンサー~」


親子で学ぶロボットプログラミング講座の第5回目は、「センサーを使ったプログラミング(1)~ライントレースセンサー~」です。

 

第1回目:親子でロボットプログラミングに取り組む
第2回目:ロボットプログラミングの準備をしよう
第3回目:mBotで初めてのロボットプログラミング
第4回目:mBotを自由に走らせよう


第4回目で、mBotを実際に走らせました。第5回目から数回にわたり、mBotのセンサーを使ったプログラミングをしていきたいと思います。
mBotに最初にインストールされているプログラムには、黒い線の上を沿って走る、ライントレースプログラムがあります。

 

今回は、そのプログラムで使う、ライントレースセンサーの仕組みと、それを使ったプログラミングにチャレンジします。

 


図1 ライントレースセンサー

 

STEP1:ライントレースセンサーの原理を知ろう

ライントレースセンサーには、光を発する赤外線ライトと、光を検出するLEDフォトダイオードのセットが2つついています。

 


図2 2つのセンサー

 


図3 ライントレースセンサ―の原理
出典:www.makeblock.com


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


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

 


図4 ライントレースセンサ―の4つの判定結果


STEP2:ライントレースセンサーのデータを確認

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



写真を見てわかる通り、白と判定すると、ライントレースセンサーのLEDが青く光ります。

 

mBotプログラミング(5) センサーデータを確認しよう

図4のとおり、ライントレースセンサーの判定結果は、全部で4種類です。

 

その判定結果をmBlock5に、表示させるには、「センサー」ブロックパレットの中にある、

ブロックの横にある、チェックボックスにチェックを入れます。

 


図5 ライントレースセンサ―の値をスプライトエリアに表示


図5のように、チェックボックスにチェックを入れた後、白い紙の上にmBotを載せると、ライントレースセンサーの、両方のセンサーが「白=3」と検知して、その情報をPCに伝えて、スプライトエリアに、「3」と表示されます。

 

数字か確認できたら、片方だけ黒い線にあてたり、両方のセンサーを、黒い線の上にあててみて、数字が変化することを確認しましょう。

 

STEP3:条件分岐処理プログラムを作ろう

mBotロボットプログラミング(6) 白黒ライン判定プログラム

ライントレースセンサーが、白か、黒かを判定できることが分かったら、センサーの判定種類に合わせて、LEDを、別々の色に光らせてみましょう。

 

ライントレースセンサー使ってプログラミングをするとき、

を使う事も出来ますが、数字と、センサーの状態を頭に入れておく必要があったり、演算ブロック(次の章で習います)を使う必要があり、少し難しいので、このSTEPでは、より簡単に出来る

を使っていきます。

 

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

 

 

図6は、センサーの値、判定種類に対応するブロックの設定です。


図6 ライントレースセンサ―の値をスプライトエリアに表示

 

もし、

という条件なら、全てのLEDを青というプログラムを作るには、どうしたらよいでしょうか?

 

条件によって、mBotの動きを変えるプログラムを作るには、制御ブロックパレットの中にある、2つの条件ブロックを、使い分けます。

 

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


 例えば、もし、条件が


なら、両方のLEDを「青」という、プログラムを作る場合は、こんなプログラムを作ります。


このプログラムで、重要なのは、繰り返しの「ずっと」ブロックを使う事です。

もし、ずっとブロックを使わない場合、イベントの瞬間(うえのプログラムの場合は、スペースキーを押した瞬間)のライントレースセンサーの状態が、「両方とも黒」じゃないと、LEDが青く光りません。

 

センサーの判定種類が変わったらLEDの光り方を変えるプログラムを作りたいときは、ずっとブロックで、もし~~ならのブロックを囲ってあげる必要があります。

 

さて、前のプログラムだと、一度、両方のセンサーが黒と判定して、LEDが青く光ると、その後は、例えば、両方のセンサーが白と判定しても、LEDは青く光りっぱなしです。

 

次は、「両方のセンサーが黒と判定した時だけ」LEDを青く光らせて、そうではない時は、LEDを赤く光らせてみましょう。

 

その場合

という条件が正しくない時に、

ということをmBotにして欲しいので、このようなプログラムを作ります。

 

 

チャレンジ

ライントレースセンサーの4つの判定種類によって、LEDの光り方をかえるプログラムに挑戦してみましょう。

 

ヒントは、このプログラムを作る場合、まず、言葉にすると、どうなるかを考える事です。

 

もし、

なら、全てのLEDを青

 

でなければ、もし、

なら、全てのLEDを緑

 

でなければ、もし、

なら、全てのLEDを黄

 

でなければ、もし、

なら、全てのLEDを赤


ロボットプログラミングにチャレンジする場合は、プログラムを作る前に、ロボットにどのような動きをして欲しいかを、しっかり、考え、こうすれば動くだろうという、プログラムの処理手順(=アルゴリズム)を、予想(見通し)をしてから、作り始めることが大切です。

 

プログラミングに慣れてくると、簡単な処理なら、頭の中で、アルゴリズムが作れるようになりますが、複雑な処理を考える時や、初めのうちは、上のようにノートに書いて、考えることをお勧めします。

 

ここがポイント 条件分岐と入れ子構造(ネスト)

下は、チャレンジで、挑戦するプログラムの例です。

 


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

 

 

筆者プロフィール

荻原 裕
TINKERBASE代表
2010年よりIOTデバイス開発ベンチャー企業での海外営業・新規事業開発・大企業向けIOT事業開発アクセラレーション責任者を歴任。
2018年より出張専門プログラミングスクール「TinkerBase」運営。
国際的ロボットプログラミング大会「MakeX」
2019東京大会審判委員長。2020東京大会事務総長。
2015年経済産業省登録 中小企業診断士。著書:IOTビジネス入門&実践講座 2016年 ソシム出版