[[2008a/MemberOnly/進行状況A]]
*目次 [#s8c31da0]
#contents


*課題3:1番明るい方向を探し出して、その方向にものを投げるロボット [#f5791964]



***課題条件~ [#u44f3ad4]

1.全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。~
2.懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。~
3.懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば50cmの距離まで近づいてブロックを投げる。~
(ただし、モータ、光センサ、タッチセンサはそれぞれ2個まで使用可。懐中電灯の代わりに携帯のライトなどを利用してもよい。 )~

※今回は1・2のプログラムを作った。


*作成したロボット [#a9a70d70]
ロボットの外形~


#ref(2008a/A5/課題3右/080630_1913~01.JPG,100%,robo)~
#ref(2008a/A5/課題3右/080630_1913~02.JPG,100%,zennrinn)~
基本構造のロボットの前部に光センサ2個と小さいタイヤをつける。~


~
~
ブロックを飛ばす部分~
#ref(2008a/A5/課題3右/080630_1914~01.JPG,100%,arm)~
ギアを全くかませない簡素なモノとした。~
~
~
ディフェレンシャル・ギアの構造
#ref(2008a/A5/課題3右/080630_1913~03.JPG,100%,de)~

~
~

*作成したプログラム [#l13779ca]

**プログラム1 [#pe473047]

#define THRESHOLD    62            //光の閾値を定義



task main ()

  {

        SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1を光センサー

        SetSensor(SENSOR_2,SENSOR_LIGHT);       //センサー3を光センサー



        while ( true ) {



              if  ( ( SENSOR_1 <  THRESHOLD ) || ( SENSOR_3 < THRESHOLD ) ) {       //センサー1またはセンサー3が光閾値より低いならば


                    SetPower(OUT_C,5);//モーターCの出力を5とする。
                    OnFwd ( OUT_C ) ;    //モーターCを正回転=回転

                    Off ( OUT_A ) ;           //投げない



              }  else  {                        //両方のセンサーが光閾値を超えるなら



                    Off ( OUT_C ) ;                //モーターC停止=回転停止
                    SetPower(OUT_A,1); 

                    OnFwd ( OUT_A ) ;         //投げ始める

                    Wait ( 45 ) ;                    

                    OnRev ( OUT_A ) ;         //おろす

                    Wait ( 40) ;                 

                    Off ( OUT_A ) ;              //停止



               }



    }
    }

**プログラム2 [#ydba4ab8]
#define THRESHOLD 60//光閾値1を定義
#define  THRESHOLD2 68//光り閾値2を定義


 task main()
{
  SetSensor(SENSOR_1, SENSOR_LIGHT);//センサー1を光センサー
 SetSensor(SENSOR_3, SENSOR_LIGHT);//センサー2を光センサー
 
 
 while(true){
 
   if((SENSOR_1 < THRESHOLD)&&(SENSOR_3 > THRESHOLD))   //センサー1が光閾値1より低く、センサー3が光閾値1より低いならば
{
   OnRev(OUT_C);//回転
   Wait(10);
   Off(OUT_C);//停止
   } else {
   if((SENSOR_1 > THRESHOLD)&&(SENSOR_3 < THRESHOLD))//センサー1が光閾値1より高く、センサー3が光閾値1より低いならば
{
   OnFwd(OUT_C);//回転
   Wait(10);
   Off(OUT_C);//停止
   }else{
   if((THRESHOLD<SENSOR_1<THRESHOLD2)&&(THRESHOLD<SENSOR_3<THRESHOLD2))//センサー1と3が光閾値1より高く、2より低いならば
  repeat(5){OnFwd(OUT_C);
   Wait(35);
   OnRev(OUT_C);
   Wait(35);
   Off(OUT_C);
   }//左右に曲がる×5
else{
   if((SENSOR_1>THRESHOLD2)&&(SENSOR_3>THRESHOLD2))//センサー1とセンサー3が光閾値2より高いならば
{
   OnFwd(OUT_A);
   Wait(40);
   OnRev(OUT_A);
   Wait(40);
   Off(OUT_A);
   
   }//ブロック投げる
  }}}}}





*苦労した点・工夫した点 [#xc74e91a]
・光センサをとりつける幅~
・よく使うプログラムは、定義を用いる。~
・プログラムの微調整が面倒。~



*未解決な点・今後への課題 [#kb6b2233]
・まっすぐに進む時ガタガタになる。~
→モーターを増やす(今回は無理)~
・不快音がする。~
→タイヤを小さくして、本体とタイヤの摩擦をなくした。~
・強度が弱い。~
→補強する。特に投げる構造。~

*課題2を終えての感想 ~ [#y5038ea9]
・難しかった。最初はディフェレンシャル・ギアの組み立てがわからなくて、ものすごい騒音を出しながら走るロボットができた。~
組み立て直したら、普通に走ったからほっとした。~




*コメントお願いします。 [#ud2dcd4a]
- 光センサについて、絶対的な閾値を使わずに、少し前の値あるいは左右の違いなどを判断して動くロボットのプログラムを考えてみてください。 -- [[松本]] &new{2008-07-01 (火) 08:35:18};

#comment


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