- 追加された行はこの色です。
- 削除された行はこの色です。
[[2008b]]
#contents
*目的 [#t83d66c2]
インストの「top secret」を参考にして、白いホイールを投げるロボットを作成し、以下の動きをするようにプログラムを作成せよ。 (重複しないように一人一つ以上のプログラムを作成すること)
インストの「top secret」を参考にして、白いホイールを投げるロボットを作成し、~
以下の動きをするようにプログラムを作成せよ。 ~
(重複しないように一人一つ以上のプログラムを作成すること)~
1. 全方向から懐中電灯の方向を探しだし、懐中電灯の手前50cmまで進んで懐中電灯を狙ってブロックを投げる。懐中電灯は動かさない。
2. 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば50cmの距離まで近づいて懐中電灯を狙ってブロックを投げる。
*マシン [#jcb36dbd]
*前に二つのタイヤ、後ろにキャスターを付け、一つのギアで前進&回転するようにした。
全体図:~
&ref(090121_223719.jpg);
ギア部分:~
&ref(090121_223904.jpg);
投擲部分:~
&ref(090121_223802.jpg);
後ろキャスター:~
&ref(090121_223840.jpg);
*プログラム [#ld3bf57b]
動作確認を
***動く明かりを追いかけ、停止したら投げるプログラム [#mfd6631e]
#define SHOOT OnFwd(OUT_A);Wait(10);Off(OUT_A); //ホイールを投げる
#define THRESHOLD 40 //閾値
int count_up;
void GO(int t)//前進用
{
OnFwd(OUT_B);
Wait(t);
Off(OUT_B);
}
void TURN(int t)//回転用
{
OnRev(OUT_B);
Wait(t);
Off(OUT_B);
}
task main ()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);//ライトセンサ:右
SetSensor(SENSOR_3,SENSOR_LIGHT);//ライトセンサ:左
SetPower(OUT_A,1);
count_up = 0;
while(1){
if ((SENSOR_1 < THRESHOLD)&&(SENSOR_3 < THRESHOLD))//右も左も明かりを関知しない場合
{
count_up = 0;
TURN(5);
Wait(20);
} //前進する
if((SENSOR_1 > THRESHOLD)&&(SENSOR_3 < THRESHOLD)&&(count_up==0))//明かりを関知し、かつカウントをしていない時
{
count_up = count_up + 1;
Wait(100);
}//カウントを入れ、明かりが動くか待つ
if((SENSOR_1 < THRESHOLD)&&(SENSOR_3 > THRESHOLD)&&(count_up==1))//明かりを関知し、かつカウントが入っているとき
{
Off(OUT_B);
SHOOT
} //止まって投げる
}
}
*感想/反省 [#r7e4579c]
・作業時間があまりとれず、とても難しかった。~
・
*コメントをどうぞ [#d12d711f]
#comment