#contents

*課題1 似顔絵を描くロボット [#d720d8f9]

**ロボット本体 [#i0429924]

相方が考えました。
~左右のバランスを均等に配分するよう心掛けたようです。
~ペンの位置については、車軸上に配置するようにしたようです。
~このことによって、前に線を描いた位置から、次の線の始点があまりずれないようになるということを実現したそうです。
~ペンの上げ下げに四つの小さな車輪を使ってペンをスムーズに上げ下げさせる考えは、ナイスな考えだと思います。
#ref(2012a/A3/maabo/M1/DSC_0019.JPG,100%,ロボット)

**似顔絵 [#t68f5d72]
-完成予想図
#ref(2012a/A3/maabo/M1/figure.png,100%,完成予想図)
-ロボットが描いた似顔絵
#ref(2012a/A3/maabo/M1/portrait.jpg,100%,完成予想図)

**プログラム [#v12ac232]
 #define LIFT_TIME 100
 #define OFF_TIME 200
 #define UP 1
 #define DOWN 0
 #define LIFT_TIME 100 //ペンの上げ下げの時間
 #define OFF_TIME 200 //モータを切っておく時間
 #define UP 1 //ペンを上げる
 #define DOWN 0 //ペンを下げる
 #define SPEED 100//モータの回転速度
 #define MOVE_TIME_1 220
 #define MOVE_TIME_2 100
 #define TURN_TIME 500
 #define MOVE_TIME_1 220 //移動の時間
 #define MOVE_TIME_2 100 //
 #define TURN_TIME 500 //ターンの速度
 
//プロトタイプ宣言
 void Turn_R(int t,int speed_C,int speed_A);
 void Turn_L(int t,int speed_C,int speed_A);
 void Pen_pos(int upDown,int t);
 void Go_forward(int t);
 void Go_back(int t);

 
 task main()
 {
 	int i,j;
  	int turn_ago=280;	
 
 	Go_forward(MOVE_TIME_1);
 	
 	for(i = 0;i <3;i++)
 	for(i = 0;i <3;i++)//顎を描く
 	{
 		if(i == 2)
 		{
 			turn_ago=300;
 		}
 		Turn_R(turn_ago,SPEED,SPEED);
 		Go_forward(150);
 	}
 	Turn_R(turn_ago,SPEED,SPEED);
 	
 	Go_forward(MOVE_TIME_1);
 	Turn_R(1900,SPEED,0);
 	Turn_R(250,SPEED,SPEED);
 	Go_forward(MOVE_TIME_2);
 	for(j = 0;j < 3;j++)
 	for(j = 0;j < 3;j++)//髪を描く
 	{
 		Turn_R(TURN_TIME,SPEED,SPEED);
 		Go_forward(MOVE_TIME_2);
 		Turn_L(TURN_TIME,SPEED,SPEED);
 		Go_forward(MOVE_TIME_2);
 		
 	}
 	Turn_R(TURN_TIME,SPEED,SPEED);
 	Go_forward(MOVE_TIME_2);
 	Pen_pos(UP,LIFT_TIME);
 }
 
 void Turn_R(int t,int speed_C,int speed_A)
 void Turn_R(int t,int speed_C,int speed_A)//右へ曲がる
 {
 	if(speed_C != 0 && speed_A != 0)
 	{
 		OnFwd(OUT_C,speed_C);
 		OnRev(OUT_A,speed_A);
 	}
 	else if(speed_C != 0 && speed_A == 0)
 	{
 		OnFwd(OUT_C,speed_C);
 	}
 	else 
  	{
 	}
 	Wait(t);
 	Off(OUT_AC);
 	Wait(OFF_TIME);
 } 
 
 void Turn_L(int t,int speed_C,int speed_A)
 void Turn_L(int t,int speed_C,int speed_A)//左へ曲がる
 {
 	if(speed_C != 0 && speed_A != 0)
 	{
 		OnFwd(OUT_A,speed_A);
 		OnRev(OUT_C,speed_C);
 	}
 	else if(speed_A != 0 && speed_C == 0)
 	{
 		OnFwd(OUT_A,speed_A);
 	}
 	else 
 	{
 	}
 	Wait(t);
 	Off(OUT_AC);
 	Wait(OFF_TIME);
 }
 
 void Pen_pos(int upDown,int t)
 void Pen_pos(int upDown,int t)//ペンの上げ下げ
 {
 	if(upDown == 0)//ペンを下げる
 	{
 		OnRev(OUT_B,90);
 		Wait(t);
 	}
 	else if(upDown == 1)//ペンを上げる
 	{
 		OnFwd(OUT_B,90);
 		Wait(t);
 	}
 	else
 	{
 	}
 
 	Off(OUT_ABC);
 	Wait(OFF_TIME);
 
 }
 
 void Go_forward(int t)
 void Go_forward(int t)//前進
 {
 	OnFwd(OUT_AC,SPEED);
 	Wait(t);
 	Off(OUT_AC);
 	Wait(OFF_TIME);
 }
 
 void Go_back(int t)
 {
 	OnRev(OUT_AC,SPEED);
 	Wait(t);
 	Off(OUT_AC);
 	Wait(OFF_TIME);
 }

**感想 [#j8dc9423]

プログラムで角度などの調整が難しかったです。
~あと、ペンに関する操作が不十分だったと思います。
~目と口を描く時間がなかったので次の課題では、時間も考えて作るようにしたいと思った。

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