[[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) //crossが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) //crossが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) //crossが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) //crossが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) //crossが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) //crossが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) //crossが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)
 {
  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) //crossが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) //crossが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) //crossが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) //crossが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) //crossが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) //crossが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) //crossが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

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS