[[2012b/Member]] *メンバー紹介 [#l64445ef] -tada0 工学部機械システム工学科。ロボは全て彼が設計しました。 -KARINA 工学部土木工学科。楽天的思考でロボゼミを選択したポンコツ。機シスの相方へのハンデとして受講を許可されている。 *ロボットの説明 [#gc94bd1c] &ref(2012b/Member/KARINA/Mission1/7171.jpg,100%,ロボ); ロボの前部に取り付けられた装置でピンポン玉をはさみます。パクと呼びます。 *プログラムの説明[#ff502915] 黒線をなぞるプログラム等P30から応用しました。土木工学科が書いたと思ってハードルを下げて読んでいただけると幸です。 便宜上ロボの前部に取り付けられたピンポン玉を挟む装置をパクと表記します。 #define THRESHOLD 43 //黒線の上51、白い場所の上37より設定しました #define HIPOWER 7 //強く回す #define LOWPOWER 2 //弱く回す #define set_power_H SetPower(OUT_AC,HIPOWER); //モーターACを強く回す #define set_power_L SetPower(OUT_AC,LOWPOWER); //モーターACを弱く回す #define go_forward set_power_H; OnFwd(OUT_AC); //前進 #define turn_left1 set_power_L;OnFwd(OUT_C); OnRev(OUT_A); //左折 #define turn_left0 set_power_L;OnFwd(OUT_A); Off(OUT_C); //弱く左折 #define turn_right0 set_power_L;OnFwd(OUT_A); Off(OUT_C); //弱く右折 #define turn_right1 set_power_L;OnFwd(OUT_A); OnRev(OUT_C); //右折 #define STEP 1 //STEPごとにライトセンサーが判定をだす #define set_power_L_p SetPower(OUT_B,1); //パクが脱輪しないようにモーターを弱くする #define pakum(t) set_power_L_p;OnFwd(OUT_B);Wait(t);Off(OUT_B); //パクがピンポン玉を挟む #define pakuu(t) set_power_L_p;OnRev(OUT_B);Wait(t);Off(OUT_B); //パクがピンポン玉を離す #define go(t) OnFwd(OUT_AC);Wait(t); //前進 #define back(t) OnRev(OUT_AC);Wait(t); //後退 #define left(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t); //左折 #define right(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t); //右折 #define MUSHI 30 //タイマー1,2,3でライトセンサーが角だと判断する秒数 task main() { pakuu(70); //ピンポン玉をはさみ go(50); //黒線を越えます right(20); //進行方向に向きます &ref(2012b/Member/KARINA/Mission1/1.jpg,100%,1); SetSensor(SENSOR_2,SENSOR_LIGHT); ClearTimer(0); //このタイマーで場所を区切ります int n=0; //黒線を無視した回数を数えます while(FastTimer(0) <= 1400){ //14秒以下は下図のように角を無視しない if(SENSOR_2 < THRESHOLD -3) { turn_left1; } else if (SENSOR_2 < THRESHOLD -1) { turn_left0; } else if (SENSOR_2 < THRESHOLD +2) { go_forward; } else if (SENSOR_2 < THRESHOLD +5) { turn_right0; } else { turn_right1; } Wait(STEP); } &ref(2012b/Member/KARINA/Mission1/2.jpg,100%,2); while(1400 <= FastTimer(0) <= 2000){ //14秒から20秒の間は下図のように黒線を乗り越える if(SENSOR_2 < THRESHOLD -3) { turn_left1; } else if (SENSOR_2 < THRESHOLD -1) { turn_left0;ClearTimer(1); } else if (SENSOR_2 < THRESHOLD +2) { go_forward;ClearTimer(1); } else if (SENSOR_2 < THRESHOLD +5) { turn_right0;ClearTimer(1); } else { turn_right1;ClearTimer(1); } Wait(STEP); if((FastTimer(1) >= MUSHI)&&(n<1)){ //n<1より乗り越えた後、角の判定がでても乗り越えないようにする go(20); right(5) PlaySound(SOUND_UP); //乗り越えたら音を鳴らす n++; //乗り越えた回数を数える } } &ref(2012b/Member/KARINA/Mission1/3.jpg,100%,3); while(2000 <= FastTimer(0) <= 3000){//20秒から30秒の間は下図のように角をやり過ごす if(SENSOR_2 < THRESHOLD -3) { turn_left1; } else if (SENSOR_2 < THRESHOLD -1) { turn_left0;ClearTimer(2); } else if (SENSOR_2 < THRESHOLD +2) { go_forward;ClearTimer(2); } else if (SENSOR_2 < THRESHOLD +5) { turn_right0;ClearTimer(2); } else { turn_right1;ClearTimer(2); } Wait(STEP); if((FastTimer(2) >= MUSHI)&&(2>n>=1)){ //角をやりすごした後、角の判定がでないようにする left(50); PlaySound(SOUND_UP); //音を鳴らす n++; //やりすごした回数を数える } &ref(2012b/Member/KARINA/Mission1/4.jpg,100%,4); while(3000 <= FastTimer(0)){ //30秒以上のとき角にぶつかるとシュートする if(SENSOR_2 < THRESHOLD -3) { turn_left1; } else if (SENSOR_2 < THRESHOLD -1) { turn_left0;ClearTimer(3); } else if (SENSOR_2 < THRESHOLD +2) { go_forward;ClearTimer(3); } else if (SENSOR_2 < THRESHOLD +5) { turn_right0;ClearTimer(3); } else { turn_right1;ClearTimer(3); } Wait(STEP); if((FastTimer(3) >= MUSHI)&&(n>=2)){ right(20); //角度の調整 pakum(100); //パクを開く back(80); //後退 go(80); //シュート!!!!!!!!!!!!!!!!!! } } } } &ref(2012b/Member/KARINA/Mission1/5.jpg,100%,5); *感想 [#reb9f1b2] 黒線が薄くなっていくのにはまいったが、あまりに失敗しすぎて楽しかった。 ( ^o^)<ロボティクス楽しいなー!