2016.07.15Scratch で始める小学生からのプログラミング
スクラッチで始めるロボットプログラミング:ライントレースやってみよう
こんにちは。前回は、ブザーを使って音楽を出す方法について解説しました。今回の内容は、モーターを使って車を走らせてみることにします。単に走らせるだけだとあまり面白くないので、ロボットプログラミングの定番である、ライントレースをやってみたいと思います。小学生でもできそうな、ということで、あまり複雑なアルゴリズムではなく、単純なものを採用します。いわゆる、On/Off 制御をベースとした方法です。
1.基本的な考え方
まず、ライントレースに関しての基本的な考え方を説明します。その名前の通り、ライン(線)をトレース(なぞる)動きをします。線を機械で認識する必要がありますが、これを行うのがフォトリフクレクタというセンサーです。このフォトリフレクタに関しては後で説明しますが、光の反射を用いて認識することができるセンサーです。このセンサーのデータから次の動きを決めて、モーターを動かします。右、左に曲がることができるようにモーターを2つ使って動かします。曲がる時には、片方のタイヤを逆回転にすることでその方向に曲がることができます。次以降で、実際に作っていきましょう。
2.組み立て
それでは、組み立てます。まず、図の1に示す部品を用意します。DCモーター2台、フォトリフクレクタ2個、タイヤ2、ブロック、電源、コントローラです。
次に、2に描かれているようにブロックを差し込みます。そして、3、4に示しているような形でブロックを差し込みます。
次に、DCモーターを次の図のように取り付け、それぞれタイヤを片方ずつつけます。
2台のモーターをコントローラにつなぎます。このとき、タイヤを前にした時に右側がM1、左側がM2になるようにコネクタにつなぎます。そして、次は前方にフォトリフクレクタをつなぎます。
最後にフォトリフクレクタをセンサーポートのA2、A3に接続します。そして電源をつないで終了です。
3.フォトリフクレクタはどのような動き?
今回の説明のメインとなるのがフォトリフクレクタです。これの動作を説明します。
図の左にあるように、フォトリフクレクタには光を発信する発光部と、光を受信する受光部があります。発光部は赤外線を発射し、その反射してきた光を受光部で受診することで識別します。図の右側に示すように、反射する時に光が当たっている物体が白いか、黒いかで反射する度合いが変わってくることを利用しています。昔、小学校の理科の授業の中で、虫眼鏡を使って太陽光を集めて、紙を燃やす実験をしたかと思いますが、それを思い出していただければ理解できるかと思います。燃えやすい紙は黒っぽい紙だったはずです。黒は光を吸収し、白は逆に反射します。この性質を使うことで、黒い部分をセンサーで判断することができるのです。
4.DCモーターを制御してみよう
では、このフォトリフクレクタを二つ使って、線を識別できるとして、どのようにモーターを制御したらいいのでしょうか。次のように考えます。
4.1. まっすぐと判定する時
図のように、線をまたいだ状態になっているときは、まっすぐ進んでいると判断して、モーターをまっすぐ進めます。
4.2. 左に曲がる時
図のように右のほうに寄った場合、左側のフォトリフクレクタが黒い線の上にのります。そうすると、左のフォトリフクレクタの反応が鈍くなるはずです。この状況になった時は再度線をまたぐように左に曲げます。
4.3 右に曲がる時
逆に左に寄った時は、右側のフォトリフクレクタが線の上にのります。この状態の場合、右のフォトリフレクタは反応が鈍くなるはずです。こうなった場合は、右に曲がることで元の状態に戻ります。
4.4 センサーの値を調べる
実際に作る前に、今のことが具体的にどのような形でセンサーの値になって現れるのかを確認します。
まずは、入出力設定で接続したフォトリフレクタが動作するように設定を変更します。
次にテストモードを開始します。このテストモードを使うことで実際のセンサーの値がどのようになっているかをその場で確認することができます。実際に確認した時の写真とセンサー値をそれぞれ図に示します。最初のは線をまたいでいる時です。
次は、右のセンサーが線の上に乗っている時です。右のセンサーであるA2の値が小さくなっているのがわかります。
そして最後は、左のセンサーが線の上に乗っている時です。左のセンサーである、A3の値が小さくなっているのがわかります。
以上のように、センサーを使って線をまたいでいるのか、どちらかによっているのかを知ることができることはわかっていただけたでしょうか。これを使って、モーターを制御していきます。
4.5 実際に作ってみる
この方針を元に実際にプログラムを作ってみましょう。
まずは関数を作り、forward(まっすぐ)、turnleft(左に曲がる)、turnright(右に曲がる)を用意します。まっすぐの時は、DCモーターを両方とも正転、左に曲がる時は、M1を正転、M2を逆転、右に曲がる時は、M1を逆転、M2を正転とします。
そして、先ほど調べたフォトリフレクタのセンサーの値を使って条件式を作ります。先ほどのセンサーの値を見る限りで次のようになります。
- 白いところの時は、50より大きい値
- 黒いところの時は、20より小さい値
ただ、これは環境によって変わる可能性があるので余裕を見て次の値にしました。
- 白のところの時は、40より大きい:[センサー] > 40
- 黒のところの時は、40より小さい:[センサー] < 40
そのため、実際の条件式は次のようになります。
- まっすぐ(線をまたいでいる):両方とも白(A2 > 40 かつ A3 > 40)
- 左に曲がる:右(A2)が白(A2 > 40)かつ、左(A3)が黒(A3 < 40)
- 右に曲がる:右(A2)が黒(A2 < 40)かつ、左(A3)が白(A3 > 40)
ここで、「かつ」(AND)というのがでますが、これは以前の記事でも触れたように、論理式を作るための演算の一つで、二つの条件が両方とも成り立つ必要がある時を意味します。例えば、弟は、「男」かつ「年が下」の兄弟ですといった言い方が成り立ちます。
まっすぐすすむを書くと次のようになります。
同様に条件式を変えてそれぞれ変えることで最終的には次のようなプログラムを作ります。
実際に動かしてみた時の動画を御覧ください。センサーで線を認識してトレースしているのがわかると思います。
5.まとめ
今回は、DCモーターとフォトリフレクタを使ったライントレースのプログラムに関して紹介しました。センサーとアクチュエータを組み合わせて動きを作ることで自動的に動作させることができるのがわかっていただけたのではないでしょうか。次回は違うセンサーを使ってDCモーターを制御してみます。お楽しみに。
東京都文京区小石川で小学生、中学生、高校生を対象としたプログラミング&ロボット教室を開校しています。コース概要のページで説明しております。創造性や協調性などこれからの時代に必要となる素養を育てるコースです。ご興味ありましたらぜひお問い合わせください。
また、夏休みの企画として、サマースクールを実施します。ここで取り上げているスクラッチやロボットプログラミングを体験できる内容となっています。詳細はこちらでご確認ください。ご参加お待ちしております。
お問い合わせはこちら!
]]>