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

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

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

*ロボット紹介 [#e373491f]

**全体像 [#ffe0da88]
全体はこんな感じです。ペンの上げ下げにアームを用いた「アーム型」ロボットです。
**アーム [#e9724257]
両側からペンを挟み込むようにして固定します。
**キャスター [#g251b922]
-第一弾

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

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

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

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

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

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

*プログラム [#te65bce5]
**ぐっPのプログラム [#a435c9f9]
 #define BACK_TIME 18                             //髪の部分の後退時間を指定
 #define GO_TIME 10                               //直進、後退時間を指定
 #define UP_TIME 10                               //アームの上げ時間を指定
 #define DOWN_TIME 200                            //アームの下げ時間(待ち時間)を指定
 
 void turn_right(int t)                           //t秒間の右旋回を定義
 {
	OnFwd(OUT_A); OnRev(OUT_C); Wait(t);
	Off(OUT_AC);
 }
 
 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();
 }

*実行結果 [#bd650708]

*感想 [#i4fe4676]

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