[[2011a]] #contents *チームメンバー [#qe9c7412] TAMA みや *課題内容 [#vc9baee3] **黒い線をライントレースするロボットを作る [#o41d0829] -周回コースの条件 -交差点が2ヶ所ある -ロータリーが1つある -ニアピンカーブを1つ -スタートとゴールを作る -直角な曲がる道を作る -直角に曲がる道を通らないとか道を作る -ペアの同士で逆回りと近道か直角で分ける *プログラム [#o5c2dd11] **直角 [#ocd3846d] #define THRESHOLD 45 #define go OnFwd(OUT_A+OUT_C); //前進 #define L OnFwd(OUT_C);Off(OUT_A); //左 #define R OnFwd(OUT_A);Off(OUT_C); //右 task main() { SetSensor(SENSOR_1, SENSOR_LIGHT); SetSensor(SENSOR_3, SENSOR_LIGHT); int cross = 0; //両方黒になった回数をカウントする変数 // while(cross!=2) //黒黒が2回来たら止める { if(SENSOR_1 < THRESHOLD) {L;} //左側のセンサーが黒になったら左に曲がる if(SENSOR_3 < THRESHOLD) {R;} //右側のセンサーが黒になったら右に曲がる if(SENSOR_1 < THRESHOLD && SENSOR_3 < THRESHOLD) {go;cross++;} //両方黒になったらcross=cross+1 直進 if(SENSOR_1 > THRESHOLD && SENSOR_3 > THRESHOLD) {go;} //両方白になったら直進 } Off(OUT_A+OUT_C); PlaySound(SOUND_UP); cross = 0; // ロータリー開始 while(cross!=1) //黒黒が1回来たら止める { if(SENSOR_1 < THRESHOLD) {L;}//左側のセンサーが黒になったら左に曲がる if(SENSOR_3 < THRESHOLD) {R;}//右側のセンサーが黒になったら右に曲がる if(SENSOR_1 < THRESHOLD && SENSOR_3 < THRESHOLD) {OnFwd(OUT_A);Wait(90);cross++;}//cross=cross+1 if(SENSOR_1 > THRESHOLD && SENSOR_3 > THRESHOLD) {go;} } Off(OUT_A+OUT_C); PlaySound(SOUND_UP); cross = 0; // while(cross!=1) //黒黒が1回来たら止める { if(SENSOR_1 < THRESHOLD) {L;}//左側のセンサーが黒になったら左に曲がる if(SENSOR_3 < THRESHOLD) {R;}//右側のセンサーが黒になったら右に曲がる if(SENSOR_1 < THRESHOLD && SENSOR_3 < THRESHOLD) {OnFwd(OUT_A);Wait(90);cross++;}//cross=cross+1 if(SENSOR_1 > THRESHOLD && SENSOR_3 > THRESHOLD) {go;} } Off(OUT_A+OUT_C); PlaySound(SOUND_UP); cross = 0; // while(cross!=1) //黒黒が1回来たら止める { if(SENSOR_1 < THRESHOLD) {L;}//左側のセンサーが黒になったら左に曲がる if(SENSOR_3 < THRESHOLD) {R;}//右側のセンサーが黒になったら右に曲がる if(SENSOR_1 < THRESHOLD && SENSOR_3 < THRESHOLD) {OnFwd(OUT_A);Wait(90);cross++;}//cross=cross+1 if(SENSOR_1 > THRESHOLD && SENSOR_3 > THRESHOLD) {go;} } Off(OUT_A+OUT_C); PlaySound(SOUND_UP); cross = 0; //ロータリー終了 ClearTimer(0); while(Timer(0) <= 125) { if(SENSOR_1 < THRESHOLD) {L;}//左側のセンサーが黒になったら左に曲がる if(SENSOR_3 < THRESHOLD) {R;}//右側のセンサーが黒になったら右に曲がる if(SENSOR_1 < THRESHOLD && SENSOR_3 < THRESHOLD) {go;} if(SENSOR_1 > THRESHOLD && SENSOR_3 > THRESHOLD) {go;} } OnFwd(OUT_C);Off(OUT_A);Wait(150); Off(OUT_A+OUT_C); PlaySound(SOUND_UP); //交差点〜直角まで cross = 0; // ロータリー開始 while(cross!=1) //黒黒が1回来たら止める { if(SENSOR_1 < THRESHOLD) {L;}//左側のセンサーが黒になったら左に曲がる if(SENSOR_3 < THRESHOLD) {R;}//右側のセンサーが黒になったら右に曲がる if(SENSOR_1 < THRESHOLD && SENSOR_3 < THRESHOLD) {OnFwd(OUT_A);Wait(90);cross++;}//cross=cross+1 if(SENSOR_1 > THRESHOLD && SENSOR_3 > THRESHOLD) {go;} } Off(OUT_A+OUT_C); PlaySound(SOUND_UP); cross = 0; // while(cross!=1) //黒黒が1回来たら止める { if(SENSOR_1 < THRESHOLD) {L;}//左側のセンサーが黒になったら左に曲がる if(SENSOR_3 < THRESHOLD) {R;}//右側のセンサーが黒になったら右に曲がる if(SENSOR_1 < THRESHOLD && SENSOR_3 < THRESHOLD) {OnFwd(OUT_A);Wait(90);cross++;}//cross=cross+1 if(SENSOR_1 > THRESHOLD && SENSOR_3 > THRESHOLD) {go;} } Off(OUT_A+OUT_C); PlaySound(SOUND_UP); cross = 0; // while(cross!=1) //黒黒が1回来たら止める { if(SENSOR_1 < THRESHOLD) {L;}//左側のセンサーが黒になったら左に曲がる if(SENSOR_3 < THRESHOLD) {R;}//右側のセンサーが黒になったら右に曲がる if(SENSOR_1 < THRESHOLD && SENSOR_3 < THRESHOLD) {OnFwd(OUT_A);Wait(90);cross++;}//cross=cross+1 if(SENSOR_1 > THRESHOLD && SENSOR_3 > THRESHOLD) {go;} } Off(OUT_A+OUT_C); PlaySound(SOUND_UP); cross = 0; // ロータリー終了 while(true) { if(SENSOR_1 < THRESHOLD) {Off(OUT_A+OUT_C);} if(SENSOR_3 < THRESHOLD) {R;}//右側のセンサーが黒になったら右に曲がる if(SENSOR_1 < THRESHOLD && SENSOR_3 < THRESHOLD) {Off(OUT_A+OUT_C);} if(SENSOR_1 > THRESHOLD && SENSOR_3 > THRESHOLD) {go;} //ゴール } } **近道 [#sf0813d5] #define THRESHOLD 45 #define go OnFwd(OUT_A+OUT_C); //前進 #define L OnFwd(OUT_C);Off(OUT_A); //左 #define R OnFwd(OUT_A);Off(OUT_C); //右 task main() { SetSensor(SENSOR_1, SENSOR_LIGHT); SetSensor(SENSOR_3, SENSOR_LIGHT); int cross = 0; //両方黒になった回数をカウントする変数 // ロータリー開始 while(cross!=1) //黒黒が1回来たら止める { if(SENSOR_1 < THRESHOLD) {L;} //左側のセンサーが黒になったら左に曲がる if(SENSOR_3 < THRESHOLD) {R;} //右側のセンサーが黒になったら右に曲がる if(SENSOR_1 < THRESHOLD && SENSOR_3 < THRESHOLD) {OnFwd(OUT_A);Wait(90);cross++;} 両方黒になったらcross=cross+1 直進 if(SENSOR_1 > THRESHOLD && SENSOR_3 > THRESHOLD) {go;} 両方白になったら直進 } Off(OUT_A+OUT_C); PlaySound(SOUND_UP); cross = 0; // while(cross!=1) //黒黒が1回来たら止める { if(SENSOR_1 < THRESHOLD) {L;}//左側のセンサーが黒になったら左に曲がる if(SENSOR_3 < THRESHOLD) {R;}//右側のセンサーが黒になったら右に曲がる if(SENSOR_1 < THRESHOLD && SENSOR_3 < THRESHOLD) {OnFwd(OUT_A);Wait(90);cross++;}//cross=cross+1 if(SENSOR_1 > THRESHOLD && SENSOR_3 > THRESHOLD) {go;} } Off(OUT_A+OUT_C); PlaySound(SOUND_UP); cross = 0; // while(cross!=1) //黒黒が1回来たら止める { if(SENSOR_1 < THRESHOLD) {L;}//左側のセンサーが黒になったら左に曲がる if(SENSOR_3 < THRESHOLD) {R;}//右側のセンサーが黒になったら右に曲がる if(SENSOR_1 < THRESHOLD && SENSOR_3 < THRESHOLD) {OnFwd(OUT_A);Wait(90);cross++;}//cross=cross+1 if(SENSOR_1 > THRESHOLD && SENSOR_3 > THRESHOLD) {go;} } Off(OUT_A+OUT_C); PlaySound(SOUND_UP); cross = 0; //ロータリー終了 OnFwd(OUT_A);Off(OUT_C);Wait(90); Off(OUT_A+OUT_C); PlaySound(SOUND_UP); cross = 0; // while(cross!=7) //黒黒が7回来たら止める { if(SENSOR_1 < THRESHOLD) {L;}//左側のセンサーが黒になったら左に曲がる if(SENSOR_3 < THRESHOLD) {R;}//右側のセンサーが黒になったら右に曲がる if(SENSOR_1 < THRESHOLD && SENSOR_3 < THRESHOLD) {go;cross++;}//cross=cross+1 if(SENSOR_1 > THRESHOLD && SENSOR_3 > THRESHOLD) {go;} //近道 } Off(OUT_A+OUT_C); PlaySound(SOUND_UP); cross = 0; //ロータリー開始 while(cross!=1) //黒黒が1回来たら止める { if(SENSOR_1 < THRESHOLD) {L;}//左側のセンサーが黒になったら左に曲がる if(SENSOR_3 < THRESHOLD) {R;}//右側のセンサーが黒になったら右に曲がる if(SENSOR_1 < THRESHOLD && SENSOR_3 < THRESHOLD) {OnFwd(OUT_A);Wait(90);cross++;}//cross=cross+1 if(SENSOR_1 > THRESHOLD && SENSOR_3 > THRESHOLD) {go;} } Off(OUT_A+OUT_C); PlaySound(SOUND_UP); cross = 0; // while(cross!=1)//黒黒が1回来たら止める { if(SENSOR_1 < THRESHOLD) {L;}//左側のセンサーが黒になったら左に曲がる if(SENSOR_3 < THRESHOLD) {R;}//右側のセンサーが黒になったら右に曲がる if(SENSOR_1 < THRESHOLD && SENSOR_3 < THRESHOLD) {OnFwd(OUT_A);Wait(90);cross++;}//cross=cross+1 if(SENSOR_1 > THRESHOLD && SENSOR_3 > THRESHOLD) {go;} } Off(OUT_A+OUT_C); PlaySound(SOUND_UP); cross = 0; // while(cross!=1) //黒黒が1回来たら止める { if(SENSOR_1 < THRESHOLD) {L;}//左側のセンサーが黒になったら左に曲がる if(SENSOR_3 < THRESHOLD) {R;}//右側のセンサーが黒になったら右に曲がる if(SENSOR_1 < THRESHOLD && SENSOR_3 < THRESHOLD) {OnFwd(OUT_A);Wait(90);cross++;}//cross=cross+1 if(SENSOR_1 > THRESHOLD && SENSOR_3 > THRESHOLD) {go;} } Off(OUT_A+OUT_C); PlaySound(SOUND_UP); cross = 0; //ロータリー終了 while(cross!=3) //黒黒が3回来たら止める { if(SENSOR_1 < THRESHOLD) {L;}//左側のセンサーが黒になったら左に曲がる if(SENSOR_3 < THRESHOLD) {R;}//右側のセンサーが黒になったら右に曲がる if(SENSOR_1 < THRESHOLD && SENSOR_3 < THRESHOLD) {go;cross++;}//cross=cross+1 if(SENSOR_1 > THRESHOLD && SENSOR_3 > THRESHOLD) {go;} } Off(OUT_A+OUT_C); PlaySound(SOUND_UP); cross = 0; // while(true) { if(SENSOR_1 < THRESHOLD) {Off(OUT_A+OUT_C);} if(SENSOR_3 < THRESHOLD) {R;}//右側のセンサーが黒になったら右に曲がる if(SENSOR_1 < THRESHOLD && SENSOR_3 < THRESHOLD) {Off(OUT_A+OUT_C);} if(SENSOR_1 > THRESHOLD && SENSOR_3 > THRESHOLD) {go;} //ゴール } } *ロボット紹介 [#y441cb8c] &ref(IMG_7436.jpg); -走りやすいようにタイヤを使用し、本体は前の課題のもものをそのまま使いそこに光センサーを取り付けました。 &ref(12.jpg); -光センサーは本体から遠いと急なカーブに対応できなかったので結構本体寄りにして急カーブや細かい動きに対応できるようにしました。 *コース紹介 [#tb6e6432] &ref(15.jpg); 条件をみたしつつできるだけ簡単なコースにしてみたつもりです。 -交差点が斜めっていると進みずらいので交差点は両方共できるだけ直交するようにつくりました。 -走りやすいようにできるだけ直線を多く取り入れました。 -長く作ったりしないで出来だけ短く簡単に作りました。 *感想 [#kc6dc980] -プログラムが難しく、できるかどうか不安だったが、どうにか作ることができた。 -思ったよりも全然難しくて、とても時間がかかったし大変でした。 *コメント [#x3caa9ae] - while(true) のループはいつまでも続くので最後のPlaySoundは実行してくれないはずです。 -- [[松本]] &new{2011-06-24 (金) 12:52:23}; #comment