2006a/MemberOnly/進行状況C

課題2 ライントレース・光センサーロボット

ロボットの説明  (工夫した点・苦労した点) 

 製作者 小川泰史、藤巻祐輝

シンプルロボット!!

  タッチセンサーを2つと光センサーを1つをつけなければならないので苦労した。特に、光センサーを前方につけるのに苦労した。タッチセンサーよりも後ろだが、ボディよりは前にならなければならないので・・・。悩みに悩んでようやくとりつける事ができた。強度の心配が大きかったので改善するのに時間がかかった。 まぁ、割とコンパクトにまとめられたと思う。今度も頑張りたい。                   小川泰史

 ロボットの製作方針として「シンプルなものにしよう」ということに決まった。シンプル故に難しい。一番苦労した点は、タッチセンサーと光センサーの共存であった。相当な時間をこの共存問題に費やした。解決策として今まで目を向けていなかった、ロボットのコアの部分をいじってみた。できた。しかし、脆かった。なんてったって、触っただけで崩れてしまったのだから。そして補強をしてみた。シンプルではなくなってしまった。しかし、完成というのはあっけなくて、ひょんなことから丈夫でシンプルなロボットができてしまった。うーんこれも今までの失敗があったからこそだと思う。実際このロボットのシンプルさには、ほれぼれしてしまう。   藤巻祐輝

プログラム

作成者:坂口優也

  • 課題2−1前者に接触したら反転する
task main()
{
   SetSensor(SENSOR_1,SENSOR_TOUCH);   //センサ−1をタッチセンサーにする          
   SetSensor(SENSOR_3,SENSOR_TOUCH);  //センサ−3をタッチセンサーにする 
   SetSensor(SENSOR_2, SENSOR_LIGHT); //センサ−2を光センサーにする
   
   while(true)                    //条件が真のとき
   
   {
 
 if((SENSOR_1 == 0)&&(SENSOR_3 == 0)) //センサー1と3が両方押されていないとき

  
    {
       if (SENSOR_2 < 40)     //光センサーが黒と判断したら右旋回
        {                                    
           OnFwd(OUT_A);
           Off(OUT_C);
        } 
       else                        //光センサーが白と判断したら左旋回
        {                                     
           Off(OUT_A);
           OnFwd(OUT_C);
        }
    }

 
 else
{ 
    Off(OUT_A+OUT_C) ;         //止まれ                      
    Wait(60);
 
    OnFwd(OUT_A);        //反転
    OnRev(OUT_C);
    Wait(155);
    Off(OUT_A+OUT_C);
    
    
    {if (SENSOR_2 < 40)
        {                                    
           OnFwd(OUT_C);
          OnRev(OUT_A);
        } 
       else 
        {                                     
         OnRev(OUT_C);
           OnFwd(OUT_A);
        }
    
   } 
   } }}
  • 課題2−2前者に接触したら前車を避ける

task main()

{ SetSensor(SENSOR_1,SENSOR_TOUCH);   //センサー1をタッチセンサーとする
 SetSensor(SENSOR_3,SENSOR_TOUCH);   //センサ−3をタッチセンサーとする
 SetSensor(SENSOR_2,SENSOR_LIGHT);   //センサ−2を光センサーとする
      
      
 while(true)                         //条件式が真のときひたすら繰り返す
  {
    if((SENSOR_1==0)&&(SENSOR_3==0)) //タッチセンサー1と3に何も触れていないとき
      {
        if(SENSOR_2<40)       //光センサーが黒と判断したら 
          {  OnFwd(OUT_A);     //左旋回
             Off(OUT_C);
          }
        else                        //光センサーが白と判断したとき
          {  Off(OUT_A);      //右旋回
             OnFwd(OUT_C);
          }
      }
     
     
    else             //タッチセンサー1と3のいずれかにでも触れたとき
    
     { 
        Off(OUT_A+OUT_C) ;     //止まれ                          
        Wait(60);
       
        OnRev(OUT_A+OUT_C);   //下がれ
        Wait(80);
       
        OnFwd(OUT_A);      //90度右旋回
        OnRev(OUT_C);
        Wait(75);
       
      
       repeat(2)        //2回繰り返せ
      {
        OnFwd(OUT_A+OUT_C);  //直進
        Wait(120);
       
        OnFwd(OUT_C);     //90度左旋回
        OnRev(OUT_A);
        Wait(75);
      }
      
      OnFwd(OUT_A+OUT_C);  //タッチセンサーが黒と判断するまで直進
      until(SENSOR_2<40);  //
      
      OnFwd(OUT_A);     //多少右旋回
      OnRev(OUT_C);
      Wait(60);
     
                
     }
       
       
     }   }

プログラムにおいて工夫した点と反省

   まずはタッチセンサーだけのプログラムと光センサーだけのプログラムを作るところから始めた。各々だけならば作動する。しかし、両方を組み合わせたプログラムでは片方しか機能してくれない。原因はwhile(true)の使い方であった。そこを先生に指摘してもらい、ようやく動くようになった。あとは微調整である。 タッチセンサーに当たったときにすり抜けるプログラムにおいて お互いにマシンの大きさが異なるためにすぐに曲がって避けることはできない。だから、当たったらまずバックして十分な間をあける。避けるときは直角に曲がる。これならお互いに接触しないだろう。 このマシンは他のマシンに比べてスピードが遅いから迫力に欠けると思う。ギアを換えずにプログラムだけで速くする方法はわからなかった。 反転するプログラムにおいて、左回りは線に沿って移動するのだが、コースの曲がり方が急なために右回りではプログラムを何回変えてもコースから外れてしまった。だから、妥協策としてコースを太くなだらかにした。   坂口優也  

コメントをどうぞ



添付ファイル: filesimpl.jpg 125件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-06-30 (金) 17:23:25 (4804d)