#contents


*課題3 [#y0102678]
**課題内容 [#gd4c5d83]
+全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。
+懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。
+懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば50cmの距離まで近づいてブロックを投げる。
#br
ただし、モータ、光センサ、タッチセンサはそれぞれ2個まで使用可。懐中電灯の代わりに携帯のライトなどを利用してもよい。
*作成したロボット [#hc14dad4]
**ロボットの全体図 [#m048ea53]
#ref(HI3B0037.JPG)
前輪部分がなかなかうまくいかず試行錯誤の末、タイヤのゴムを外すことで解決した。

#ref(HI3B0038.JPG)
車体を伸ばし、ホイールを投げる構造と光センサーを前方に設置した。また光センサーを内側に向けるようにした。内側に向けることで課題3−2をプログラムする上で楽になった。


**ディファレンシャルギア [#xfaa37c9]
#ref(HI3B0039.JPG)
ディファレンシャルギア本体は説明書を見て楽に作れたが、左右のタイヤに伝えるギアの配置は悩んだ。はじめは先輩のロボットを真似ていたが、それではつまらないので試行錯誤して作成した。

*作成したプログラム [#v676b623]
**課題3-1 [#t708a6c6]
 #define THRESHOLD 60  //光の明るさを定義
 #define throw OnFwd(OUT_A); Wait(20); Off(OUT_A);   //投げる動作を定義
  task main()
  {
       SetSensor(SENSOR_1, SENSOR_LIGHT);  //光センサーを定義
       
       while(true)
       {
            if(SENSOR_1<THRESHOLD)  //定義した光よりも暗い場合
            {
                 OnFwd(OUT_C);  //時計周りに回転する
            }
            else  //定義した光よりも明るい場合
            {
                 Off(OUT_C);  //タイヤの動きを止める
                 throw;  //ブロックを投げる
                
             }   
      }
  }

#br
#br

**課題3-1 ver2.0 [#a93bc0d8]

先ほどのプログラムでは、ある程度の明るさに反応してブロックを投げてしまうので、一番明るい所に投げるとはいいがたい。
なので、このようなプログラムを改めて作ってみた。

 #define throw OnFwd(OUT_A); Wait(20); Off(OUT_A);   //投げる動作を定義する
 #define Time 400  //一回転する時間を定義する
 task main()
 {
    SetSensor(SENSOR_1, SENSOR_LIGHT);
    int hikari = 0;    //光の強さの値(初期値0)
    
    
    
    int mt;
    
    
    while (true)
    {
    ClearTimer(0);
    ClearTimer(1);
    hikari = 0;
    
    while (FastTimer(1) < Time)//一回転する
    {     
    OnFwd(OUT_A);OnRev(OUT_C);
    
         if (SENSOR_1 > hikari)
  {
  hikari=SENSOR_1;
  mt = FastTimer(0);//一番光の強かったときの時間を記憶する
  }
    
    }
    int lt;
    lt = FastTimer(0);
    
    OnFwd(OUT_C);OnRev(OUT_A);Wait(lt - mt);//一番光の強い方向を向く
    throw;      //ブロックをなげる
    }
 } 

**課題3-2 [#a634d47b]
 #define THRESHOLD 60 // 光の強さを定義
 task main ()
  {        SetSensor(SENSOR_1,SENSOR_LIGHT);
        SetSensor(SENSOR_3,SENSOR_LIGHT);
        while ( true )   {
              if  ( SENSOR_1 <  THRESHOLD ) {
                   if  ( SENSOR_3 < THRESHOLD ) {  // 光センサー1,3無感知
                       OnFwd ( OUT_C ) ;  // 光を探す
                       Wait ( 30 ) ;
                       Off ( OUT_C ) ;  // 停止
                   } else {  // 光センサー3が感知
                       OnRev ( OUT_C ) ;  // 右に回転
                       Wait ( 30 ) ;
                       Off ( OUT_C ) ;  // 回転停止
                   }
             } else 
                     if  ( SENSOR_3 < THRESHOLD ) {  // 光センサー1が感知
                       OnRev ( OUT_C ) ;  // 左に回転
                       Wait ( 30 ) ;
                       Off ( OUT_C ) ;  // 回転停止
                     } else { 
                       OnFwd ( OUT_A ) ;  // ブロックを投げる
                       Wait ( 20 ) ;
                        }
             }
          }
 }
*苦労した点 [#h922cce3]
前輪が変な動きをする。
→タイヤのゴムを外し摩擦を減らした。

ディファレンシャルギアがうまく作動しない。
→4、5回作り変えて今の方になった。

光センサーが正しく感知してくれない。
→内側に向けた。

個性が足らない
→車体前方を伸ばし、投擲機能と光センサーを取り付けた。

*今後の課題 [#qcc2f485]
時間の都合で課題3−3ができなかった。

光源の距離によっては正しく作動しないときがある。

*コメントをお願いします。 [#eace7416]
- 最初の課題は、全方向から最も明るい方向を捜し出すようなプログラムにしてみてくだい。 -- [[松本]] &new{2008-07-08 (火) 09:06:05};

#comment
1回目
プログラムだけでも良いので、課題3をやって見てください。

2回目
ロボットやプログラムの説明、工夫した点など最低限書くべきことは書けています。~
○になるには、3つめの課題のプログラムが必要です。~
わからないことがあれば、過去のホームページ等を参考にしてみてください。~
F.I.


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