[[2015a/Member]] 目次(ロボ) #contents * 課題 [#bcd2fde6] 半径1m以内にある懐中電灯を探して、懐中電灯にピンポン玉を当てるロボットを製作すること。 ただし、ピンポン玉を放つ距離は10〜30cmである。 ロボット本体が懐中電灯に接触しない限りどこからピンポン玉を放っても良いこと。 * ロボット本体の説明 [#a6947f86] ** 3つのモーターの用途 [#y196ef65] -車体の前後方向移動 (モータA,C) -車体の旋回 (モータA,C) -アームの開閉 (モータB) ** センサーの用途 [#ocfd73aa] -光センサー (センサー3) 前を見るようにつけ懐中電灯の光をとらえる 本ロボットは二輪駆動であり、後部に補助輪がついた非常に簡単な構造をしている。 * プログラムの説明 [#icf16dd0] ** 光量の最大値を求めるプログラムとシュートのプログラム [#p86fab44] #define TURN_TIME 395//一回転する時間 int light_max; //lightセンサーの値の最大値 int time_max; //lightセンサーの値が最大の時の時間 task main(){ SetSensor(SENSOR_3, SENSOR_LIGHT); ClearTimer(1); if (Timer(1) <=10000) { light_max = 0; time_max = 0; OnFwd(OUT_A); OnRev(OUT_C); start GetMax;} else { start shoot;} } //lightセンサーが最大になる時の値、及び時間決定// task GetMax(){ ClearTimer(0);//タイマーを初期化 while (FastTimer(0) <= TURN_TIME) {//一回転して一番明るいところを探す if (SENSOR_3 > light_max){ light_max=SENSOR_3; //SENSOR_3の値が現在のlight_max time_max=FastTimer(0); //SENSOR_3が最大の時の時間を記録 } } //回転して// if (time_max <= TURN_TIME/2) {//最明点≦180°のとき Wait(time_max); //360もう一度回る } else {//最明点>180°のとき Toggle(OUT_A);//反転 Toggle(OUT_C);//反転→左旋回 Wait(TURN_TIME-time_max); } start Chase; } //光を追いかける動作// task Chase(){ Float(OUT_AC); while(true){ if (SENSOR_3 >= light_max){ (OUT_A); Float(OUT_C); } else { Float(OUT_A); OnFwd(OUT_C); } } } //シュートする動作// task shoot () { OnFwd(OUT_B); //開く Wait(10); OnRev(OUT_AC);Wait(10); OnFwd(OUT_AC);Wait(25); } * 改善した点 [#sa2ab6c6] -初期のロボットは前部のアームが開閉せず、ピンポン玉の挙動が安定しなかったが、開閉式にすることで安定した仕事ができるようになった *結果 [#l4980d10] *反省 [#k5a92a87] タイマーでだいたいの距離を測ることになっているため