[[2013b/Member]] *ロボットの紹介 [#c17bbfd1] 以前のモデルでは半径が1.5cmのカーブがスムーズに曲がり切れなかったため三輪の小回りの利くモデルに改良しました。前輪の中点を軸として回転するためセンサーライトが左右にふられ線を見失ってしまう事がなくなりました。 *プログラム [#x2919ef6] 決められたコースを一周するプログラムです。 #define turn_left OnFwd(OUT_C);Off(OUT_A); #define turn_right OnFwd(OUT_A);Off(OUT_C); #define go OnFwd(OUT_AC); #define tu_le OnFwd(OUT_C);OnRev(OUT_A); #define tu_ri OnFwd(OUT_A);OnRev(OUT_C); #define black 38 //51~34 #define white 46 //交差点後13s #define conr_1 780 #define conr_2 800 #define conr_3 109 #define conr_4 #define conrring tu_le;\ Wait(32);\ Off(OUT_AC);\ go;\ Wait(40);\ conr_times=0;\ ClearTimer(0); task main() { int conr_times; conr_times=0; int order; order=0; SetSensor(SENSOR_1,SENSOR_LIGHT); ClearTimer(0); while(true) { if ((conr_times>2)&&(FastTimer(0)>conr_2)&&(order==1)) {conrring;order++;PlaySound(SOUND_CLICK);} else if((conr_times>2)&&(FastTimer(0)>conr_1)) {conrring;order++;PlaySound(SOUND_CLICK);} else if (SENSOR_1>white+1){tu_le;conr_times--;} else if(SENSOR_1<black-1){tu_ri;conr_times++;} else if(SENSOR_1>=white){turn_left;conr_times--;} else if(SENSOR_1<=black){turn_right;conr_times++;} else {go;} } } プログラムの説明 -交差点で特定の動きをさせるプログラムの作り方が思いつかなかったのですべての動作をif文に入れて()内の条件を厳しくすることで交差点でのみ特定の動きをするようにした。 -プログラムは上から順に動いていくためif文では個々の条件の順序を考える必要があったが変数orderを入れることで他のプログラムが動かないようにした。 if ((conr_times>2)&&(FastTimer(0)>conr_4)&&(order==3)) {conrring;order++;} else if((conr_times>2)&&(FastTimer(0)>conr_3)&&(order==2)) {conrring;order++;} else if((conr_times>2)&&(FastTimer(0)>conr_2)&&(order==1)) {conrring;order++;} else if((conr_times>2)&&(FastTimer(0)>conr_1)) {conrring;order++;} *課題 [#mafe0526] 今回のライントレースでは交差点を超えて一周することが出来なかった。問題としてthresholdの値がうまく決まらず一番初めの直角が曲がれなかった事が大きかった。はじめに説明書に書いてあるとうりに作った四輪のロボットでは、二つ目の交差点を横切るところまではうまくいったがロボットを二輪に改良してからセンサーライトの感受性が変わり一番初めの直角が曲がれなくなった。一時は自分の影でセンサーライトの値が変わっていることに気づかずプログラムを書き換えてしまい無駄な時間を使ってしまった。