[[2012a/Member]]
*目次 [#cb0b9ab2]
#contents


*課題2 ライントレースをするロボット [#x4757067]
**コース作成の条件 [#oc0654b0]
・四つの出口を作る。


・交差点を二つ作る。


・直角カーブを作る。


・ヘアピンカーブを作る。




この中で特に苦しんだのは直角カーブと交差点でしょうか。

**ルール [#c30b3414]
出口のうちの一つから入り一周半して反対側の出口から出る。



では、それぞれの紹介を始めて行きたいと思います。
**コースの紹介 [#ib4b7a27]



&ref(コース.JPG);

書くときに特に予定も立てず、勢いでやってしまったのがこの課題での最大のミスでしょうか。




このコースでの問題点をあげるなら、



・直角カーブが100度くらいある。

・交差点が直行していない。

・ヘアピンカーブが反り返りすぎている。

・入り口がT字ではなく横向きのY字などの歪な形



などなど高難易度のコースとなっています。


**ロボット紹介 [#va02c617]
ロボットは何段階かに分けて進化していっています。


まずはver.1から





&ref(P1000063.jpg);
横からの写真
剥き出しのギアは全バージョンに共通する特徴です。


&ref(正面から.jpg);
正面から

&ref(裏返し.jpg);
裏返した状態 中心の青いものがセンサーで、ロボットの中心についています



ver.1は試作品となっておりとりあえずどのように作るか、

を考えるために組んでおり、すこし脆くなっていたり、センサーが一つしかなかったりします。



**プログラム紹介 [#ld4dca8c]







 #define THRESHOLD 45 //閾値
 #define go_st OnFwd(OUT_A+OUT_C);
 #define go_le1 Off(OUT_A); OnFwd(OUT_C); OnRev(OUT_A);
 #define go_ri1 Off(OUT_C); OnFwd(OUT_A); OnRev(OUT_C);
 #define go_le2 SetPower(OUT_A,2); SetPower(OUT_C,0);Off(OUT_A); OnFwd(OUT_C); OnRev(OUT_A);
 #define go_ri2 SetPower(OUT_A,0); SetPower(OUT_C,2);Off(OUT_C); OnFwd(OUT_A); OnRev(OUT_C);
 #define go_le3 SetPower(OUT_A,2); SetPower(OUT_C,0);Off(OUT_A); OnFwd(OUT_C); OnRev(OUT_A);
 #define go_ri3 SetPower(OUT_A,4); SetPower(OUT_C,1);Off(OUT_C); OnFwd(OUT_A); OnRev(OUT_C);
 #define t_overa 1170
 #define t_overb 1380
 #define t_overc 1700
 #define t_overd 2750
 #define t_overe 3500
 #define t_overf 3800
 #define t_overg 4700
 task main()
 { 
      ClearTimer(0);                                //タイマーリセット
 
      SetPower(OUT_A,0);
      SetPower(OUT_C,0);
 
      SetSensor(SENSOR_1, SENSOR_LIGHT);
      SetSensor(SENSOR_3, SENSOR_LIGHT);
      int cross = 0;                                            //両方黒になった 回数をカウント
  while(true){                                        //百回きたら止める。
           if(SENSOR_1<THRESHOLD&&SENSOR_3<THRESHOLD){          //両方黒線の上に いるとき
              SetPower(OUT_A,0);
              SetPower(OUT_C,0);
              go_st;
              cross++;                                          //カウントする
 
 
 
 
 
           }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)<=t_overa){       //3だけ黒線の上にあるとき
              PlaySound(SOUND_CLICK);
              go_st;
              Wait(5);
              SetPower(OUT_A,0);
              SetPower(OUT_C,4);
              go_ri1;
              
           }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)<=t_overa){       //1だけ黒線の上にある時
              PlaySound(SOUND_CLICK);
              go_st
              Wait(5);
              SetPower(OUT_A,4);
              SetPower(OUT_C,0);
              go_le1;
              
              
 
 
 
 
            }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overa && FastTimer(0)<=t_overb){       //1だけ黒線の上にあるとき
              PlaySound(SOUND_UP) ;
              
              go_ri3;
 
 
            }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overa && FastTimer(0)<=t_overb){       //3だけ黒線の上にある時
              PlaySound(SOUND_UP) ;
              SetPower(OUT_A,0);
              SetPower(OUT_C,0);
              go_le3;
 
            
 
 
 
 
           }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD &&  FastTimer(0)>t_overb && FastTimer(0)<=t_overc){       //3だけ黒線の上にあるとき
              PlaySound(SOUND_CLICK);
              go_st;
              Wait(5);
              SetPower(OUT_A,0);
              SetPower(OUT_C,4);
              go_ri1;
              
           }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overb && FastTimer(0)<=t_overc){       //1だけ黒線の上にある時
              PlaySound(SOUND_CLICK);
              go_st
              Wait(5);
              SetPower(OUT_A,4);
              SetPower(OUT_C,0);
              go_le1;
 
 PlaySound(SOUND_UP) ;
 
 
 
 
            }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overc && FastTimer(0)<=t_overd){       //1だけ黒線の上にあるとき
              PlaySound(SOUND_UP) ;
              SetPower(OUT_A,0);
              SetPower(OUT_C,0);
              go_ri2;
 
 
            }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overc && FastTimer(0)<=t_overd){       //3だけ黒線の上にある時
              PlaySound(SOUND_UP) ;
              SetPower(OUT_A,0);
              SetPower(OUT_C,0);
              go_le2;
 
 
 
 
 
 
            }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD &&  FastTimer(0)>t_overd && FastTimer(0)<=t_overe){       //3だけ黒線の上にあるとき
              PlaySound(SOUND_CLICK);
              go_st;
              Wait(5);
              SetPower(OUT_A,0);
              SetPower(OUT_C,4);
              go_ri1;
              
            }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overd && FastTimer(0)<=t_overe){       //1だけ黒線の上にある時
              PlaySound(SOUND_CLICK);
              go_st
              Wait(5);
              SetPower(OUT_A,4);
              SetPower(OUT_C,0);
              go_le1;
 
 
 
 
 
           }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overe && FastTimer(0)<=t_overf){       //1だけ黒線の上にあるとき
              PlaySound(SOUND_UP) ;
              SetPower(OUT_A,0);
              SetPower(OUT_C,0);
              go_ri2;
                            
                      
           }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overe && FastTimer(0)<=t_overf){       //3だけ黒線の上にある時
              PlaySound(SOUND_UP) ;
              SetPower(OUT_A,0);
              SetPower(OUT_C,0);
              go_le2;
                    
                            
                      
                                                   
           }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD &&  FastTimer(0)>t_overf){       //3だけ黒線の上にあるとき
              PlaySound(SOUND_CLICK);
              go_st;
              Wait(5);
              SetPower(OUT_A,0);
              SetPower(OUT_C,4);
              go_ri1;
                
            }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overf){       //1だけ黒線の上にある時
              PlaySound(SOUND_CLICK);
              go_st
              Wait(5);
              SetPower(OUT_A,4);
              SetPower(OUT_C,0);
              go_le1;
 
 
 
 
 
           }else if(SENSOR_1>THRESHOLD && SENSOR_3>THRESHOLD){       //両方黒の外にあるとき
              SetPower(OUT_A,0);
              SetPower(OUT_C,0);
              go_st;
              }
       }
 
 }

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS