紙の上に描いたライン上をトレースし、なおかつ3週でストップするロボット
基本的な構造としては4輪車であり、自動車のようなステアリングを採用している。
タイヤの支点をそれぞれ2つずつ作り、一方の位置を固定、もう一方を反対側のタイヤと横ギアで連動させることによって一つのモーターで二つのタイヤを同時に同じ方向に曲げている
モーターからの回転をそのまま伝えるのではなく下→中とモーターの下部に回転を伝え、 全体を下に持ってくることで複雑な構造を持ちながら頑丈な作りにすることができた
光センサーは前輪の前部にそれぞれ1つずつ置くことで舵をとれるようにした。
二つのセンサーで黒線を挟み込み、どちらかが接するとその方向に曲がるしくみとした。
#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 ++; // 右折に+1 until(SENSOR_2 > THRESHOLD); } } else { // それ以外(左が黒線上のとき) if(SENSOR_2 > THRESHOLD){//かつ右が白上 Off(MOTOR); OnFwd(OUT_B); Wait(110); OnFwd(OUT_C); lt ++; // 左折に+1 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 ++; // ストップカウントに+1 } if(rt == lt){ //もし左折が右折と同じだったら Off(MOTOR); OnFwd(OUT_B); //前輪をまっすぐに戻す Wait(45); Off(OUT_B); Wait(40); OnFwd(MOTOR); Wait(80); Off(MOTOR); sc ++; //ストップカウントに+1 }} } } } }
以下のプログラムをストップカウントが一定回数に達するまで繰り返すプログラムになっている
基本的にプログラムはELSEでつなげ、直前の状態と背反のとき次の過程に進む構造となっている。
このプログラムでは基本的に左右のカウントが1ずつ増えていくので、最初に曲がった方向が常に逆の方向よりカウントが1多い状態になる。
今回は先に右折をさせるプログラムとしてある。
交差点に止まったときは、カウントによって前輪がどちらを向いているかわかるので、タイヤをまっすぐにに戻し、直進する。
コメントお願いします
オリジナリティがある良いレポートです。 3周できる様にプログラムを組んでみてください。