*似顔絵ロボットの製作 [#h33faf51]
目次
#contents

*課題内容 [#ga23cf62]
A4の用紙に、相方の似顔絵を描くロボットを製作する。
細かなルールは以下の通りである。
-用紙をテープなどで固定してはいけない。
-1人につき1つ以上のプログラムを制作すること。
-ペン以外の部品は、キットに含まれる物を使用すること。
-キットに付属の高価な輪ゴムは切れやすいので、扱う際は十分注意すること。
-改良や調整をしやすくするため、ロボット本体だけでなく、プログラムについても可能な部分についてはサブルーチンや関数、マクロなどを使って部品に分けること。

*メンバー [#aa01cd0c]
-ぐっP:工学部 電気電子工学科 ロボットもプログラムも久しぶり
-ひろ:

*ロボット紹介 [#e373491f]

**全体像 [#ffe0da88]
全体はこんな感じです。ペンの上げ下げにアームを用いた「アーム型」ロボットです。
**アーム [#e9724257]
&ref(2011b/A2/課題1左/arm.jpg,80%,アーム); &ref(2011b/A2/課題1左/gear.jpg,80%,ギア);

両側からペンを挟み込むようにして固定します。ギアは、上下速度を遅くするために段分けして調整しました。

また、ペンを自重でおろすため、アームの先に気休め程度のおもりとしてブロックをつけています。
**キャスター [#g251b922]
-第一弾

 ガイドブック46ページのキャスターを参考に製作。

 問題点:走行中に用紙に引っかかり、用紙がずれてしまう。
-第二弾

 用紙に引っかからないように、キャスターを本体の内側に設置することに。取り付け場所が狭いため、摩擦の少なそうな部品で代用。

 問題点:それでも摩擦が生じ、用紙が曲がってしまう。
-第三弾

 ならばいっそのこと、キャスターを用紙の外に出してしまおう!ということで製作。

 問題点:動作の際に、非常にスペースをとる。しかし、スペースさえ確保できれば今までで一番描きやすい。
*予定図面 [#s90c82c1]
**ぐっP作「ひろの顔」 [#v39bdb58]
+輪郭を円で描く
+交互にバックして、髪を表現
+位置調整(1)
+目は直線で
+位置調整(2)
+回転を利用し、口を引く
+位置調整(3)
+鼻を描いてフィニッシュ

**ひろ作「ぐっPの顔」 [#keeaf015]

*プログラム [#te65bce5]
**ぐっPのプログラム [#a435c9f9]
 #define BACK_TIME 18                             //髪の部分の後退時間を指定
 #define GO_TIME 10                               //直進、後退時間を指定
 #define UP_TIME 10                               //アームの上げ時間を指定
 #define DOWN_TIME 200                            //アームの下げ時間(待ち時間)を指定
 #define WAIT_TIME 50                             //待ち時間を指定
 
 void turn_right(int t)                           //t秒間の右旋回を定義
 {
	OnFwd(OUT_A); OnRev(OUT_C); Wait(t);
	Off(OUT_AC); Wait(WAIT_TIME);
 }
 
 void turn_left(int t)                            //t秒間の左旋回を定義
 {
	OnRev(OUT_A); OnFwd(OUT_C); Wait(t);
	Off(OUT_AC);
 }
 
 void left_back()                                 //左後退を定義
 {
	OnFwd(OUT_C); Wait(BACK_TIME);
	Off(OUT_C);
 }
 
 void right_back()                                //右後退を定義
 {
	OnFwd(OUT_A); Wait(BACK_TIME);
	Off(OUT_A);
 }
 
 void back()                                      //後退を定義
 {
	OnFwd(OUT_AC); Wait(GO_TIME);
	Off(OUT_AC);
 }
 
 void go_straight()                               //直進を定義
 {
	OnRev(OUT_AC); Wait(GO_TIME);
	Off(OUT_AC);
 }
 
 void go_right()                                  //右折を定義
 {
	OnRev(OUT_A); Wait(BACK_TIME);
	Off(OUT_A);
 }
 
 void arm_up()                                    //アームアップを定義
 {
	OnRev(OUT_B); Wait(UP_TIME);
	Off(OUT_B);
 }
 
 void arm_down()                                  //アームダウンを定義
 {
	OnFwd(OUT_B); Wait(2);                    //最初に勢いをつけて、
	Float(OUT_B); Wait(DOWN_TIME);            //あとは自重で下ろす。
 }
 
 void shita_yose()                                //下方向への幅寄せを定義
 {
	turn_right(10);                           //右旋回
	back();                                   //後退
	turn_left(10);                            //左旋回
 }
 
 void ue_yose()                                   //上方向への幅寄せを定義
 {
	turn_left(10);                            //左旋回
	back();                                   //後退
	turn_right(10);                           //右旋回
 }
 
 task main()                                      //ここからメインプログラム
 {
	turn_right(165);                         //輪郭
	repeat(2){                               //髪始め
		right_back();  
		left_back();
	}
	right_back();                            //髪終わり
	arm_up();
	go_right();                              //位置調整
	shita_yose();
	repeat(2){                               //目始め
		go_straight();
		arm_down();
		go_straight();
		arm_up();
	}                                        //目終わり
	repeat(2){
		ue_yose();                       //位置調整
		go_straight();
	}
	turn_left(20);
	arm_down();
	turn_left(15);                           //口
	arm_up();
        back2(8);                                 //位置調整
	arm_down();
	turn_right(6);                           //鼻
	arm_up();
 }

**ひろのプログラム [#l1b03198]

*実行結果 [#bd650708]

*感想 [#i4fe4676]


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