*目次 [#cc0b6d67] #contents *課題2:ライントレースロボット [#d800b9da] **車体構造 [#kf279e17] &ref(2008a/A2/課題2右/KC390015.jpg,15%);~ 基本的な構造としては4輪車であり、自動車のようなステアリングを採用している。~ ***ステアリング [#jbc10a21] &ref(2008a/A2/課題2右/KC390016.jpg,15%);~ タイヤの支点をそれぞれ2つずつ作り、一方の位置を固定、もう一方を反対側のタイヤと横ギアで連動させることによって一つのモーターで二つのタイヤを同時に同じ方向に曲げている~ モーターからの回転をそのまま伝えるのではなく下→中とモーターの下部に回転を伝え、 全体を下に持ってくることで複雑な構造を持ちながら頑丈な作りにすることができた~ ***光センサー [#z4ca016e] 光センサーは前輪の前部にそれぞれ1つずつ置くことで舵をとれるようにした。~ 二つのセンサーで黒線を挟み込み、どちらかが接するとその方向に曲がるしくみとした。 **生じた問題 [#r9a1b15d] -後輪の回転方向ではなく前輪の向きによって曲がる方向が決まり、また車体長がかなり長かったために大きく緩やかなカーブしか曲がることができなかったので、全体的に無駄な箇所を省き、車体長を短くしたところ、ある程度は小回りがきくようになった。 -前輪の前部に光センサーを設置すると、曲がったときなどに横の位置がずれて優先道路で止まることができなかったので、バンパーの根本のサイドに設置した。 *プログラミング [#x30c5dde] **スクリプト [#l364152b] #define MOTOR OUT_A+OUT_C #define THRESHOLD 40 int sc = 0; // ストップカウント int rt = 0; // 右折回数 int lt = 0 ; // 左折回数 task main (){ SetPower (OUT_A,2); SetPower (OUT_B,7); SetPower (OUT_C,2); SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_TOUCH); // 各センサーを指定 while(sc <= 5){ // 回交差点を通るまで繰り返す if(SENSOR_3 == 1){ // タッチセンサーが触れているとき OnRev(MOTOR); Wait(60); Off(MOTOR); Wait(300); } else { // タッチセンサーがオフのとき if(SENSOR_1 > THRESHOLD){ // 左が白上 if(SENSOR_2 > THRESHOLD){ // 右が白上 OnFwd(MOTOR); } else { // それ以外(右が黒線上のとき) Off(MOTOR); OnRev(OUT_B); Wait(110); OnFwd(OUT_A); rt ++; // 右折に until(SENSOR_2 > THRESHOLD); } } else { if(SENSOR_2 > THRESHOLD){ Off(MOTOR); OnFwd(OUT_B); Wait(110); OnFwd(OUT_C); lt ++; until(SENSOR_1 > THRESHOLD); }else{ if(rt > lt){ Off(MOTOR); OnRev(OUT_B); Wait(45); Off(OUT_B); Wait(40); OnFwd(MOTOR); Wait(80); Off(MOTOR); sc ++; } if(rt < lt){ Off(MOTOR); OnFwd(OUT_B); Wait(45); Off(OUT_B); Wait(40); OnFwd(MOTOR); Wait(80); Off(MOTOR); sc ++; }} } } } } **生じた問題 [#c52794ce] -最初は曲がるとき後輪を止めないプログラムだったが、そのまま黒線上を通りすぎでしまったので、ステアリングの回転時後輪を止めるプログラムとした。 -曲がるときにステアリングだけでなく、後輪の回転を逆にして曲がりやすくしようと試みたが、前輪の流れとかみ合わずうまくいかなかった。