[[2007b/A3]]
*目次 [#s1ecb3d6]
#contents
*(1)課題の内容 [#sf0cadb0]

課題3:懐中電灯に向かってブロックを投げるロボット †
インストの「top secret」を参考にして、ブロック(一番太いホイール)を投げるロボットを作成し、以下の動きをするようにプログラムを作成せよ。 (重複しないように一人一つ以上のプログラムを作成すること)

①全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。 

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

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

ただし、モータ、光センサ、タッチセンサはそれぞれ2個まで使用可。懐中電灯の代わりに携帯のライトなどを利用してもよい。

*(2)ロボットの説明 [#zc25e131]

①ディファレンシャル・ギア

②作動部の説明

③ブロックを投げる部分

*(3)プログラム [#sd6eae49]

①課題3-1

(a)
 #define throw_time 80
 #define run_time 60
 int max ;

 task main()
 {SetPower(OUT_B,0);
 SetSensor(SENSOR_1,SENSOR_TOUCH);
 SetSensor(SENSOR_2,SENSOR_LIGHT);

 ClearTimer(0);
 while(Timer(0)<run_time)
 {max=0;
 OnFwd(OUT_B);
 if(SENSOR_2>max){max=SENSOR_2;}
 }

 OnFwd(OUT_B);
 until(SENSOR_2<=max+10 || SENSOR_2>=max-10)
 Float(OUT_B);

 OnFwd(OUT_A);
 Wait(throw_time);
 OnRev(OUT_A);
 until(SENSOR_1==1);
 Float(OUT_A+OUT_B);
 } 

(b)
#define throw_time 80
#define run_time 30 
int max ;
int a ;
 #define throw_time 80
 #define run_time 30 
 int max ;
 int a ;

task main()
{
SetSensor(SENSOR_1,SENSOR_TOUCH);
SetSensor(SENSOR_2,SENSOR_LIGHT);
 task main()
 {SetPower(OUT_B)
 SetSensor(SENSOR_1,SENSOR_TOUCH);
 SetSensor(SENSOR_2,SENSOR_LIGHT);

ClearTimer(0);
while(Timer(0)<=run_time)
{max=0;
OnFwd(OUT_B);
if(SENSOR_2>max){max=SENSOR_2;ClearTimer(1);}
}
a=Timer(1);
 ClearTimer(0);
 while(Timer(0)<=run_time)
 {max=0;
 OnFwd(OUT_B);
 if(SENSOR_2>max){max=SENSOR_2;ClearTimer(1);}
 }
 a=Timer(1);

ClearTimer(2);
OnRev(OUT_B);
until(Timer(0)<a)
 ClearTimer(2); 
 OnRev(OUT_B);
 until(Timer(0)<a)

OnFwd(OUT_A);
Wait(throw_time);
OnRev(OUT_A);
until(SENSOR_1==1);
Float(OUT_A+OUT_B);
}
 OnFwd(OUT_A);
 Wait(throw_time);
 OnRev(OUT_A);
 until(SENSOR_1==1);
 Float(OUT_A+OUT_B);
 }

(c)
 #define throw_time 10
 #define run_time 1
 #define TH 5
 int a ;

 task main()
 {
 SetSensor(SENSOR_1,SENSOR_LIGHT);
 SetSensor(SENSOR_2,SENSOR_TOUCH);
 SetSensor(SENSOR_3,SENSOR_LIGHT);

 a=SENSOR_1-SENSOR_3
 if(a+TH>0){OnRev(OUT_B);Wait(run_time);}
 if(a-TH>0){OnFwd(OUT_B);Wait(run_time);}
 if(0<=a-TH || a+TH>0)
 {OnFwd(OUT_A);Wait(throw_time);OnRev(OUT_A);until(SENSOR_2==1);;Float(OUT_A+OUT_C);}
 }  

&#9313;課題3-2及び3-3

*(4)工夫した点 [#fe3cd122]

*(5)改善点 [#c0c1523a]

*(6)感想 [#fd1f1feb]


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