*課題3 [#ub8c3693]
半径1m以内にある懐中電灯を探して、懐中電灯にピンポン玉を当てるロボットを製作しなさい。ロボット本体が懐中電灯に接触しない限りどこからピンポン玉を放ってもよい。

*ロボットの説明 [#f21e5dde]
ロボットはロボコン用に製作した、アーム付きロボットの前方に光センサ―搭載させた。アームによってピン球をしっかり保持、回転にも耐えることができる。
*プログラムの説明 [#p3c2ba78]
ロボットを左回転させ、最大光量を探し出しその回転時間を一周必要時間から引くことで場所を割り当てる。
**定義 [#b4732f53]
 #define turn_right OnFwd(OUT_A);OnRev(OUT_C);//右に曲がる
 #define turn_right OnFwd(OUT_A);OnRev(OUT_C);//右に曲がる
 #define turn_left OnFwd(OUT_C);OnRev(OUT_A);//左に曲がる
 #define sycle_time 360//本体が1回転する時間
 #define stnaby_shoot OnFwd(OUT_B);Wait(200);Off(OUT_B);//アームを解放
 #define shoot_action OnFwd(OUT_AC);Wait(150);Off(OUT_AC);//前進によるシュート

**探索 [#q3804518]
 task main()
 {
 	 SetSensor(SENSOR_2,SENSOR_LIGHT);
	 int rightmax=0;
	 int timemax=0;
	 ClearTimer(0);
	 turn_left;//左に曲がる
	 while(FastTimer(0)<sycle_time){
	  if(SENSOR_2>rightmax){
	  rightmax=SENSOR_2;
	  timemax=FastTimer(0);
	  } 
	 }

一周に必要な時間中に最大光量を探し出し、その時点の時間を記録する。
**シュート [#z617fdc1]
 	 	 Off(OUT_AC);
	 turn_right;右に曲がる
	 Wait(sycle_time-timemax);//逆回転時間計算
	 Off(OUT_AC);
	 stnaby_shoot;//アームを解放
	 shoot_action;//前進(ボールをシュート)
	 Wait(300);
	 Off(OUT_B);
 }
最大光量時の時間から一周の時間を引くことで懐中電灯の正面まで逆回転する。あとはアームを広げて前進することでシュートとなる。

*反省 [#u499dfd7]
ロボットがロボコンに向け改造されていたので多くの試行回数はなかった。そのため命中したのは少なく、まだまだ改良の余地があるプログラムであった。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS