[[2011a]]


#contents
目次

*課題内容 [#wf02aa61]
**ランタンに向かってテニスボールを転がす(または運ぶ)ロボットの作成 [#f8eb0f78]
1転がす(ライントレース)~
2最短距離で運ぶ(自由走行)~
ロボットを作成せよ。ただし、1の場合はテニスボールの置いてある場所から直接転がし、 2の場合はその場所から最短距離で運ぶこと。ボールを探す際にはラインに沿っても沿わなくてもよい。

*メンバー [#kaa1df5d]
-中島
-すがはら

*今回のロボット [#o6433c71]
**タッチセンサー [#peff3869]
#ref(touch_sennsor2.JPG)
**アーム [#hefc2ca6]
#br
-モーターの回転でアームにつながる軸が回転することでアームが上下し、ボールをつかませた。
#br
#ref(arm.JPG)
-左右の歯車の数を変えることで左右のアームがそれぞれ異なる回転をするようにした。
#ref(gia_zoom.JPG)
-上から見た歯車部分。
#br
-左右の歯車の数を変えることで左右のアームがそれぞれ異なる回転をさせ、両方のアームが上下同じ向きに動くようにした。
#br
#ref(gia_zoom1.jpg)
#br
-上から見た歯車部分
#br
#ref(gia_highview.JPG)
#br
**全体図 [#oa9dd39e]
#br
-タッチセンサー→アーム、歯車部分→ランタンを探す光センサーと重ね、取り付けた。~
 バランスをとるため黄色の本体はやや後ろにした。
#br
#ref(robotto.JPG)
#br
-↓ライントレースのセンサーが前に付かなかったため後ろにつけた。
#br
#ref(rign_sennsor.JPG)

#br
*プログラム [#b9f2eb27]
**すがはらのやつ [#q90c65a8]
 #define THRETHOLD 40	//ライントレースの閾値 40
 #define SPIN 500	//一回転する時間
今回の課題のライントレースはセンサー1個で行うため、ライン上の時はライン外の白の部分を探させ、ラインから外れたらラインを探させた。そのためマシンはジグザグに進んでライントレースするようになった。

 #define THRETHOLD 40	                         //ライントレースの閾値 40
 #define SPIN 500	                         //一回転する時間
 
 task main()
 {
 	SetSensor(SENSOR_1,SENSOR_TOUCH);	//センサー1をタッチセンサーに
 	SetSensor(SENSOR_2,SENSOR_LIGHT);	//センサー2を光センサーに(ランタンを探す)
 	SetSensor(SENSOR_3,SENSOR_LIGHT);	//センサー3を光センサーに(ライントレース)
 	int l_max=0;		//l_maxを定義(初期値0)
 	int t_max=0;		//t_maxを定義(初期値0)
 	int l_max=0;		               //l_maxを定義(初期値0)
 	int t_max=0;		               //t_maxを定義(初期値0)
 
 
 	while(true){
 	start follow_line;		//follow_lineのタスク(ライントレース)を開始
 	until (SENSOR_1==1);	//ボールがセンサーに当たったら
 	stop follow_line;		//follow_lineのタスクを一旦停止
 	start follow_line;		      //follow_lineのタスク(ライントレース)を開始
 	until (SENSOR_1==1);	             //ボールがセンサーに当たったら
 	stop follow_line;		     //follow_lineのタスクを一旦停止
 
 	OnFwd(OUT_B);		//アームを閉じてボールを固定
 	OnFwd(OUT_B);		            //アームを閉じてボールを固定
 	Wait(10);
 
 	ClearTimer(0);
   	 while(FastTimer(0)<=SPIN)
 	 {
 	   OnFwd(OUT_A);
 	   OnRev(OUT_C);		//回転開始
 	 if(SENSOR_2>l_max)		//ランタンの位置(光の最大値)を探す
 	  {l_max=SENSOR_2;		//最大値をl_maxと定義
 	   t_max=FastTimer(0);}	//ランタンを見つけた時間をt_maxと定義
 	   OnRev(OUT_C);		   //回転開始
 	 if(SENSOR_2>l_max)		   //ランタンの位置(光の最大値)を探す
 	  {l_max=SENSOR_2;		   //最大値をl_maxと定義
 	   t_max=FastTimer(0);}	           //ランタンを見つけた時間(FastTimer(0)<=SPINの経過時間)をt_maxと定義
 	 }
 
 	    OnFwd(OUT_C);
  	    OnRev(OUT_A);
 	    Wait(SPIN-t_max);	//ランタンの向きへ方向転換
 	    Wait(SPIN-t_max);	           //ランタンの向きへ方向転換
 	    Off(OUT_A+OUT_C);	
 	    Wait(50);
 	    OnRev(OUT_B);
 	    Wait(20);		//アームを開き、ボールを蹴り出す準備
 	    Wait(20);		           //アームを開き、ボールを蹴り出す準備
 	    Off(OUT_B);
 	    Wait(50);
 	    OnFwd(OUT_A+OUT_C);
 	    Wait(50);		//キック!!
 	    Wait(50);		           //キック!!
 	    Off(OUT_A+OUT_C);
 	    OnRev(OUT_A+OUT_C);
 	    Wait(50);		//元の位置に戻る
 	    Wait(50);		           //元の位置に戻る
 	    OnFwd(OUT_A);
 	    OnRev(OUT_C);
 	    Wait(SPIN-t_max);	//元の向きに戻る
       }				//while文の先頭に戻って再びライントレースを開始
 	    Wait(SPIN-t_max);	           //元の向きに戻る
       }				        //while文の先頭に戻って再びライントレースを開始
 }
 
 task follow_line()			//follow_lineのタスク(ライントレース)
 task follow_line()			   //follow_lineのタスク(ライントレース)
 {
 	 while(true){
 	  if(SENSOR_3<THRETHOLD)		//センサーがライン上(黒)のとき	
         {OnFwd(OUT_A); Off(OUT_C);}	//右に曲がる
 	  if(SENSOR_3>THRETHOLD)		//センサーがライン外(白)のとき
         {OnFwd(OUT_C); Off(OUT_A);}	//左に曲がる
 	  if(SENSOR_3<THRETHOLD)          //センサーがライン上(黒)のとき	
         {OnFwd(OUT_A); Off(OUT_C);}	  //右に曲がる
 	  if(SENSOR_3>THRETHOLD)	  //センサーがライン外(白)のとき
         {OnFwd(OUT_C); Off(OUT_A);}	  //左に曲がる
 	  
 	 }
 }
**中島のやつ [#ucba0017]

*反省・感想 [#a2189b7b]

-アームの動かし方、取り付けにとても苦労した。横に開閉するアームを取り付けたかったが、うまく取りつかなく断念してしまった。
-ランタンを探すセンサーの周りを囲ったりして精度を上げる工夫ができず、うまくランタンを探してくれなかった。でも部屋を暗くしたときはほぼ成功したのでよかったと思う。
-ロボットはいろいろ苦労したが、アーム部分など工夫したいいものが作れたと思う。
-複数のタスクを使ってプログラムしたが、途中でフォロータスクを止めたりできて便利だった。またメインタスクもすっきりして見やすい気がしたので、ロボコンでも使っていきたい。
*コメント [#hdddc3c7]
#comment


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