[[2007a/MemberOnly/進行状況A]]

*概略 [#h4f2657e]
**目的 [#n9897ae8]
ユニークな書道ロボットの作成
**目標 [#n6917330]
プリンタのように、上下左右の運動で文字を書くこと。
**プリンタ形式 [#t72b2053]
***プリンタ形式でどのように文字を書くのか? [#f68ccaee]
横線 ヘッドを左右に動かす。

縦線 ロボット本体を前後に動かす。

斜線 ヘッドを左右に動かしながら、本体を前後に動かす。

また、モーターの速度を変えることによって、斜線の角度の変更が可能。
***プリンタ形式のメリット [#b88e0896]
無駄のない動きで文字を書くことができる。書くスピードが半端なくはやい。

『和』という字を、約6秒で書くことができた。
***プリンタ形式のデメリット [#cff2b64d]
ロボット本体が前後にしか動かないため、文字のサイズ(横幅)が小さくなる。
*完成したロボットの説明 [#j215af32]
このロボットで一番重要なパーツはヘッドです。ヘッドとはその名の通りロボットの一番前の部分であり、モーターによって左右に動くことができます。ヘッドと本体の動力源(モーター)は独立しているので、本体が前進していようとしていまいと、ヘッドを左右に動かすことが可能です。

このロボットには合計でタイヤが10個使われています。「多すぎ」と感じる人もいると思いますが決してそうゆうわけではありません。本体を支えるのに4つ、ペンを上げ下げするのに2つ、ヘッドにかかる負担を減らすために2つ、ヘッドの左右の運動による本体のずれをなくすために2つ使われています。後に述べたタイヤ4つは補佐的なものですが、それがあるからこそ安定感とスピードを両立できたと思います。

*制作の過程 [#off6087c]
***過程1(土台作り) [#z5bbf3f7]
土台はタイヤ4つで支え、後輪のみモーターに直結した。

モーターが3つしかないため、それぞれのモーターを次のように使った。

1つ目 本体の前進後進    2つ目 ペンの上下運動    3つ目 ヘッドの左右の運動
***過程2(ヘッドの作成) [#f4ecf94f]
ヘッドがはずれる事がないようにストッパーを作成、また、ストッパーのブロック同士の摩擦によるモーターへの負担を減らすため、本体下部にとりつけたタイヤの上を転がせた。

またヘッドには、過程3で説明する、ペンを上下するための部品やモーターを乗せる必要があるため、強度を重視した。
***過程3(ペンを持つ部分の作成) [#z06b6553]
ペンの上下運動には、モーター1つ タイヤ2つを使った。

タイヤ2つでペンをはさみ、モーターでタイヤを回すことによってペンを上下させた。

タイヤは摩擦が大きいので、ペンが落ちてしまうような事がなく、ペンをはさむのには最適だった。

また、ペンの交換も容易に可能である。
***過程4(組み立て) [#see3cacf]
いままで作った部品を組み立てた。各パーツを補強しながら組み立てると、最終的にかなり大きなロボットになった。
*プログラム [#pac3b220]
**坪井 [#xb492a37]
「長」の文字を書くプログラムを作成した。
sub up()
{SetPower(OUT_A,5);
OnFwd(OUT_A);
Wait(5);
Off(OUT_A);}
sub down()
{SetPower(OUT_A,5);
OnRev(OUT_A);}
sub right()
{SetPower(OUT_B,5);
OnRev(OUT_B);}
sub left()
{SetPower(OUT_B,5);
OnFwd(OUT_B);}
sub fore()
{SetPower(OUT_C,5);
OnRev(OUT_C);}
sub back()
{SetPower(OUT_C,5);
OnFwd(OUT_C);}

task main()
{
	up();
	
	right();
	Wait(8);
	Off(OUT_B);
	
	
	// 1kakume
	down();
	right();
	Wait(30);
	Off(OUT_A+OUT_B);
	up();
	
	left();
	Wait(22);
	Off(OUT_B);
	
	
	// 2kakume
	down();
	back();
	Wait(29);
	Off(OUT_A+OUT_C);
	up();
	
	fore();
	Wait(19);
	Off(OUT_C);
	
	Wait(10);
	
	// 3kakume
	down();
	right();
	Wait(25);
	Off(OUT_A+OUT_B);
	up();
	
	left();
	Wait(20);
	Off(OUT_B);
	
	back();
	Wait(10);
	Off(OUT_C);
	
	Wait(10);
	
	// 4kakume
	down();
	right();
	Wait(26);
	Off(OUT_A+OUT_B);
	up();
	
	left();
	Wait(25);
	Off(OUT_B);
	
	back();
	Wait(12);
	Off(OUT_C);
	
	left();
	Wait(8);
	Off(OUT_C);
	
	Wait(10);
	
	// 5kakume
	down();
	right();
	Wait(50);
	Off(OUT_A+OUT_B);
	up();
	
	left();
	Wait(30);
	Off(OUT_B);
	
	// 6kakume
	down();
	back();
	Wait(20);
	down();
	right();
	fore();
	Wait(8);
	Off(OUT_A+OUT_B+OUT_C);
	up();
	
	right();
	fore();
	Wait(11);
	Off(OUT_B+OUT_C);
	right();
	Wait(8);
	Off(OUT_B);
	
	Wait(10);
	
	// 7kakume
	down();
	left();
	back();
	Wait(15);
	Off(OUT_A+OUT_B+OUT_C);
	up();
	
	left();
	fore();
	Wait(12);
	Off(OUT_B+OUT_C);
	left();
	Wait(2);
	Off(OUT_B+OUT_C);
	
	Wait(10);
	
	// 8kakume
	down();
	right();
	back();
	Wait(25);
	Off(OUT_A+OUT_B+OUT_C);
	up();
	
	// modori
	left();
	Wait(50);
	Off(OUT_B);
}
**栗山 [#t8ce752c]
「和」の文字を書くプログラムを作成した。

   int move_time ;   //move_timeという変数を定義

   sub pen_up()  //ペンを上げる命令文のサブルーチン
   Wait(10);   1秒まつ
   Off(OUT_A);  モーターAの動きを止める
   SetPower(OUT_A,5);  モーターAの出力を5に設定
   OnFwd(OUT_A);   ペンをあげる
   Wait(20);   2秒待つ
   Off(OUT_A);  モーターAの動きを止める 

  
   sub pen_down()  //ペンを下げる命令文のサブルーチン
   SetPower(OUT_A,5);  モーターAの出力を5に設定
   OnRev(OUT_A);   ペンを下げる  
   Wait(15);   ペンが床までおりるのを待つ

   sub head_left()  //ヘッドを左に動かす命令文のサブルーチン
   SetPower(OUT_B,5);  モーターBの出力を5に設定
   OnFwd(OUT_B);   ヘッドを左に動かす
   Wait(move_time);  定義された変数だけ待つ
   Off(OUT_B);  モーターBの動きを止める 

   sub head_right()  //ヘッドを右に動かす命令文のサブルーチン
   SetPower(OUT_B,5);    モーターBの出力を5に設定 
   OnRev(OUT_B);     ヘッドを右に動かす
   Wait(move_time);     定義された変数だけ待つ
   Off(OUT_B);     モーターBの動きを止める

   sub fore()  //ロボットを前進させる命令文のサブルーチン
   SetPower(OUT_C,3);  モーターCの出力を3に設定 
   OnRev(OUT_C);      ロボットを前進させる
   Wait(move_time);     定義された変数だけ待つ
   Off(OUT_C);    モーターCの動きを止める

   sub back()      //ロボットを後進させる命令文のサブルーチン
   SetPower(OUT_C,3);   モーターCの出力を3に設定     
   OnFwd(OUT_C);     ロボットを後進させる
   Wait(move_time);     定義された変数だけ待つ
   Off(OUT_C);   モーターCの動きを止める

   sub n_left()  //斜め左に線を引く命令文のサブルーチン
   SetPower(OUT_B+OUT_C,3);  モーターBとCの出力を3に設定 
   OnFwd(OUT_B);   ]
   OnFwd(OUT_C);      ]斜め左に線を引く
   Wait(move_time);     定義された変数だけ待つ
   Off(OUT_B+OUT_C);    モーターBとCの動きを止める

   sub n_right()  //斜め右線を引く命令文のサブルーチン
   SetPower(OUT_B+OUT_C,3);   モーターBとCの出力を3に設定 
   OnRev(OUT_B);       ]
   OnFwd(OUT_C);       ]斜め左に線を引く
   Wait(move_time);     定義された変数だけ待つ
   Off(OUT_B+OUT_C);    モーターBとCの動きを止める

   task main()  
   pen_down();
   move_time = 15 ;
   n_left();      『和』の一画目『ノ』を書く
   pen_up();
   move_time = 4 ;
   back();
   pen_down();
   move_time = 15 ;
   head_right();      『和』の二画目『一』を書く
   pen_up();
   move_time = 8 ;
   head_left();     
   move_time = 7 ;
   fore();
   pen_down();       
   move_time = 29;      『和』の三画目『|』を書く
   back();
   pen_up();
   move_time = 19 ;
   fore();
   pen_down();
   move_time = 12;
   n_left();        『和』の四画目『ノ』を書く
   pen_up();
   move_time = 10 ;
   fore();
   move_time = 6 ;
   head_right();
   pen_down();
   move_time = 12;
   n_right();        『和』の五画目を書く
   pen_up();         部首 完成!!
   
   move_time = 12;
   fore();    
   move_time = 4;
   head_right();
   pen_down();
   move_time = 15;
   back();       『和』の六画目『|』を書く 
   pen_up();
   fore();
   pen_down();      『和』の七画目を書く
   move_time = 12;
   head_right();   
   move_time = 15;
   back();
   pen_up();
   move_time = 8;
   head_left();
   pen_down();
   head_right();     『和』の八画目『_』を書く
   pen_up();
   move_time = 16;
   head_left();   『和』完成!!
    
move_timeという変数に毎回数値を与え、サブルーチンを主体にプログラムを組んだ。サブルーチンが長くなってしまったが、サブルーチンだけでほとんどすべての動作をカバーできるので、プログラムを組むのは容易だった。

*まとめ [#hc9ec37b]
**苦労したところ [#v0ba20a0]
本体作成の最後の方ではパーツが足りなくなってきて苦労した。

モーターなどの調子にあわせたプログラムの調整が大変だった。
**工夫したところ [#m5e4a976]
プリンタ形式の採用したこと。

最初は鉛筆で文字を書いていて、筆圧の関係からか、紙に書くことができず苦労したが、ペンにしたところ、うまく書けるようになった。


**制作を終えて(感想) [#iec7f843]
ロボットを一から作り直したので、ロボット本体の製作に時間がかかり大変だった。プリンタ形式のためか、プログラムの作成自体は比較的簡単だった。
一番困ったのは、プログラム作成中にモーターの調子が変化してしまうことだった。
もしかしたらヘッドの摩擦による何らかの誤差だったのかもしれない。








*コメントをお願いします [#kb3cc675]
#comment

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