リンク [[2016a/Member]]
#contents

*課題内容 [#ue4a4af8]
班のメンバーのいずれか一人の似顔絵をA4の紙にかく。
*機体の解説 [#s0575ed3]
全体はこのようになっている。~
&ref(zentai.png);~
後輪を外し半球形のブロックを用いたのは、機体回転時の摩擦の軽減のためと、どの方向からでも紙にスムーズに乗り上げられるようにするためである。~
&ref(usiro.png);~
今回僕達のチームではペンをタイヤ2つで挟み込み上下運動させる機構を用いた。すこし大きくなってしまったが、より安定した挙動を求めた結果である。~
また初めはマジックペンを使っていたが、ペン先の乾き具合によって摩擦が変わり挙動が不安定になってしまっていたので、ペンをシャープペンシルに変えることで安定させた。~
&ref(IMG_20160603_162207900.jpg);~
各パーツの破損対策として、負荷がかかると空回りする歯車を使ったり、それでも打ち消せない負荷がかかると機体そのものが分解する構造にしたりした。~
&ref(gia.jpg);~
またこのように機体は車体、本体、ペン稼働部の3つに簡単に分解できるように設計しておいた。~
これにより改良、改善が容易となった。~
&ref(bunkai.jpg);~



*プログラムの解説 [#d9de5ab7]
 #define MoveTime 8
 task main()
 {
	Setting();
     //顔と髪
     //::::::::::::::::::::::::::::::::::::::
	pen_move();
	OnRev(OUT_C);
	Wait(1000);	
	turn(45);
	move(5);	
	turn(30);
	move(5);	
	turn(30);
	move(5);
     //:::::::::::::::::::::::::::::::::::::
 
     //メガネ
     //:::::::::::::::::::::::::::::::::::::
     //移動
         pen_back();
	turn(30);
	turn(45);
     //左レンズ
	OnRev(OUT_AC);
	Wait(20);
	Off(OUT_AC);
	pen_move();
	OnFwd(OUT_C);
	OnRev(OUT_A);
	Wait(660);
	Off(OUT_AC);
     //ふち
	move(3);
     //右レンズ
	pen_back();
	OnRev(OUT_AC);
	Wait(36);
	Off(OUT_AC);
         pen_move();
	OnFwd(OUT_C);
	OnRev(OUT_A);
	Wait(400);
	Off(OUT_AC);
     //:::::::::::::::::::::::::::::::::::::

     //口
     //:::::::::::::::::::::::::::::::::::::
     //口の延長線上に移動
         pen_back();
	OnRev(OUT_AC);
	Wait(48);
	Off(OUT_AC);
	Wait(100);
     //方向転換
	OnFwd(OUT_A);
	OnRev(OUT_C);
	Wait(50);
	Off(OUT_AC);
     //口の端まで移動
	OnFwd(OUT_AC);
	Wait(50);
	Off(OUT_AC);
     //口を書く
	pen_move();
	OnFwd(OUT_AC);
	Wait(50);
	Off(OUT_AC);
	pen_back();
     //:::::::::::::::::::::::::::::::::::::
 }
ここまでがプログラムの概要である。以下は自作関数について。
 void Setting()//タイヤ及びペンの出し入れの力を調節する関数
 {
	SetPower(OUT_B,4);
	SetPower(OUT_AC,1);		
 }

 void pen_move()//ペンを接地させる関数
 {
	OnRev(OUT_B);
	Wait(100);
 }

 void pen_back()//ペンを紙から離す関数
 {	
	OnFwd(OUT_B);
	Wait(100);
	Off(OUT_B);
 }

 void turn(int kakudo)//機体を時計回りに回転させる関数
 {	
	OnRev(OUT_C);
	OnFwd(OUT_A);
	if(kakudo ==3)
		Wait(5);
	else if(kakudo==30)
		Wait(32);
	else if(kakudo==45)
		Wait(48);
	Wait(7);
 }

 void move(int cench)//機体をセンチ単位で前進させる関数
 {
	int time=cench*MoveTime;
	
	OnRev(OUT_AC);
	Wait(time);
	Off(OUT_AC);
	Wait(100);
 }

*完成画像 [#a257670d]
会心の出来が左である。右は摩擦などの関係で失敗したもの。どちらも走らせているプログラムは同一である。なお一番頑張ったのはふちと右レンズの位置の調整である。~
&ref(成功.jpg);
&ref(失敗作.jpg);
*まとめ [#t6820089]
今回の似顔絵は床との摩擦や電池の残りなどで大きくズレが起こってしまい、安定した絵が書けなかったのが残念であった。~
プログラム、機体ともに多くの修正が必要で時間もかかり、とても大変だったものの、その分書けた時の喜びは大きかった。~
課題2ではメンバーも変わり課題そのものも難しくなるが、自分のできることをどんどん増やせるように精一杯頑張りたい。

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