制作時間8時間程度。 今回も缶、置かれているピンポン玉に当たらないようにできるだけスリムなロボットを作った。
工夫したところ
1、タイヤの付いたモーター2つを地面に対して横ではなく縦に並べた
2、後輪を二つ付け、安定感を生み出した
3、光センサーの位置を前ではなく後ろにした
4、ピンポン玉の出し入れ
壁にこのように少し傾斜をつけ
アームをこの様にすることにより
壁に当たっても跳ね返ることはなく
且つ持ち上げるときにピンポン玉をアームの真ん中に寄せることができる
そしてこのアームの外側に充てるとピンポン玉は紙が折れていない限りまっすぐに放出できる
はじめから受け取り二回目まではライントレースのプログラムでは受け取り、発射の向きが ばらばらになる為そこまではライントレースなしでやった。
そして受け取り二回目の後にライントレースのプログラムを入れた。
そうすることにより抜群の安定感を得ることができた。
#define BLACK1 35 #define BLACK2 40 #define WHITE1 50 #define WHITE2 60 #define SPEED1 100 #define SPEED2 25 #define SPEED3 20 #define go_forward OnFwd(OUT_BC,SPEED1); //直進 #define turn_left0 OnFwd(OUT_C,SPEED2); Float(OUT_B); //左折 #define turn_left1 OnFwd(OUT_C,SPEED2); OnRev(OUT_B,SPEED3); //左旋回(B:右モータ) #define turn_right0 Float(OUT_C); OnFwd(OUT_B,SPEED2); //右折 #define turn_right1 OnRev(OUT_C,SPEED2);OnFwd(OUT_B,SPEED2); //右旋回(C:左モータ) #define STEP 1 #define nMAX 180 //調整箇所 #define short_break Off(OUT_BC);Wait(1000); #define CROSS_TIME 160 //交差点通過時間(調整箇所) #define cross_line OnFwd(OUT_BC,SPEED1); Wait(CROSS_TIME);short_break; //交差点通過 #define CONN 1 task main () { int msg; OnFwd(OUT_B,75); OnFwd(OUT_C,75); Wait(900); OnFwd(OUT_C,75); OnRev(OUT_B,75); Wait(550); Off(OUT_BC);//ボールを受け取る位置へ while(!(msg == 11)){ReceiveRemoteNumber(MAILBOX1,true,msg);} Wait(2000); OnFwd(OUT_A,25); Wait(1000); Off(OUT_A);//ボールを受け取る(一回目) OnFwd(OUT_C,75); OnRev(OUT_B,75); Wait(500); Off(OUT_B); Off(OUT_C); OnFwd(OUT_B,75); OnFwd(OUT_C,75); Wait(720); Off(OUT_B); Off(OUT_C); OnRev(OUT_C,75); OnFwd(OUT_B,75); Wait(500); Off(OUT_B); Off(OUT_C);//ボールを発射する位置へ while(!(msg == 12)){ReceiveRemoteNumber(MAILBOX1,true,msg);} OnRev(OUT_A,25); Wait(500); Off(OUT_A); Wait(600); OnRev(OUT_A,100); Wait(1000); Off(OUT_A);//ボールを発射 OnFwd(OUT_C,75); OnRev(OUT_B,75); Wait(500); Off(OUT_B); Off(OUT_C); OnFwd(OUT_B,75); OnFwd(OUT_C,75); Wait(800); Off(OUT_B); Off(OUT_C); OnRev(OUT_C,75); OnFwd(OUT_B,75); Wait(500); Off(OUT_B); Off(OUT_C);//ボールを受け取る位置へ while(!(msg==13)){ReceiveRemoteNumber(MAILBOX1,true,msg);} Wait(2000); OnFwd(OUT_A,25); Wait(1000); Off(OUT_A);//ボールを受け取る(二回目) SetSensorLight(S3);//ここでライントレースのプログラムを挿入する int nOnline=0; long t0 = CurrentTick(); while (CurrentTick()-t0 <= 5000) { while (nOnline < nMAX) { if (SENSOR_3 < BLACK1) { turn_right1; nOnline++; } else { if (SENSOR_3 < BLACK2) { turn_right0; } else if (SENSOR_3 < WHITE1) { go_forward; } else if (SENSOR_3 < WHITE2) { turn_left0; } else { turn_left1; } nOnline=0; } Wait(STEP); } short_break; turn_left1; Wait(nMAX*STEP); cross_line; nOnline=0; } Wait(2000);//缶の近くまでライントレース OnFwd(OUT_B,75); OnRev(OUT_C,75); Wait(500); Off(OUT_BC);//缶の方向に向く OnRev(OUT_A,25); Wait(500); Off(OUT_A); Wait(400); OnRev(OUT_A,75); Wait(1000); Off(OUT_A);//缶に向かって発射 }