[[2010a]]
#contents
*課題  [#q40116a3]
 懐中電灯に向かってブロックを投げるロボット
黄色いホイールを2個以上連射するロボットを作成し、以下の動きをするようにプログラムを作成せよ。ただし1,3は懐中電灯を2個使用し、ロボットの動作中は懐中電灯を動かさないがいろいろな距離や方向にある懐中電灯に対応できるロボットにすること。2は懐中電灯を1個使用し懐中電灯をゆっくり動かす。 (重複しないように一人一つ以上のプログラムを作成すること。2人のチームは1と2、3人のチームは1〜3)

*課題  [#q40116a3]
+全方向から2つの懐中電灯の方向を探しだし、懐中電灯を狙ってホイールを投げる。可能な限り正確な方向に投げること。(担当、HIDAKA)
+懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば一定の距離(懐中電灯から30cm以上離れた距離)まで近づいて懐中電灯を狙ってブロックを投げる。(担当、YU)
+全方向から2つの懐中電灯の方向を探しだし、40cmの距離に近づいて懐中電灯を狙ってホイールを投げ、懐中電灯に当てる。

 懐中電灯の代わりに携帯のライトなどを利用してもよい。
***構想 [#p91f2cce]
**発射方法 [#tf97038f]
&ref(P1010042.JPG);
&ref(P1010044.JPG);
**ロボット [#g494c040]
&ref(P1010044.JPG);
&ref(P1010045.JPG);
&ref(P1010046.JPG);

**完成したロボット [#j7aec092]
&ref(P1010047.JPG);
&ref(P1010048.JPG);

**その他工夫したところ [#f26bb74c]
***土台 [#f1fcb863]
&ref(robo 土台.jpg);
***光センサー [#e7d106fd]
&ref(P1010049.JPG);
&ref(robo 光.jpg);

**問題点 [#b983e2b3]
**使用した懐中電灯 [#e7c1e595]

*プログラム [#me17f1a5]
**YUのプログラム(課題2) [#e955dfe2]
 #define LL 45              //光量の最低値を45に設定
 #define LH 60              //最大値を60に設定
 #define TURN_TIME 10       //すばやく光を追う。
弾を発射、3発連射
   void ranch (){
      PlaySound(SOUND_UP) ; 
      PlaySound(SOUND_UP);
      Wait(150);// ピロピロ〜と高い音で合図をする。
      OnFwd(OUT_B);
      Wait(19);
      Off(OUT_B);
      PlaySound(SOUND_CLICK);
      OnFwd(OUT_B);
      Wait(19);
      Off(OUT_B);
      PlaySound(SOUND_CLICK);
      OnFwd(OUT_B);
      Wait(19);
      Off(OUT_B);
      PlaySound(SOUND_CLICK);  
   }
左にライトが動いたとき
   void turn_left(){
     OnRev(OUT_C); OnFwd(OUT_A); 
     Wait(TURN_TIME);
     Off(OUT_A+OUT_C);
   }
右にライトが動いたとき
   void turn_right(){
     OnFwd(OUT_C); OnRev(OUT_A);
   Wait(TURN_TIME);
     Off(OUT_A+OUT_C);
   }
  task main(){
      SetSensor(SENSOR_1,SENSOR_LIGHT);
      SetSensor(SENSOR_3,SENSOR_LIGHT);

    while(true){
             if((SENSOR_3>LL)&&(SENSOR_1>LL)){    //ライトが前にあるなら
             OnFwd(OUT_A+OUT_C);Wait(30);                 //前進する
            }
    else if((SENSOR_1>LL)&&(SENSOR_3<LL)){ //右に移動したら
             turn_right();}                         //右折す
    else if((SENSOR_1<LL)&&(SENSOR_3>LL)){ //左に移動したら
             turn_left();}                         //左折する
    else if((SENSOR_1>LH)&&(SENSOR_3>LH)){ //ある程度近づいたら
             Off(OUT_A);Wait(400);}                 //ライトが動かないことを確認
    else if((SENSOR_1>LH)&&(SENSOR_3>LH)){   //動いていなければ
    ranch ();
    break;}                 //弾を発射する
                 }
Off(OUT_A+OUT_C);
}
***問題点 [#x0cc2ec0]

***工夫したところ [#md59c81a]

**HIDAKAのプログラム (課題1) [#a754246c]
 #define shot(t) OnFwd(OUT_B);Wait(t);Off(OUT_B);
 #define sTop(T) Off(OUT_A+OUT_C);Wait(T);
    #define shot(t) OnFwd(OUT_B);Wait(t);Off(OUT_B);
    #define sTop(T) Off(OUT_A+OUT_C);Wait(T);
 
 sub turn_right()
 {OnFwd(OUT_A);OnRev(OUT_C);}
    sub turn_right()
    {OnFwd(OUT_A);OnRev(OUT_C);}
 
 
 task main(){
 SetSensor(SENSOR_1,SENSOR_LIGHT);
 SetSensor(SENSOR_3,SENSOR_LIGHT);
 C=0;
 while(true)
 {
 turn_right();
 until(SENSOR_3 > 40);
 sTop(100)
 turn_right();
 until(SENSOR_1 > 40);
 sTop(100)
 shot(42)
 turn_right();
 Wait(50);
 
 }
 }
    task main(){
    SetSensor(SENSOR_1,SENSOR_LIGHT);
    SetSensor(SENSOR_3,SENSOR_LIGHT);
    C=0;
    while(true)
      {
       turn_right();
       until(SENSOR_3 > 40);
       sTop(100)
       turn_right();
       until(SENSOR_1 > 40);
       sTop(100)
       shot(42)
       turn_right();
       Wait(50);
      }
    }
***問題点[#qb36e301]
***工夫したところ [#r88c28b2]
*コメント [#u1600bd5]
コメントをどうぞ!
#comment


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