親子で学ぶロボットプログラミング講座の第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年 ソシム出版