課題3

課題内容

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

作成したロボット

ロボットの全体図

HI3B0037.JPG

前輪部分がなかなかうまくいかず試行錯誤の末、タイヤのゴムを外すことで解決した。

HI3B0038.JPG

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

ディファレンシャルギア

HI3B0039.JPG

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

作成したプログラム

課題3-1

#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;  //ブロックを投げる
               
            }   
     }
 }
 
 

課題3-1 ver2.0

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

#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

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

苦労した点

前輪が変な動きをする。 →タイヤのゴムを外し摩擦を減らした。

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

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

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

今後の課題

時間の都合で課題3−3ができなかった。

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

コメントをお願いします。


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

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


添付ファイル: fileHI3B0039.JPG 368件 [詳細] fileHI3B0038.JPG 365件 [詳細] fileHI3B0037.JPG 355件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-08-13 (水) 11:48:48