課題2:黒い線に沿って動くロボットを作成せよ。そして一つの周回コースを2台のロボットが走行すること想定し、以下の2種類のプログラムを作成せよ。

+.	前方のロボットに接触したら反転して進む
+.	前方のロボットに接触したらそのロボットを右側から避けて通り、再びライン上に戻って進む
+	前方のロボットに接触したら反転して進む
+	前方のロボットに接触したらそのロボットを右側から避けて通り、再びライン上に戻って進む


 ☆目次☆
☆目次☆
#contents
*プログラム(反転バージョン1) [#af7eab9b]
 #define THRESHOLD 47
 task main() {
 SetSensor(SENSOR_1,SENSOR_LIGHT);        //センサー1を光センサーとする
 SetSensor(SENSOR_2,SENSOR_TOUCH);        //センサー2をタッチセンサーとする
 SetSensor(SENSOR_3,SENSOR_LIGHT);        //センサー3を光センサーとする
 while(true){                          
     if (SENSOR_1< THRESHOLD){            //センサー1が線の上にあるとき   
       Off(OUT_A+OUT_C);  
       OnFwd(OUT_C);                      //左に少し旋回          
       OnRev(OUT_A);
      Wait(4);} 
        if (SENSOR_3< THRESHOLD){         //センサー3が線の上にあるとき
       Off(OUT_A+OUT_C);  
       OnFwd(OUT_A);                      //少し右に旋回
       OnRev(OUT_C);
       Wait(4);} 
         else {                           //どちらのセンサーも線の上になければ
      OnFwd(OUT_A+OUT_C);}                //直進する
             if(SENSOR_2==1){             //センサ−2が反応すると
     OnRev(OUT_C);                        //反転して直進
     Wait(180);
     OnFwd(OUT_C); }
 }
 } 
 制作者:ガリ、メソ

*プログラム(反転バージョン2) [#m7657726]
 #define THRESHOLD 45
 task main() {
 SetSensor(SENSOR_1,SENSOR_LIGHT);        //センサー1を光センサーとする
 SetSensor(SENSOR_2,SENSOR_TOUCH);        //センサー2をタッチセンサーとする
 SetSensor(SENSOR_3,SENSOR_LIGHT);        //センサー3を光センサーとする
 while(true){                          
     if (SENSOR_1< THRESHOLD){            //センサ−1が線の上にあるとき                    
       Off(OUT_A+OUT_C);        
       OnFwd(OUT_C);                      //左に少し旋回
       OnRev(OUT_A);
        Wait(6);} 
     if (SENSOR_3< THRESHOLD){            //センサー2が線の上にあるとき
       Off(OUT_A+OUT_C);         
       OnFwd(OUT_A);                      //右に少し旋回
       OnRev(OUT_C);
        Wait(6);} 
     else {                               //センサー1,2のどちらも反応していないとき
       OnFwd(OUT_A+OUT_C);}               //直進する
     if(SENSOR_2==1){                     //センサー2が反応しているとき
       OnRev(OUT_C);                      //右回りに旋回し反転
        Wait(185);
       OnFwd(OUT_C); }
 }
 } 
 制作者:アナクスナムゥン
*プログラム(避けるバージョン1) [#dca7ed76]
 #define THRESHOLD 47
 task main() {
  SetSensor(SENSOR_1,SENSOR_LIGHT);       //センサー1を光センサーとする
  SetSensor(SENSOR_2,SENSOR_TOUCH);       //センサー2をタッチセンサーとする   
  SetSensor(SENSOR_3,SENSOR_LIGHT);       //センサー3を光センサーとする 
 while(true){                          
     if (SENSOR_1< THRESHOLD){            //センサ−1が線の上にあるとき                                        
       Off(OUT_A+OUT_C);        
       OnFwd(OUT_C);                      //左に少し旋回
       OnRev(OUT_A);
      Wait(4);} 
        if (SENSOR_3< THRESHOLD){         //センサ−3が線の上にあるとき         
       Off(OUT_A+OUT_C);         
       OnFwd(OUT_A);                      //右に少し旋回
       OnRev(OUT_C);
       Wait(4);} 
         else {                           //センサー1,2のどちらも反応していないとき
      OnFwd(OUT_A+OUT_C);}                //直進する
             if(SENSOR_2==1){             //センサー2が反応しているとき
     OnRev(OUT_C);                        //右に0.9秒旋回
         Wait(90);
     OnFwd(OUT_C);                        //1.2秒直進
         Wait(120);
     OnRev(OUT_A);                        //左に1.3秒旋回
         Wait(130);
     OnFwd(OUT_A); }                      //直進しコースに戻る
 }
 }
  制作者:ガリ、メソ
*プログラム(避けるバージョン2) [#m766c83a]
 #define THRESHOLD 47
 task main() {
  SetSensor(SENSOR_1,SENSOR_LIGHT);       //センサー1を光センサーとする
  SetSensor(SENSOR_2,SENSOR_TOUCH);       //センサー2をタッチセンサーとする   
  SetSensor(SENSOR_3,SENSOR_LIGHT);       //センサー3を光センサーとする 
 while(true){                          
     if (SENSOR_1< THRESHOLD){            //センサ−1が線の上にあるとき                                
       Off(OUT_A+OUT_C);        
       OnFwd(OUT_C);                      //左に少し旋回
       OnRev(OUT_A);
        Wait(4);} 
     if (SENSOR_3< THRESHOLD){            //センサ−3が線の上にあるとき          
       Off(OUT_A+OUT_C);              
       OnFwd(OUT_A);                      //右に少し旋回
       OnRev(OUT_C);
        Wait(4);} 
     else {                               //センサー1,2のどちらも反応していないとき
       OnFwd(OUT_A+OUT_C);}               //直進
     if(SENSOR_2==1){                     //センサー2が反応しているとき
       OnRev(OUT_C);                      //右に0.9秒旋回
        Wait(90);
       OnFwd(OUT_C);                      //1.0秒直進する
        Wait(100);
       OnRev(OUT_A);                      //左に1.0秒旋回
        Wait(100);
       OnFwd(OUT_A); }                    //直進しコースに戻る
 }
 }
  制作者:アナクスナムゥン

*コース [#g1c71324]
#ref(2006a/A7/課題2左/dscn2607_Medium.jpg,100%,スヌーピー)
他の班とかぶらないようにスヌーピーにしてみました。

*工夫した点 [#z85b009f]
+光センサーがなかなか敏感で、ちょうどいい感度にさせた所。あと、2つの光センサーの幅を絶妙な間隔に調整したことでほとんどすべてのカーブに対応したマシンの製作ができた。
+光センサーの高さを地面すれすれにすることにより、ラインの位置をより正確に読み取ることに成功した。
*うまくいかなかったこと [#t9681fde]
+車体が振動してスムーズに進まなかった。センサーの感度、プログラミングに改良の余地あり(ガリ)
→改善完了しました。
+課題内容を把握していなくて、やってきていませんでした。→完成しました(6/21)
*感想 [#h49153a0]
+アナクスナムゥン:今回は、夜中までみんなでやったりして、大変だった。
+ガリ:ホント遅くまでやったね。眠気覚ましに塩コショウを食ったりね。ロボットは基本をモデルにしたからやりやすかったけど、プログラミングは苦労したね。
+メソ:今回は、いろいろ不手際があって遅れちゃったけど、なんとか完成できて良かったよ、ホント塩コショウは眠気に効くよね♪
*皆さんのコメント [#e8f9f3f9]
みんな恥ずかしがらずに書き込んでね!!
-写真が1枚も貼ってないじゃん! -- [[怒羅江門]] &new{2006-06-23 (金) 00:59:58};
-写真はったんだね! -- [[sin]] &new{2006-06-27 (火) 01:28:36};

#comment

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