- 追加された行はこの色です。
- 削除された行はこの色です。
[[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);}
}
②課題3-2及び3-3
*(4)工夫した点 [#fe3cd122]
*(5)改善点 [#c0c1523a]
*(6)感想 [#fd1f1feb]