[[2007a/MemberOnly/進行状況A]] *概略 [#h4f2657e] **目的 [#n9897ae8] ユニークな書道ロボットの作成 **目標 [#n6917330] プリンタのように、上下左右の運動で文字を書くこと。 **プリンタ形式??? [#t72b2053] 他の班を見る限り、モーターをペンに1つ、左右のタイヤに1つずつ取り付けているところが多いようです。しかし僕達の班はモーターを、ペンに1つ、タイヤに1つ、ヘッドという部分に1つ使いました。なぜこのようになったのか、プリンタ形式についてこれから説明したいと思います。 &ref(./SA350008.JPG); ***他のロボットとの違い [#veb3e1f4] 上の写真を見てください。写真右側がヘッドという部分です。ロボットの進行方向に対して垂直に動きます。ここが他のロボットと違う部分で、たくさんのメリットがあります。(後に説明) しかし、ヘッドを動かすのにモーターを1つ使っているので、タイヤにモーターを1つしか使うことができず、ロボットは前後にしか動くことができません。では、どのようにして文字を書くのでしょうか? 実はこのようにして書くことができます。 横線 ヘッドを左右に動かす。 縦線 ロボット本体を前後に動かす。 斜線 ヘッドを左右に動かしながら、本体を前後に動かす。 また、モーターの速度を変えることによって、斜線の角度の変更が可能です!! 次にプリンタ形式のメリットとデメリットをまとめておこうと思います。 ***プリンタ形式のメリット [#b88e0896] 無駄のない動きで文字を書くことができます。書くスピードが半端なくはやく、『和』という字を、約6秒で書くことができました。 また、他のロボットに比べ垂直に線を引くことが容易です。他の形式だと垂直に線を引きたいとき、ロボットを90度回転させる必要があります。モーターはかなり繊細なので、毎回のように誤差がでます。それを調整するのは面倒です。しかしこのプリンタ形式ならもともとヘッドが進行方向に対して垂直に動くので、命令文2つで垂直に線を引くことができます。 ***プリンタ形式のデメリット [#cff2b64d] ロボット本体が前後にしか動けないため、文字のサイズ(横幅)が必然と小さくなります(大きな文字を書けません)。しかし、文字が小さいからといってプログラム等が格段と難しくなるという訳ではありません。むしろ逆です。ヘッドの左右に動かせる範囲は決まっていることと、ロボットが前後にしか動けないことが幸いして、プログラムは実にシンプルです。 *制作の過程 [#off6087c] ***過程1(書道ロボットの考案) [#t33d7870] 「他の班とは違うタイプのロボットを作ろう」という目標のもと、どのようなロボットを作るか考えました。いくつか考えた中で、プリンタ形式を採用しました。 ***過程2(プリンタ形式を実現させるためには?) [#t3f8dda7] まず、3つしかないモーターの使いどころについて考えました。ペンを上げ下げするために、モーター1つは必要です。またヘッドにも1つ必要です。当初、左右のタイヤに1つずつモーターを使っていたので、ロボットを組み直す必要がありました。 ***過程3(土台作り) [#z5bbf3f7] &ref(./SA350013.JPG); 土台はタイヤ4つで支え、後輪のみモーターに直結しました。 ***過程4(ヘッドの作成) [#f4ecf94f] &ref(./SA350004.JPG); 最初に、写真の説明をしたいと思います。中央の黒いタイヤはペンを上げ下げするパーツです(次に説明します)。黄色のタイヤはヘッドの支えです。ヘッドにはペンを上げ下げするパーツを乗せるので、このように頑丈に作ってあります。中央の3つのギアはモーターとつながっていて、回転してヘッドを左右に動かします。また、この写真では見えないですが、ヘッドがはずれる事がないようにストッパーを作成しています。そして、ストッパーのブロック同士の摩擦によるモーターへの負担を減らす役割も黄色のタイヤが担っています。 &ref(./SA350007.JPG); 上の写真と下の写真を見てください。黄色のパーツが本体に引っかかるようになっています。これがストッパーの役割を果たしています。 ***過程5(ペンを持つ部分の作成) [#z06b6553] &ref(./SA350015.JPG); タイヤ2つでペンをはさみ、モーターでタイヤを回すことによってペンを上下させました。タイヤは摩擦が大きいので、ペンが落ちてしまうような事がなく、ペンをはさむのには最適でした。また、ペンの交換も容易に可能です。この写真では見えにくいと感じた人は1つ上のヘッドの写真をご覧ください。中央の黒いタイヤではさみます。 ***過程6(組み立て) [#see3cacf] &ref(./SA350007.JPG); いままで作った部品を組み立てました。各パーツを補強しながら組み立てると、最終的にかなり大きなロボットになってしまいました。 *参考までに [#j406850b] &ref(./SA350003.JPG); このロボットには合計でタイヤが10個使われています。「多すぎ」と感じる人もいると思いますが決してそうゆうわけではありません。本体を支えるのに4つ、ペンを上げ下げするのに2つ、ヘッドにかかる負担を減らすために2つ、ヘッドの左右の運動による本体のずれをなくすために2つ(白い大きなタイヤ)使われています。後に述べたタイヤ4つは補佐的なものですが、それがあるからこそ安定感とスピードを両立できたと思います。 *プログラム [#pac3b220] **坪井 [#xb492a37] 「長」の文字を書くプログラムを作成した。 &ref(./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); } **栗山 [#t8ce752c] 「和」の文字を書くプログラムを作成した。 &ref(./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という変数に毎回数値を与え、サブルーチンを主体にプログラムを組んだ。サブルーチンが長くなってしまったが、サブルーチンだけでほとんどすべての動作をカバーできるので、プログラムを組むのは容易だった。 *まとめ [#hc9ec37b] **苦労したところ [#v0ba20a0] 本体作成の最後の方ではパーツが足りなくなってきて苦労した。 モーターなどの調子にあわせたプログラムの調整が大変だった。 **工夫したところ [#m5e4a976] プリンタ形式を採用したこと。 最初は鉛筆で文字を書いていて、筆圧の関係からか、紙に書くことができず苦労したが、ペンにしたところ、うまく書けるようになった。 重量のバランスを考えたうえで、一番負担の大きいヘッドを補強したこと。 **制作を終えて(感想) [#iec7f843] ロボットを一から作り直したので、ロボット本体の製作に時間がかかり大変だった。プリンタ形式のためか、プログラムの作成自体は比較的簡単だった。 一番困ったのは、プログラム作成中にモーターの調子が変化してしまうことだった。 もしかしたらヘッドの摩擦による何らかの誤差だったのかもしれない。 *コメントをお願いします [#kb3cc675] -説明も丁寧で的確であるが、写真があると「プリント形式」についてより理解できると思う。 -- [[ヒロヤ]] &new{2007-05-24 (木) 01:07:56}; -長の方のプログラムのはみ出ている部分を直して置いてください。 -- [[まいける(TA)]] &new{2007-05-24 (木) 08:13:16}; #comment