◎前回からの改良点&工夫したところ
コースはスタートをしたらまず1つめのロボットが球を取りに行き2つめのロボにパス、さらに2つめのロボは1にパス、そしてもう一度2にパスをしてシュートを決めるというものです。 今回は球のパスがあるので電池の残量などにより進む位置が変わってしまうと正確なパスができなくなってしまうのでモーターを回す角度を決めるプログラミングをすることで、できる限り正確に決まった位置にパスをできるようにしました。またBluetoothをうまく使うことで、お互いが決めておいた位置についたらパスをするようにし、パスの成功率を向上させました。 またお互いのロボットを全く同じ形にさせることで、お互いのパスの方法などを同じにして安定性を向上させました。
#define zone1 37 #define zone2 45 #define zone3 60 #define zone4 65 #define SPEED 45 #define LOWSPEED SPEED*0.625 #define mae OnFwd(OUT_BC,SPEED*0.8); #define STEP 1 #define nMAX 100 #define SIGNAL1 11 #define SIGNAL2 12 #define CONN 1 int p=0; int n=0; int m=0; int msg=0;
sub migigawa(int x) //交差点がx回あるまでトレース { while(m < x) { while(p < nMAX && m<x) { if (SENSOR_4 < zone1) { OnFwd(OUT_B,SPEED);OnRev(OUT_C,LOWSPEED); p++; } else { if (SENSOR_4 < zone2) { OnFwd(OUT_B,SPEED);Off(OUT_C); } else if (SENSOR_4 < zone3) { mae; } else if (SENSOR_4 < zone4) { OnFwd(OUT_C,SPEED);Off(OUT_B); } else { OnFwd(OUT_C,SPEED);OnRev(OUT_B,LOWSPEED); } p=0; } Wait(STEP); } OnFwd(OUT_C,SPEED);OnRev(OUT_B,LOWSPEED); Wait(nMAX*STEP); OnFwd(OUT_BC,SPEED);Wait(300); p=0; m++; } m=0; }
sub hidarigawa(int x) //交差点がx回あるまでトレース { while(m < x) { while(p < nMAX && m<x) { if (SENSOR_4 < zone1) { OnFwd(OUT_C,SPEED);Off(OUT_B); p++; } else { if (SENSOR_4 < zone2) { OnFwd(OUT_C,SPEED);OnRev(OUT_B,LOWSPEED); } else if (SENSOR_4 < zone3) { mae; } else if (SENSOR_4 < zone4) { OnFwd(OUT_B,SPEED);Off(OUT_C); } else { OnFwd(OUT_B,SPEED);OnRev(OUT_C,LOWSPEED); } p=0; } Wait(STEP); } OnFwd(OUT_B,SPEED);OnRev(OUT_C,LOWSPEED); Wait(nMAX*STEP); OnFwd(OUT_BC,SPEED);Wait(300); p=0; m++; } m=0; }
task main () { SetSensorLight(S4); //球をキャッチしてパスするまで Wait(2000); migigawa(2); Off(OUT_BC);Wait(1000); RotateMotor(OUT_C,-SPEED,200);RotateMotor(OUT_B,SPEED,120);Off(OUT_BC); mae;OnRev(OUT_A,20);Wait(1500);Off(OUT_A); mae;until(SENSOR_4 < 50);Off(OUT_BC); OnRev(OUT_BC,SPEED);Wait(500);OnRev(OUT_BC,SPEED);until(SENSOR_4 < 50); OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED);Wait(500); OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED);until(SENSOR_4 < 50); hidarigawa(1); Off(OUT_BC);Wait(1000);RotateMotor(OUT_BC,-SPEED,430);Wait(1000); RotateMotor(OUT_B,-SPEED,300);RotateMotor(OUT_C,SPEED,100);Off(OUT_BC); Wait(1000);SendRemoteNumber(CONN,MAILBOX1,SIGNAL1); OnFwd(OUT_BC,SPEED);RotateMotor(OUT_A,100,400);Off(OUT_ABC);
RotateMotor(OUT_BC,-SPEED,200); //球をもらうまで OnRev(OUT_BC,SPEED);until(SENSOR_4 < 50);RotateMotor(OUT_BC,SPEED,50); OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED);until(SENSOR_4 < 50); Off(OUT_BC);Wait(5000); hidarigawa(1); RotateMotor(OUT_BC,SPEED,100);Off(OUT_BC); RotateMotor(OUT_BC,-SPEED,10);RotateMotor(OUT_C,SPEED,550);Off(OUT_BC); SendRemoteNumber(CONN,MAILBOX2,SIGNAL2); Wait(500); OnRev(OUT_A,20);Wait(1500);Off(OUT_A);
OnRev(OUT_BC,SPEED);until(SENSOR_4 < 50);Off(OUT_BC);RotateMotor(OUT_BC,SPEED,80); //もう一度相手にパスするまで OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED);until(SENSOR_4 < 50); Off(OUT_BC);Wait(7000); hidarigawa(1); RotateMotor(OUT_BC,SPEED,50);Off(OUT_BC); RotateMotor(OUT_B,-SPEED,400);Off(OUT_B);RotateMotor(OUT_C,-SPEED,20); SendRemoteNumber(CONN,MAILBOX3,SIGNAL1); OnFwd(OUT_BC,SPEED);RotateMotor(OUT_A,100,400);Off(OUT_ABC); RotateMotor(OUT_BC,-SPEED,50);Off(OUT_BC); }
今回は以前よりもかなり難しく、複雑なプログラミングとロボの構成が必要でしたが、チームのみんなの協力によってなんとか完成することができてよかったです。 以前の反省点であるロボの安定性と電池の残量の問題も解決できました。 とても大変でしたが楽しく充実した時間がみんなとおくることができたと思います。 ただ最後の発表にはみんなが集まることができなかったので少し残念でした。