2007b/A2 課題3 懐中電灯に向かってブロックを投げるロボット

課題 

1 全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。

2 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進む。

3 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。

     但し、モーター、タッチセンサー、光センサーは2個まで使用可。

ロボット紹介

dscn2327_Medium.jpg

 課題にもあるように、モーターは、二つしか使えない。ブロックを投げるのに一つ使うので、タイヤを起動

させるのに一つしか使えない。ここが今回の課題のキーポイントである。ディファレンシャルギアという

左右のギア比を変え、正負のモーターの回転で、左右のタイヤを動かす方法でそれが可能になる。

またタイヤの逆回転を防ぐ為に、ストッパーがつけられている。

GIA-UE.jpg GIA-SITA.jpg GIA-SIAUP.jpg

 参考をもとに、ロボットを作成した。

 しかし、ギアのかみ合いが悪く、変な音が鳴ってしまったのでモーターに接続するギアの部分に

 改良を加えた。そして完成したのが、上の図である。

arm.jpg mae.jpg

 アームは単純な構造で作成した。アームの下にあるのは、初期位置を固定するものである。

 また、光センサーも前に単純に置いた。

ue.jpg zentai.jpg

 そして、全体としてはこのようなロボットになった。

hidari.jpg syoumen.jpg

 しかし、うまく光をキャッチできなかったので、左右の光センさーにしきりをつけることで

 うまく動くようになった。

プログラム

1つ目の課題

 #define THRESHOLD 70                // 光の強さを定義

task main ()
  {
        SetSensor(SENSOR_1,SENSOR_LIGHT);  // センサー1は光センサー
        SetSensor(SENSOR_3,SENSOR_LIGHT);       // センサー2は光センサー

        while ( true )   {

              if  ( ( SENSOR_1 <  THRESHOLD ) || ( SENSOR_3 < THRESHOLD ) ) {       // 1,3の光のどちらかが弱い場合

                    OnFwd ( OUT_C ) ;    // ロボット回転
                    Off ( OUT_A ) ;           // アームは停止

              }  else  {                        // 1,3の光がどちらとも強い場合

                    Off ( OUT_C ) ;                // ロボット回転ストップ
                    OnFwd ( OUT_A ) ;         // アーム回転
                    Wait ( 45 ) ;                    
                    OnRev ( OUT_A ) ;         // アーム逆回転
                    Wait ( 45 ) ;                 
                    Off ( OUT_A ) ;              // アーム停止

               }

    }
 }

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 {  // 光センサー1,3が強いとき

                       OnFwd ( OUT_C ) ;  // 左に回転
                       Wait ( 20 ) ;
                       OnRev ( OUT_C ) ;  // 右に回転
                       Wait ( 20 ) ;
                       Off ( OUT_C ) ;  // 回転ストップ 
                        }
             }
          }
 }   

3つ目の課題

#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 ) ;
                       OnRev ( OUT_A ) ;  // アーム逆回転
                       Wait ( 20 ) ;

                        }
             }
          }
 }   

 結果的に課題2と課題3のプログラムがよく似ているようになった。

感想

最も苦労したところは、ブロックを投げる構造でいろいろ工夫を凝らしたが結局はシンプルなものが1番よかっ た。 投げる場所にモーターを1つ使うので、タイヤの部分では1つしか使うことができず苦労した。ギヤのところが 上手くいかずスムーズに進むことが困難だった。だが少し変えるだけでスムーズに進むことができるようになっ た。光センサーの反応にも苦労したが、しきりを作ることでうまく反応するようになった。

まとめ

プログラミングを理解するのに戸惑ってしまい、多くの時間を費やした。前の課題などとは全く違い、 ギアの噛み合わせなどがとても困難だったけど、なんとか完成することができよかった。 次のロボコンのときは効率良くできるように心がけたい。

コメントお願いします



添付ファイル: filesyoumen.jpg 281件 [詳細] filemigi.jpg 151件 [詳細] filehidari.jpg 309件 [詳細] filezentai.jpg 286件 [詳細] fileue.jpg 279件 [詳細] filemae.jpg 295件 [詳細] filearm2.jpg 166件 [詳細] filearm.jpg 294件 [詳細] fileGIA-UE.jpg 296件 [詳細] fileGIA-SITA.jpg 302件 [詳細] fileGIA-SIAUP.jpg 313件 [詳細] filedscn2327_Medium.jpg 309件 [詳細]

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