[[2015a/MemberOnly]]
#contents
*課題の説明 [#k72c4f79]
半径1m以内にある懐中電灯を探して、懐中電灯にピンポン玉を当てるロボットを製作しなさい。
ロボット本体が懐中電灯に接触しない限りどこからピンポン玉を放ってもよい。
*ロボットの説明 [#p0ea36fd]
**全体図 [#lfd2b694]
#ref(./honntai2.png)
課題2のロボット本体の光センサーの位置を変えただけの機体である。
ロボット本体については、
[[2015a/Member/sagasa/Mission2]]
を参照。
**光センサー [#s750e3ed]
#ref(./sensor2.png)
前方に良く反応する位置に配置した。
*プログラムの説明 [#q7db1520]
**定義 [#y6190d6d]
#define straight OnFwd(OUT_AC); //直進のプログラム
#define back OnRev(OUT_AC); //後退のプログラム
#define kaiten_r OnFwd(OUT_A); OnRev(OUT_C); //右旋回するプログラム
#define kaiten_l OnRev(OUT_A); OnFwd(OUT_C); //左旋回するプログラム
#define STOP Off(OUT_AC); Wait(20); //停止するプログラム
#define shoot back; Wait(50); straight; Wait(80); //ボールをシュートするプログラム
#define spin_time 345 //旋回する時間
**メインタスク [#d67c1f71]
task main()
{ int max = 0; //光センサーがkaiten_r中に検知する光の明るさの値の最大値の初期値
int time = 0; //光センサーが最大値を更新したさいのタイマー0の値の初期値
SetSensor(SENSOR_1,SENSOR_LIGHT); //光センサーをセンサー1にセットする。
ClearTimer(0); //タイマー0をセットする。
while(FastTimer(0) <spin_time)
{ kaiten_r;
if(SENSOR_1 > max) {
max = SENSOR_1;
time = Timer(0);
time = FastTimer(0);
} //spin_timeの値になるまで右旋回を行いその間で光センサーがmaxの値を超える値を検知するたびに、maxの値をその値に更新し続け、その時のタイマー0の値もtimeの値に更新し続ける。
}
STOP; //停止//
int time2 = 345-time; //右旋回した時間からtimeの値を引いてtime2に定義する。//
kaiten_l; Wait(time2); //time2の値まで左旋回する。//
STOP; //停止//
OnFwd(OUT_B); Wait(6); //アームを開く
shoot; //シュートする。//
STOP; //停止//
}
まず1回転して、懐中電灯の位置を光センサーが示す明るさの値の最大値を更新する形で記録し
逆回転でその位置に来たら停止して、ボールをシュートする。
*反省点 [#ad26600c]
ロボコンなどがあったので、実際にロボットを動かしてすることはあまりできなかった。急いで行ったので、まだまだ工夫できる箇所があったかもしれない。