「小学生ロボコン自律型キット A.I.ロボット」をプログラミングで制御しよう
(プログラミング編)
サブルーチンの作り方
練習編で作った前進、後進、時計回転、反時計回転、ブレーキのプログラムをわかりやすく
一つのタイルにまとめます。このプログラムのまとまりをサブルーチンと言います。
前進のプログラムでやり方を説明します。
手順①
右の写真は練習ページで作った前進のプログラムです。これを用意します。この6つのタイルをわかりやすく1つのタイルにします。
手順②
ブロック定義からブロックを作るを選択します。タイルを「前進」という名前に変更し、OKを押します。
手順③
できたタイルを前進のプログラムの1番上につけてサブルーチンタイルの完成です。
定義したサブルーチンはブロック定義のメニューに「前進」というタイルになります。写真のようにプログラムに入れて使うことができます。
また、定義したタイルは手順③で作ったプログラムのかたまりがないと機能しないので、消さずにメインのプログラムの横に置いておきましょう。
前進以外の4つのプログラムも同じ手順で作っておきましょう。
以下はサブルーチンの一覧です。これができたらサブルーチンの作成は完了です。
ライントレース
ライントレースとはロボットがセンサーを使い、床に描かれた線に沿って走行することです。上は競技のサンプル動画です。このロボットのようにライントレースを行うにはどのようにすればよいのか説明していきます。
1. センサーの設定
ロボットの本体の前がわの左右に取り付けた二つのセンサーがあります。このセンサーは線を読み取るために使います。読み取った時の条件の違いに合わせてロボットの動作が変えられるようなプログラムを作成していきます。
③で作成したサブルーチンのファイルを開きます。次に変数から「変数を作る」を選択します。左右のセンサーとしきい値「a」の変数を定義します。
※しきい値とは
プログラム上でセンサーが読み取った値と自分で決めた値(しきい値)を比べてロボットに送る命令を条件ごとに変えることができます。
例 センサーの値が50を超えたら前進、50以下だったら後進 (この場合50がしきい値)
これで、右ラインセンサーが読み取った値をわかりやすく右センサーという名前を付けました。
残りの左ラインセンサーの読み取った値「左センサー」としきい値である「a」をこれと同じように作りましょう。
このように3つの変数を作ったら終了です。
2. センサーのプログラム
①番の説明
センサーシールドの左右のセンサーがつながっているピンの場所を確認してみましょう。左のセンサーは1番、右のセンサーは0番につながっています。これに対応するように左ラインセンサーには1、右ラインセンサーは0を入れましょう。
aはセンサーが見ているのは黒い線かそれ以外かが分かるようにするための基準となる数値です。
このセンサーは暗い色だと数値が大きく、明るい色だと数値が小さくなります。
②番の説明
センサーの読み取り方のパターンを考えてプログラムを作っていきましょう。
1番には何が入るのか
条件は「左は床、右は線を見ているとき」となっています。
つまり、上の図のような状況であるということが分かります。このような時ロボットは反時計
回転をすれば線の中心に戻りますよね。
→ 反時計回転のタイルを1番には入れてみましょう。
2番には何が入るのか
条件は「左は床、右は線を見ているとき」となっています。
つまり、上の図のような状況であるということが分かります。このような時ロボットは時計回転をすれば線の中心に戻りますよね。
→ 時計回転のタイルを2番には入れてみましょう。
3番には何が入るのか
条件は「左も右も床を見ているとき」となっています。
つまり、上の図のような状況であるということが分かります。このような時ロボットはライン
上を走行できているため前進したほうがよいでしょう。
→ 前進のタイルを3番には入れてみましょう。
4番には何が入るのか
条件は「左も右も黒い床を見ているとき」となっています。
この条件は後で使用するので何も入れないでおきましょう。
ライントレースはこのようなプログラムで行うことができます。ロボットをPCと接続してダウンロードしてみましょう。
ボールを拾う
1. サーボモーターの動かし方
以下のサーボモーターの動作を確認するためのプログラムを作成し、動作を確認してみまし
ょう。
ホールドの中にボールが入った時、センサーが反応して持ち上がればサーボモーターの動作
確認は終了です。
サーボモーターはアームの付け方によって0度の位置が変わってきます。もし、0度のときに
アームが下を向いていなかったらアームを一度取り外して付け直しましょう。
2. ピンポン玉エリアに入ったら
ピンポン玉を持つにはどうしたらよいでしょうか。ロボットの動作をどのようにしたらよいか
考えます。
上の写真のように動作したら、簡単にピンポン玉エリアをクリアできるのではないでしょう
か。具体的に説明していきます。
①のとき
このエリアに入ると、床の色が暗くなるため、これから作るプログラムはライントレースのプログラムで残しておいた最後の枠の4番に当てはまることが分かります。
②のとき
ピンポン玉はライン上の真正面に置いてあるので前センサーがボールに反応するまで前進させればよいでしょう。センサーが反応したらアームでピンポン玉を持ち上げます。
③のとき
ロボットの向きを180°変えるために、床が暗いピンポン玉エリアを後進で出ます。
④のとき
スタート地点に帰るために180°回転します。そのままライントレースを再開してスタート地点に
戻ります。
これらの動作をプログラムに表すとしたのようになります。
このプログラムは先ほどの図の動作をプログラムにしたものです。一つ一つどの動作をしているか把握しておきましょう。
このプログラムには反時計信地回転というタイルが含まれています。これは左のモーターを停止して、右のモーターを前方向に回転させることで車体が左タイヤを中心に回転するというタイルです。
また、このプログラムのように動作と動作の間に短時間のブレーキを挟むことで、より正確にロボットを動かすことができます。
※このプログラムには動作を時間を使って制御していますが、これは、電池の残量、コートの状況などによって変わるため、自分で調整をしてみてください。
本番プログラムの作成
1.プログラムの整理
ロボットがピンポン玉をコースを完走するためのプログラムを順に整理していきましょう。
動作手順① ライントレースをしてピンポン玉の地点まで走る
動作手順② ピンポン玉エリアまで来たらボールを取る
動作手順③ ライントレースをしてスタートの地点まで走る。
この3つの手順は、これまでの手順で作ってきたので、あとは組み合わせるだけです。
メインのプログラムはこれが基準となります。
しかし、これで思い通りにロボットが動くことはほぼないでしょう。
ここからは自分で値の調整や車体の改造などを行って、より早くピンポン玉を取ってくることができるロボットを作ってみましょう!!