[[2007b/A5/りんた]] 目次 #contents *課題 1:文字書きロボットの製作[#y45b8ba3] 『本』『板』の文字を書く **メンバー紹介 [#re3f23dd] ~一平くん…プログラム担当 ~たいすけ…ロボット製作担当 ~りんた…HP製作担当 *ロボット紹介[#i9ae234b] ~我々の製作したロボットはタイヤでの移動を前後のみにし、アームを二段階に動く構造にした。『本』と『板』を書かかせた。 **他のロボットとの違い [#gd828ea8] ~本体がモータが一つだけで動くように構造を工夫 ~アームを2段階の動き(上下左右)できるような構造にした。 ~筆ペンを用いることによりロボット特有の角ばった線をなくすことができた。 **筆の運び方 [#f886c517] ~&ref(2007b/A5/りんた/アーム.jpg); ~写真1:この写真でわかるようにギアの噛み合わせにより、アームを左右に移動させる ~&ref(2007b/A5/りんた/SA380045.jpg); ~写真2:ペンを上げ下げする ~写真1:この写真でわかるようにギアの噛み合わせにより、アームを左右に移動させる。 さらにギアを組み合わせることにより左右の移動スピードを本体の前後の移動に合わせた。 **他のロボットとの違い [#gd828ea8] ~本体がモータが一つだけで動くよう写真1のように構造を工夫 ~アームを2段階の動き(上下左右)できるように写真2のような構造にした むかって左側の離れたギアはモーターとは独立しておりアームを上から押える役割がある。 ~&ref(2007b/A5/課題1右/上下ぺん.jpg); ~写真2:このアームで筆の上げ下げをする。ここでは単純な回転運動を上下運動に変える構造を用いた。 さらに写真からもわかるように大きめなギアを二つもちいた。これは上げ下げのスピードを調整するだけでなく、 筆ペンの重さに耐えらるようにするためである。 **アームを2段階構造にするメリット [#abe25031] ~本体自体は前後に進むだけなので、曲線を書くとき角度の計算をせずにアームの動く時間だけで良いので、プログラムを大幅に変えることなく、いろんな文字に挑戦することができる ~本体自体は前後に進むだけなので、曲線を書くとき角度の計算をせずにアームの動く時間だけで良いので、プログラムを大幅に変えることなく、いろんな文字に挑戦することができる。さらに他の方向転換を必要とするロボットと違い細かい動きが可能となり小さいもじを奇麗に書くことができる。 **デメリット [#o6ca2fd0] ~なめらかな曲線を書くのに、微調整が大変 ~左右に動く範囲が限られてるので、文字が小さくなる ~なめらかな曲線を書くの難しく直線のみになってしまう。さらに一つの文字の中で斜めの線の角度を変えることができない ~左右に動く範囲が限られてるので、二つのモーターを移動に用いるタイプのロボットより文字が小さくなる *制作過程 [#l4d49906] **過程1 土台作り [#s5235401] ~&ref(2007b/A5/課題1右/土台.jpg); ~上の写真のようにモーター1個でも走れるようにする ~この形にしたメリットは早さの調整がしやすいからだ。 **過程2 アーム作り [#u7eb3fa9] 2段階のアームを作るため、バランスなどの調整 ~この過程に大部分の時間を割くことになるとはこの頃誰一人思ってなかった… **過程3 組み立て [#t18d4bac] アームと土台をつなげて出来上がり〜♪ ~&ref(2007b/A5/課題1右/がいかん1.jpg); ~&ref(2007b/A5/課題1右/がいかん2.jpg); ~アームと土台をつなげて出来上がり〜♪ * プログラム [#ldea66e7] **『本』のプログラム [#l87ac80a] ~&ref(2007b/A5/りんた/本.jpg); int write_time, sayuu; //sayuuha 1=migi 0=hidari sub fudesage () //筆を下げます { OnFwd(OUT_C); Wait(15); Off(OUT_C); } sub fudeage() //筆を上げます { OnRev(OUT_C); Wait(15); Off(OUT_C); } //何回か書くのでサブルーチンにしました void yoko() //横線を引きます { fudesage(); OnFwd(OUT_A); Wait(write_time); Wait(write_time); //Waitにwrite_timeという変数を用いたことにより時間の調整を簡単にしました。 Off(OUT_A); fudeage(); } void tate() //縦線を引きます { fudesage(); OnFwd(OUT_B); Wait(write_time); Off(OUT_B); fudeage(); } void naname(){ //斜めに線を引きます fudesage(); OnFwd(OUT_B); if(sayuu==1){ //このとき変数sayuuが1なら右斜めの線に OnFwd(OUT_A); Wait(write_time); Wait(write_time);//このプログラムではこのロボット特有の左にはらう癖があるため右移動だけを少し 長くすることにより奇麗な右はらいを実現した。 Off(OUT_B); Wait(30); }else{ //0なら左斜めの線になります OnRev(OUT_A); Wait(write_time); } Off(OUT_B+OUT_A); fudeage(); } //縦横斜めの線を引く関数を作ることでほかのプログラムを作る時にも応用できます } //縦横斜めの線を引く関数を作ることでほかのプログラムを作る時にも応用できます。 そしてifを用いることにより左右の斜め線を書くときに楽になる。 task main(){ write_time=220; //本の一画目です yoko(); OnRev(OUT_A); Wait(100); OnRev(OUT_B); Wait(20); Off(OUT_A+OUT_B); write_time=130; //本の二画目です tate(); OnRev(OUT_B); Wait(110); OnRev(OUT_B); //ここプログラムは縦線の書き始めの位置をしています。 Wait(110); //ここでのプログラムは斜め線を書き始める位置を指定していますが、 横線の位置に合うように縦線を書いた時間より短くしてあります。 Off(OUT_B); sayuu=0; //本の三画目です write_time=100; //ここで斜めを書くのでsayuuも指定しています naname(); OnFwd(OUT_A); OnFwd(OUT_A); OnRev(OUT_B); Wait(90); Wait(90); Off(OUT_A+OUT_B); sayuu=1; //本の四画目です naname(); OnRev(OUT_A);// Wait(170); Off(OUT_A); OnRev(OUT_B);// Wait(40); Off(OUT_B); write_time=80; //本の五画目です yoko(); Off(OUT_C+OUT_A+OUT_B); } **『板』のプログラム [#j9cb1ed4] ~&ref(2007b/A5/りんた/itaita.jpg); int write_time, sayuu; //sayuuha 1=migi 0=hidari 本のプログラムの関数をそのまま引き継いでいます sub fudesage (){ OnFwd(OUT_C); Wait(15); Off(OUT_C); } sub fudeage(){ OnRev(OUT_C); Wait(15); Off(OUT_C); } void yoko(){ fudesage(); OnFwd(OUT_A); Wait(write_time); Off(OUT_A); fudeage(); } void tate(){ fudesage(); OnFwd(OUT_B); Wait(write_time); Off(OUT_B); fudeage(); } void naname(){ fudesage(); OnFwd(OUT_B); if(sayuu==1){ OnFwd(OUT_A); Wait(write_time); Off(OUT_B); Wait(30); }else{ OnRev(OUT_A); Wait(write_time); } Off(OUT_B+OUT_A); fudeage(); } task main(){ write_time=160; //板の一画目です yoko(); OnRev(OUT_A); Wait(60); OnRev(OUT_B); Wait(15); Off(OUT_A+OUT_B); write_time=130; //板の二画目です tate(); OnRev(OUT_B); Wait(110); Off(OUT_B); sayuu=0; //板の三画目です write_time=100; naname(); OnFwd(OUT_A); OnRev(OUT_B); Wait(95); Off(OUT_A+OUT_B); sayuu=1; //板の四画目です write_time=60; naname(); OnFwd(OUT_A); Wait(30); OnRev(OUT_B); Wait(60); Off(OUT_A+OUT_B); write_time=100; //板の五画目です yoko(); OnRev(OUT_A); Wait(100); Off(OUT_A); sayuu=0; //板の六画目です write_time=100; naname(); OnFwd(OUT_A); OnFwd(OUT_A); //ここで七画目の書き始めの位置を指定しています。 OnRev(OUT_B); Wait(60); Off(OUT_A+OUT_B); write_time=110; //板の七画目です yoko(); OnRev(OUT_A); Wait(20); Off(OUT_A); sayuu=0; write_time=70; naname(); OnRev(OUT_B); OnRev(OUT_B); //ここで八画目の書き始めの位置を指定していますが、 ロボットの性質上斜め線が右よりに始まってしまうためここのプログラムで調整しています。 Wait(60); Off(OUT_B); OnRev(OUT_A); Wait(50); Wait(40); Off(OUT_A); sayuu=1; //板の八画目です write_time=80; write_time=70; naname(); Off(OUT_A+OUT_B+OUT_C); } **プログラムの工夫点 [#hb185e8f] 関数やサブルーチンを使い、いろいろな文字に応用できる汎用的なものにした。 それにより縦、横、斜めのプログラムの組み合わせだけで様々な文字を書くことを可能にした。 *まとめ [#e29a9da5] **製作にあたって… [#ib82b698] 試行錯誤と微調整の末ようやく上下左右動くアームを完成させた ~きれいな文字の追求ならアームなど必要ないかもしれない だが、我々は他とは違う『個性』の追求を忘れなかった。 ~上下左右に動くアームの構想、製作、調整は手こずったが、その分この経験が次ぎに生かせそうだと思う **苦労した所 [#pe98d5a5] まず、そもそもモーターの回転運動をどうやってアームの横移動に変えるかでなかなか思い浮かばなかった。そこで過去のロボットを参考に独自のアームを作成した。 しかしそこでさらにそれぞれの移動スピードの違いに直面した。 これが合わないと斜め線の角度がおかしなことになるため重要な問題だった。そして速過ぎる移動はロボットの負担となり、書いている最中何度もパーツがはずれる原因となった。これを上手く合わせるためにギアの組み合わせ色々試すなど苦労した。 **考察&改善点 [#i4c77150] 考察する点は 改善する点については… 改善する点については .前腕部分の強度不足 .筆を上下させる時に左払いが付いてしまう .プログラムの性質上おり返す時も筆を上げ下げしてしまう .斜め線の角度の調整と曲線の多いじへの対応。 ~考察 .プログラムの改善をすることで不必要な筆の上げ下げを無くすことができる .強度はパーツの組み合わせを考え直すとともに重心の位置をもっとロボットの中心に移す必要がある。 *コメントをどうぞ [#f5bcbecf] -上の評価になるには説明不足な印象を受けます。 -- [[クノ]] &new{2007-11-07 (水) 19:37:01}; #comment