2007a/MemberOnly/進行状況A

メンバー紹介

今回のメンバーは「カズ」と「ZWEI」です

ホームページ担当 「カズ」

ロボット制作担当 「ZWEI」 

概略

目的

ユニークな書道ロボットの作成

目標

プリンタのように、上下左右の運動で文字を書くこと。

プリンタ形式???

他の班を見る限り、モーターをペンに1つ、左右のタイヤに1つずつ取り付けているところが多いようです。しかし僕達の班はモーターを、ペンに1つ、タイヤに1つ、ヘッドという部分に1つ使いました。なぜこのようになったのか、プリンタ形式についてこれから説明したいと思います。

SA350008.JPG

他のロボットとの違い

上の写真を見てください。写真右側がヘッドという部分です。ロボットの進行方向に対して垂直に動きます。ここが他のロボットと違う部分で、たくさんのメリットがあります。(後に説明) しかし、ヘッドを動かすのにモーターを1つ使っているので、タイヤにモーターを1つしか使うことができず、ロボットは前後にしか動くことができません。では、どのようにして文字を書くのでしょうか?

実はこのようにして書くことができます。

☆横線 ヘッドを左右に動かす。
☆縦線 ロボット本体を前後に動かす。
☆斜線 ヘッドを左右に動かしながら、本体を前後に動かす。

また、モーターの速度を変えることによって、斜線の角度の変更が可能です!!

次にプリンタ形式のメリットとデメリットをまとめておこうと思います。

プリンタ形式のメリット

無駄のない動きで文字を書くことができます。書くスピードが半端なくはやく、『和』という字を、約6秒で書くことができました。

また、他のロボットに比べ垂直に線を引くことが容易です。他の形式だと垂直に線を引きたいとき、ロボットを90度回転させる必要があります。モーターはかなり繊細なので、毎回のように誤差がでます。それを調整するのは面倒です。しかしこのプリンタ形式ならもともとヘッドが進行方向に対して垂直に動くので、命令文2つで垂直に線を引くことができます。

さらに、もうひとつのメリットは、ペンの位置を気にする必要がないことです。たとえば、左右のタイヤに1つずつモーターをつけたロボットだと、「口」という漢字を書きたいとき、2画目の「ー|」を続けて書くためにはペンの位置をロボットの回転軸にもってこなければなりません。というのも、もし回転軸からずれていると、90度回転させたときペンの位置が変わってしまうからです。しかしプリンタ形式なら、ロボットは回転しなくても書くことができます。そんなわけでペンの位置を心配する必要はないのです。

プリンタ形式のデメリット?

ロボット本体が前後にしか動けないため、文字のサイズ(横幅)が必然と小さくなります(大きな文字を書けません)。しかし、文字が小さいからといってプログラム等が格段と難しくなるという訳ではありません。むしろ逆です。ヘッドの左右に動かせる範囲は決まっていることと、ロボットが前後にしか動けないことが幸いして、プログラムは実にシンプルです。

制作の過程

過程1(書道ロボットの考案)

他の班とは違うタイプのロボットを作ろう」という目標のもと、どのようなロボットを作るか考えました。いくつか考えた中で、プリンタ形式を採用しました。

過程2(プリンタ形式を実現させるためには?)

まず、3つしかないモーターの使いどころについて考えました。ペンを上げ下げするために、モーター1つは必要です。またヘッドにも1つ必要です。当初、左右のタイヤに1つずつモーターを使っていたので、ロボットを組み直す必要がありました。

過程3(土台作り)

SA350013.JPG

次は土台作りです。土台はタイヤ4つで支え、後輪のみモーターに直結することにしました。土台はこのロボットのベースとなる部分ですから頑丈に作りました。

過程4(ヘッドの作成)

SA350004.JPG

最初に、写真の説明をしたいと思います。中央の黒いタイヤはペンを上げ下げするパーツです(次に説明します)。黄色のタイヤはヘッドの支えです。ヘッドにはペンを上げ下げするパーツを乗せるので、このように頑丈に作ってあります。中央の3つのギアはモーターとつながっていて、回転してヘッドを左右に動かします。また、この写真では見えないですが、ヘッドがはずれる事がないようにストッパーを作成しています。そして、ストッパーのブロック同士の摩擦によるモーターへの負担を減らす役割も黄色のタイヤが担っています。

SA350007.JPG

上の写真と下の写真を見てください。黄色のパーツが本体に引っかかるようになっています。これがストッパーの役割を果たしています。

過程5(ペンを持つ部分の作成)

SA350015.JPG

タイヤ2つでペンをはさみ、モーターでタイヤを回すことによってペンを上下させました。タイヤは摩擦が大きいので、ペンが落ちてしまうような事がなく、ペンをはさむのには最適でした。また、ペンの交換も容易に可能です。ペンをはさむ部分がこの写真では見えにくいので、1つ上のヘッドの写真をご覧ください。写真右側中央の黒いタイヤではさみます。

過程6(組み立て)

SA350007.JPG

いままで作った部品を組み立てました。各パーツを補強しながら組み立てると、最終的にかなり大きなロボットになってしまいました。

参考までに

SA350003.JPG

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

プログラム

「ZWEI」のプログラム

「長」の文字を書くプログラムを作成した。

SA350012.JPG

左にあるのはペンのキャップです(約4cm)

  
  sub up()              //ペンを上げて止めるsub
  {SetPower(OUT_A,5);
  OnFwd(OUT_A);
  Wait(5);
  Off(OUT_A);}
  sub down()            //ペンを下げ続けるsub
  {SetPower(OUT_A,5);
  OnRev(OUT_A);}
  sub right()           //ヘッドを右に動かすsub
  {SetPower(OUT_B,5);
  OnRev(OUT_B);}
  sub left()            //ヘッドを左に動かすsub
  {SetPower(OUT_B,5);
  OnFwd(OUT_B);}
  sub fore()            //本体を前に動かすsub
  {SetPower(OUT_C,5);
  OnRev(OUT_C);}
  sub back()            //本体を後ろに動かすsub
  {SetPower(OUT_C,5);
  OnFwd(OUT_C);}
   task main()
  {
	up();      //とりあえずペンをあげておく
	
	right();         //ヘッドを少し右へ
	Wait(8);
	Off(OUT_B);
	
	
	// 1kakume       1画目
	down();
	right();
	Wait(30);
	Off(OUT_A+OUT_B);
	up();
	
	left();
	Wait(22);
	Off(OUT_B);
	
	
	// 2kakume       2画目
	down();
	back();
	Wait(29);
	Off(OUT_A+OUT_C);
	up();
	
	fore();
	Wait(19);
	Off(OUT_C);
	
	Wait(10);
	
	// 3kakume    3画目
	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    4画目
	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    5画目
	down();
	right();
	Wait(50);
	Off(OUT_A+OUT_B);
	up();
	
	left();
	Wait(30);
	Off(OUT_B);
	
	// 6kakume    6画目
	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    7画目
	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    8画目
	down();
	right();
	back();
	Wait(25);
	Off(OUT_A+OUT_B+OUT_C);
	up();
	
	// modori     ヘッドを初期状態である一番左の位置へ戻す
	left();
	Wait(50);
	Off(OUT_B);
  }

「カズ」のプログラム

「和」の文字を書くプログラムを作成した。

SA350011.JPG

左にあるのがペンのキャップです(約4cm)

  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という変数に毎回数値を与え、サブルーチンを主体にプログラムを組んだ。サブルーチンが長くなってしまったが、サブルーチンだけでほとんどすべての動作をカバーできるので、プログラムを組むのは容易だった。

まとめ

苦労したところ

本体作成の最後の方ではパーツが足りなくなってきて苦労した。

モーターなどの調子にあわせたプログラムの調整が大変だった。

工夫したところ

プリンタ形式を採用したこと。

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

重量のバランスを考えたうえで、一番負担の大きいヘッドを補強したこと。

制作を終えて(感想)

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

コメントをお願いします



添付ファイル: fileSA350015.JPG 523件 [詳細] fileSA350013.JPG 441件 [詳細] fileSA350011.JPG 425件 [詳細] fileSA350012.JPG 402件 [詳細] fileSA350008.JPG 434件 [詳細] fileSA350007.JPG 409件 [詳細] fileSA350006.JPG 181件 [詳細] fileSA350004.JPG 477件 [詳細] fileSA350003.JPG 436件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-06-28 (木) 19:19:01