[[2016a/Member]]

*課題 [#fe6c70fc]
経路を黒い線にそって動くロボットを作成する。
#ref(2016a/Member/nemunemu/Mission2/2016a-mission2.png,center,100%,ko-su)
C地点 → S左折 → P左折 → Q直進 → Q直進 → R右折 → P左折 → A地点の経路を担当した。
*構造 [#u18e4d80]
本体の左右にモータを1つ、タイヤを2つずつ付けて動かした。
本体中央に下向きに光センサを付けた。
#ref(2016a/Member/nemunemu/Mission2/IMG_3448.JPG,left,17%,ko-su)
#ref(2016a/Member/nemunemu/Mission2/IMG_3447.JPG,center,17%,ko-su)
#ref(2016a/Member/nemunemu/Mission2/IMG_3449.JPG,right,17%,ko-su)
写真は左から順に前、後ろ、下から見た様子。
*プログラム [#b4107769]
<定義>
 #define black 39  //黒と認識する値
 #define white 50  //白と認識する値
 #define turn_left_i Off(OUT_A); OnFwd(OUT_C);      //大きく左折
 #define turn_left_ii OnRev(OUT_A); OnFwd(OUT_C);   //小さく左折
 #define turn_right_i OnFwd(OUT_A); Off(OUT_C);     //大きく右折
 #define turn_right_ii OnFwd(OUT_A); OnRev(OUT_C);  //小さく右折
 #define go_forward OnFwd(OUT_AC);  //直進
 #define STEP 1  // 一回の判定で進む時間

<サブルーチン>
 sub susume()    //ライントレース
 {
   SetSensor(SENSOR_2, SENSOR_LIGHT);
   ClearTimer(0);
         while (FastTimer(0)<=23)               // ファストタイマーが0.23秒以下の間で
	     if (SENSOR_2 < black){            // 線上なら
	       turn_left_ii;                   // 左へ
	     } else if (SENSOR_2 < white){     // 境界線付近なら
	       go_forward;	               // 前進
	       ClearTimer(0);	               // タイマーリセット
	     } else {                          // 線上でなければ
	       turn_right_ii;                  // 右へ
	       ClearTimer(0);		       // タイマーリセット
	     }
 	 Wait(STEP);
 	 PlaySound(SOUND_UP);		       //音
  Off(OUT_AC);
  Wait(100);   //交差点で1秒止まれ
 }
ロボットに黒い線をまっすぐ走らせるために、境界線でライントレースを行った。境界線を走らせる際、光センサーの右側に黒い線、左側に白い部分がくるようにした。光センサーが黒だと判断したら左に曲がるように、白だと判断したら右に曲がるように、それ以外ならまっすぐ進むようにした。またこのときに黒以外と判断したらタイマーを0にする。そして、タイマーが0.23秒になる、つまり、左へ行っても黒が続く、そんなところを交差点と判断する。交差点と判断したらわかるように音を鳴らす。


 sub sasetsu()   //交差点を左折
 {
   turn_left_i;
   Wait(240);
   Off(OUT_AC);
 }

 sub usetsu()   //交差点を右折
 {
   turn_right_i;
   Wait(240);
   Off(OUT_AC);
 }

 sub massugu()  //交差点を直進
 {
   go_forward;
   Wait(120);
   Off(OUT_AC);
 }

<本文>
 task main()
 {
    repeat(2)                  //以下の行動を2回繰り返す
	 {
		 susume();    //1,C → S  2,S → P 
		 sasetsu();   //1,Sを左折   2,Pを左折
	 }
    repeat(2)                  //以下の行動を2回繰り返す
	 {
		 susume();    //1,P → Q  2,Q → Q
		 massugu();   //1,Qを直進   2,Qを直進
	 }
    susume();                  //Q → R
    usetsu();                  //Rを右折
    susume();                  //R → P
    sasetsu();                 //Pを左折
    susume();                  //P → A
    massugu();                 //Aへ入る
 }
*感想 [#ebb2a941]
とりあえず、最後まですすめることができなかったのが悔しかった。
問題点は、交差点を確実に認識させようとすると、カーブの部分を交差点と誤認してしまった点。
でも、2つの交差点を綺麗に曲がってすすめることができた時はすごく嬉しかったので次はゴールできる喜びを味わいたい。


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS