[[2007b/A5/りんた]] 目次 #contents *課題 1:文字書きロボットの製作[#y45b8ba3] 『本』『板』の文字を書く **メンバー紹介 [#re3f23dd] ~一平くん ~たいすけ ~りんた *ロボット紹介[#i9ae234b] ~我々の製作したロボットはアームを二段階に動く構造にし、『本』と『板』を書かせることにした **他のロボットとの違い [#gd828ea8] ~本体がモータが一つだけで動くように構造を工夫 ~アームを2段階の動き(上下左右)できるような構造にした **筆の運び方 [#f886c517] ~&ref(2007b/A5/りんた/アーム.jpg); ~写真1:この写真でわかるようにギアの噛み合わせにより、アームを左右に移動させる ~&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); 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); Off(OUT_B); Wait(30); }else{ //0なら左斜めの線になります OnRev(OUT_A); Wait(write_time); } Off(OUT_B+OUT_A); fudeage(); } //縦横斜めの線を引く関数を作ることでほかのプログラムを作る時にも応用できます 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); Off(OUT_B); sayuu=0; //本の三画目です write_time=100; //ここで斜めを書くのでsayuuも指定しています naname(); OnFwd(OUT_A); OnRev(OUT_B); 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); 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); Wait(60); Off(OUT_B); OnRev(OUT_A); Wait(40); Off(OUT_A); sayuu=1; //板の八画目です write_time=70; naname(); Off(OUT_A+OUT_B+OUT_C); } **プログラムの工夫点 [#hb185e8f] 関数やサブルーチンを使い、いろいろな文字に応用できる汎用的なものにした。 *まとめ [#e29a9da5] **製作にあたって… [#ib82b698] 試行錯誤と微調整の末ようやく上下左右動くアームを完成させた ~きれいな文字の追求ならアームなど必要ないかもしれない だが、我々は他とは違う『個性』の追求を忘れなかった。 ~上下左右に動くアームの構想、製作、調整は手こずったが、その分この経験が次ぎに生かせそうだと思う **考察&改善点 [#i4c77150] 改善する点については .前腕部分の強度不足 .プログラムの性質上おり返す時も筆を上げ下げしてしまう ~考察 ~.プログラムの改善をすることで不必要な筆の上げ下げを無くすことができる *コメントをどうぞ [#f5bcbecf] #comment