#contents *課題2[#p5eb685a] 指定の道をあらかじめ模造紙に描き、第1コース・第2コースそれぞれの道順に沿って製作したロボットを動かす。また、その途中に、350mlの空き缶を指定の位置から、指定の位置に運ぶ。 *コース[#l49cfc9f] 第2コース #ref(2018a-mission2.png) |1Aをスタート| |2Bを右折| |3Jで一時停止の後、Yの空き缶をキャッチしてJに戻る| |4JからKに向かい、Kを直進| |5Lを直進| |6Iを左折| |7Hで一時停止の後、左折| |8Gで一時停止の後、右折| |9Fで一時停止の後、右折| |10Eを直進| |11Dで一時停止の後、空き缶をXに置いてDに戻り、Cに向かう| |12Cで一時停止の後、直進| |13Bを直進| |14Aで停止| |(一時停止の指定がある場所は、1秒間停止すること)| *ロボットの説明[#fbbc27ea] **車輪部分[#k29f6177] 課題1と同様、シンプルな3輪構造で、前輪が2輪、後輪が1輪となっている。前輪の2輪が駆動し、後輪の2輪が自由に回転する。 **センサーライト部分 [#zcdc4beb] 2つの車輪ほぼ真ん中前方に、確実に明るさを読み取れるような高さに設置した。 #ref(IMG_1298.JPG) **アーム[#y0f7317f] モータBに歯車を直接取り付け、 #ref(IMG_1300.JPG) ***缶をつかむとき [#u0daf4ae] *プログラミングにあたっての準備[#heeafd24] **色分けするプログラム[#q1542e47] ***白 [#i87cddeb] #define DEEPWHITE SENSOR_1 > 48 ***少し白 [#g54731d9] #define WHITE SENSOR_1 > 44 ***黒 [#t0ece9d1] #define BLACK SENSOR_1 < 40 ***少し黒 [#hdece4ff] #define DEEPBLACK SENSOR_1 < 36 **指定した方向に一瞬動くプログラム[#k96c0c5c] ***右[#gabb9e62] #define RIGHT OnFwd(OUT_A,30);OnRev(OUT_C,30);Wait(1);Off(OUT_AC); ***少し右[#f2a3eb93] #define BIT_RIGHT OnFwd(OUT_A,30);OnRev(OUT_C,10);Wait(1);Off(OUT_AC); ***左[#yf200910] #define LEFT OnFwd(OUT_C,30);OnRev(OUT_A,30);Wait(1);Off(OUT_AC); ***少し左[#m9a0ad8a] #define BIT_LEFT OnFwd(OUT_C,30);OnRev(OUT_A,10);Wait(1);Off(OUT_AC); ***直線方向[#d825c59f] #define STRAGHT OnFwd(OUT_AC,30);Wait(1);Off(OUT_AC); #ref(sirokuro.png); ※上2つのプログラムを組み合わせて図のように動作するようにした。 **左が白、右が黒の境界をたどるプログラム [#t5d828c2] #define LEFT_LINE if(DEEPWHITE){RIGHT DAI -= 3;} else if(WHITE){BIT_RIGHT DAI -= 1;} else if(DEEPBLACK){LEFT DAI += 3;} else if(BLACK){BIT_LEFT DAI += 1;} else {STRAGHT DAI *= 0;} **左が黒、右が白の境界をたどるプログラム [#t115172a] #define RIGHT_LINE if(DEEPWHITE){LEFT DAI -= 3;} else if(WHITE){BIT_LEFT DAI -= 1;} else if(DEEPBACK){RIGHT DAI += 3;} else if(BLACK){BIT_RIGHT DAI += 1;} else {STRAGHT DAI *= 0;} **車輪を止めるプログラム [#odb449aa] #define OFF Off(OUT_AC); **1秒間止まるプログラム [#d4070551] #define WAIT Wait(1000); **缶を掴むプログラム [#x1b04c76] #define CATCH OnFwd(OUT_AC,20);Wait(300);OFF OnFwd(OUT_B,30);Wait(300);Off(OUT_B);OnRev(OUT_AC,20);Wait(300);OFF **缶を離すプログラム [#x88c9fb1] #define RELEASE OnFwd(OUT_B,30);Wait(1000);Off(OUT_B);Wait(500);OnRev(OUT_B,30);Wait(500);Off(OUT_B); **ある関数DAIが150以下であることを示すプログラム [#jc6361cb] #define KANSU DAI < 150 **その場で右に旋回するプログラム [#rf6d05fd] #define SIMPLE_RIGHT OnFwd(OUT_A,40);OnRev(OUT_C,40); **その場で左に旋回するプログラム [#qd7894a9] #define SIMPLE_LEFT OnFwd(OUT_C,40);OnRev(OUT_A,40); **交差点で使用するプログラム [#j9565418] ***交差点で右に曲がるプログラム [#c3db0d7e] #define GO_STRAIGHT OnFwd(OUT_A,40);OnFwd(OUT_C,40);Wait(190);OFF #define MOVE_RIGHT SIMPLE_RIGHT Wait(750); OFF ***交差点で左に曲がるプログラム [#p5185051] #define GO_STRAIGHT OnFwd(OUT_A,40);OnFwd(OUT_C,40);Wait(190);OFF #define MOVE_LEFT SIMPLE_LEFT Wait(750); OFF *プログラム本編 [#d73f6990] task main() { SetSensorLight(S1); int DAI=0; while(KANSU){ RIGHT_LINE } OFF DAI *= 0; PlaySound(SOUND_DOWN); GO_STRAIGHT MOVE_RIGHT while(KANSU){ RIGHT_LINE } OFF DAI *= 0; PlaySound(SOUND_UP); WAIT CATCH OnFwd(OUT_B,10); GO_STRAIGHT MOVE_LEFT while(BLACK){ OnFwd(OUT_AC,20); } OFF repeat(2){ while(KANSU){ LEFT_LINE } OFF DAI *= 0; SIMPLE_RIGHT Wait(50); OFF while(BLACK){ OnFwd(OUT_AC,30); } OFF } while(KANSU){ LEFT_LINE } OFF PlaySound(SOUND_UP); WAIT DAI *= 0; OnFwd(OUT_AC,30); Wait(50); OFF SIMPLE_LEFT Wait(450); OFF while(KANSU){ LEFT_LINE } OFF DAI *= 0; while(BLACK){ OnFwd(OUT_A,30);OnFwd(OUT_C,30); } OFF while(KANSU){ RIGHT_LINE } OFF DAI *= 0; while(BLACK){ OnFwd(OUT_A,30);OnFwd(OUT_C,30); } OFF while(KANSU){ LEFT_LINE } OFF DAI *= 0; GO_STRAIGHT MOVE_LEFT while(KANSU){ LEFT_LINE } OFF WAIT DAI *= 0; GO_STRAIGHT MOVE_RIGHT while(BLACK){ OnFwd(OUT_A,30);OnFwd(OUT_C,30); } OFF while(KANSU){ RIGHT_LINE } OFF WAIT DAI *= 0; PlaySound(SOUND_UP); GO_STRAIGHT MOVE_RIGHT while(KANSU){ RIGHT_LINE } OFF SIMPLE_RIGHT Wait(50); OFF while(BLACK){ OnFwd(OUT_AC,30); } OFF while(KANSU){ RIGHT_LINE } OFF Off(OUT_B); WAIT RELEASE OnFwd(OUT_AC,30); Wait(80); OFF SIMPLE_RIGHT Wait(500); OFF while(KANSU){ RIGHT_LINE } OFF DAI *= 0; GO_STRAIGHT MOVE_RIGHT while(KANSU){ RIGHT_LINE } OFF WAIT DAI *= 0; PlaySound(SOUND_UP); while(BLACK){ OnFwd(OUT_A,30);OnFwd(OUT_C,29); } OFF while(KANSU){ RIGHT_LINE } OFF DAI *= 0; PlaySound(SOUND_FAST_UP); } *課題2を終えて [#oe801b50] **苦労した点 [#p3e849d8] ** [#u95b7b61]