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

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

☆目次☆

プログラム(反転バージョン1)

#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)

#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)

#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)

#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); }                    //直進しコースに戻る
}
}
 制作者:アナクスナムゥン

コース

スヌーピー

他の班とかぶらないようにスヌーピーにしてみました。

工夫した点

  1. 光センサーがなかなか敏感で、ちょうどいい感度にさせた所。あと、2つの光センサーの幅を絶妙な間隔に調整したことでほとんどすべてのカーブに対応したマシンの製作ができた。
  2. 光センサーの高さを地面すれすれにすることにより、ラインの位置をより正確に読み取ることに成功した。

うまくいかなかったこと

  1. 車体が振動してスムーズに進まなかった。センサーの感度、プログラミングに改良の余地あり(ガリ) →改善完了しました。
  2. 課題内容を把握していなくて、やってきていませんでした。→完成しました(6/21)

感想

  1. アナクスナムゥン:今回は、夜中までみんなでやったりして、大変だった。
  2. ガリ:ホント遅くまでやったね。眠気覚ましに塩コショウを食ったりね。ロボットは基本をモデルにしたからやりやすかったけど、プログラミングは苦労したね。
  3. メソ:今回は、いろいろ不手際があって遅れちゃったけど、なんとか完成できて良かったよ、ホント塩コショウは眠気に効くよね♪

皆さんのコメント

みんな恥ずかしがらずに書き込んでね!!



添付ファイル: filedscn2607_Medium.jpg 271件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-07-28 (金) 20:30:07