#contents *課題1 [#m33913e0] A4サイズの紙に地元に関する漢字二文字を書くロボットを作る。 今回私が選んだ文字は「大阪」です。 *作成したロボット [#eaf37845] 作成したロボットはX軸Y軸でそれぞれ独立して動くロボットである。 部品点数を少なくすることにより軽量化し、ロボットが安定して動作するようになるべく重心が下の位置になるように作成した。 #ref(2017b/Member/cyanomelana/Mission1/IMG_5895.JPG,45%,書道ロボット) #ref(2017b/Member/cyanomelana/Mission1/robo1IMG_5893.JPG,65%,書道ロボット) **ロボットの詳細 [#mee85b7a] Y軸方向(前後方向)の移動 Y軸方向(前後方向)への移動の工夫として、タイヤを4輪一列に並べることによって直進性を高めた。~ さらにモーターの位置をロボットの中央にすることによってモーターの位置が端にあるのと比べて動力の伝達の遅れを最小限にできた。 #ref(2017b/Member/cyanomelana/Mission1/tire.jpg,30%,書道ロボット) #ref(2017b/Member/cyanomelana/Mission1/robo_5873.JPG,45%,書道ロボット) X軸方向(左右方向)の移動 X軸方向(左右方向)への移動には二本のレールの上をタイヤが動くことで移動している、そしてレールをガイドで挟むことによってタイヤがレールから脱輪しないようにした。 #ref(2017b/Member/cyanomelana/Mission1/rorobo.JPG,30%,書道ロボット) #ref(2017b/Member/cyanomelana/Mission1/roboboIMG_5898.JPG,45%,書道ロボット) ペンの上げ下げの機構 X軸方向に動くモーターに対して垂直にモーターを取り付けるように試みたが、高さが高くなり、X軸方向に動くモーターが不安定になったので、X軸方向に動くモーターに平行にモーターを取り付けて安定させた。 #ref(2017b/Member/cyanomelana/Mission1/roboobo_5873.JPG,60%,書道ロボット)~ 動作の確認で分かったことだが、ペンを下してY軸下方向(手前)に移動するときペン先と紙との抵抗力によってX軸方向に動くモーターが持ち上がってしまったが、手前のガイドを長くし、ペンとガイドの距離をなくすことによりモーターは持ち上がらなくなった。 #ref(2017b/Member/cyanomelana/Mission1/pen.JPG,30%,書道ロボット)~ さらにペンを上げ下げを繰り返すと少しずつペンの角度がずれて、ペン先が紙面に当たりすぎるという問題が起きたがストッパーを取り付けることで解決した。 #ref(2017b/Member/cyanomelana/Mission1/penrobo.JPG,30%,書道ロボット)~ *作成したプログラミング [#xf4828b2] 「大阪」という文字を書くにあたり、曲線と正しい書き順を意識したプログラミングを書いた。~ 下の写真の番号の順にプログラムを書いた。 #ref(2017b/Member/cyanomelana/Mission1/IMG_5944.JPG,25%,大阪の書き順)~ X軸はA、Y軸はCのモーターで動くようにして、~ それぞれの移動方向を図のように決めてdefineで定義した。~ #ref(2017b/Member/cyanomelana/Mission1/direction.JPG,30%,書道ロボット)~ #define XR(t) OnFwd(OUT_A,40); Wait(t); Off(OUT_A); Wait(200); #define XL(t) OnRev(OUT_A,40); Wait(t); Off(OUT_A); Wait(200); #define YD(t) OnFwd(OUT_C,40); Wait(t); Off(OUT_C); Wait(200); #define YU(t) OnRev(OUT_C,40); Wait(t); Off(OUT_C); Wait(200);~ #define XR(t) OnFwd(OUT_A,40); Wait(t); Off(OUT_A); Wait(200);//X軸右方向へ移動 #define XL(t) OnRev(OUT_A,40); Wait(t); Off(OUT_A); Wait(200);//X軸左方向へ移動 #define YD(t) OnFwd(OUT_C,40); Wait(t); Off(OUT_C); Wait(200);//Y軸下方向へ移動 #define YU(t) OnRev(OUT_C,40); Wait(t); Off(OUT_C); Wait(200);//Y軸上方向へ移動 ペンの上げ下げは角度で動くプログラミングをdefineで定義した。~ #define PU RotateMotor(OUT_B,20,30); Off(OUT_B); //ペンを上げる #define PD RotateMotor(OUT_B,-20,30); Off(OUT_B); //ペンを下ろす **「大」のプログラミング [#p6ec576f] 曲線を描くために、時間ごとに速度を変えるプログラミングを書いた。~ 例えば「大」の二画目はYD(Cのモーター)の速度の数値を時間ごとに下げ、~ XL(Aのモーター)の速度の数値をを時間ごとに上げた。~ PD; //一画目(� � XR(1200); PU; XL(620); //二画目の書き始めの位置に移動 YU(150); PD; //二画目(�◆� OnFwd(OUT_C,40); //Y軸下方向の速さを徐々に遅くしていく OnRev(OUT_A,10); //X軸左方向の速さを徐々に速くしていく Wait(200); OnFwd(OUT_C,40); OnRev(OUT_A,20); Wait(200); OnFwd(OUT_C,30); OnRev(OUT_A,30); Wait(200); OnFwd(OUT_C,20); OnRev(OUT_A,40); Wait(200); OnFwd(OUT_C,10); OnRev(OUT_A,50); Wait(200); Off(OUT_AC); PU; XR(710); //三画目の書きはじめの位置に移動 YU(510); PD; //三画目(��) OnFwd(OUT_C,40); //Y軸下方向の速さを徐々に遅くしていく OnRev(OUT_A,20); //X軸右方向の速さを徐々に速くしていく Wait(150); OnFwd(OUT_C,30); OnFwd(OUT_A,26); Wait(200); OnFwd(OUT_C,20); OnFwd(OUT_A,30); Wait(200); OnFwd(OUT_C,20); OnFwd(OUT_A,40); Wait(200); OnFwd(OUT_C,10); OnFwd(OUT_A,50); Wait(230); Off(OUT_AC); PU; **「阪」のプログラミング [#t5dab093] 「阪」も同様に、こざとへん、右側の「反」の曲線が書けるようにプログラミングした。~ 「阪」を書き終わると元の位置に戻るようにプログラミングを書いた。 XL(1300); //「阪」の一画目の書き始めの位置への移動 YD(220); PD; //一画目(� � YD(735); PU; //二画目の書きはじめの位置に移動 YU(710); PD; //二画目(�◆� XR(520); OnRev(OUT_A,30); OnFwd(OUT_C,10); Wait(550); Off(OUT_AC); //三画目(��)放物線を描くためにY軸下方向の速度を一定にし、X軸方向の速度を変化させた。 OnFwd(OUT_C,22); //Y軸下方向の速度は一定 OnFwd(OUT_A,40); //X軸右方向の速度を途中まで徐々に下げる Wait(150); OnFwd(OUT_C,22); OnFwd(OUT_A,25); Wait(100); OnFwd(OUT_C,22); OnFwd(OUT_A,15); Wait(100); OnFwd(OUT_C,22); OnRev(OUT_A,15); //X軸左方向の速さを徐々に上げる Wait(100); OnFwd(OUT_C,22); OnRev(OUT_A,25); Wait(100); OnFwd(OUT_C,22); OnRev(OUT_A,40); Wait(150); Off(OUT_AC); PU; YU(450); //四画目の書き始めの位置に移動 XR(660); PD; //四画目(�ぁ� XR(550); PU; XL(660); //五画目の書き始めの位置に移動 PD; //五画目(�ァ忘犬愍�しずつ曲がる曲線を描くためにY軸下方向の速さを一定にして、X軸左方向の速さを変化させた。 OnFwd(OUT_C,40); //Y軸下方向の速さは一定 OnRev(OUT_A,10); //X軸左方向の速さを徐々に速くしていく Wait(300); OnFwd(OUT_C,40); OnRev(OUT_A,17); Wait(200); OnFwd(OUT_C,40); OnRev(OUT_A,25); Wait(240); Off(OUT_AC); PU; XR(265); //六画目の書き始めの位置に移動 YU(520); PD; //六画目(�Α� XR(525); //途中まで直線 OnFwd(OUT_C,40); //Y軸下方向の速さを徐々に遅くしていく OnRev(OUT_A,20); //X軸左方向の速さを徐々に速くしていく Wait(240); OnFwd(OUT_C,40); OnRev(OUT_A,20); Wait(120); OnFwd(OUT_C,35); OnRev(OUT_A,30); Wait(120); OnFwd(OUT_C,30); OnRev(OUT_A,40); Wait(120); Off(OUT_AC); PU; YU(540); //七画目の書き始めの位置に移動 XL(150); PD; //七画目(�А� OnFwd(OUT_C,40); //Y軸下方向の速さを徐々に遅くしていく OnFwd(OUT_A,30); //X軸右方向の速さを徐々に速くしていく Wait(180); OnFwd(OUT_C,40); OnFwd(OUT_A,40); Wait(110); OnFwd(OUT_C,35); OnFwd(OUT_A,40); Wait(130); OnFwd(OUT_C,30); OnFwd(OUT_A,50); Wait(240); Off(OUT_AC); PU; XL(1500); //ロボットが動き始めた始めの位置に戻る YU(2000); *書けた文字 [#oed7f7d3] 読める文字はかけた。 #ref(2017b/Member/cyanomelana/Mission1/oosaka.jpg,65%,大阪) *感想、反省点 [#c5981acb] 感想 ロボットは安定して動いたので達成感があった。~ 曲線はきれいにかけたと思うが、字の形があまり納得いくものではなかった。~ 完成するまでの道のりが果てしなかった。~ 反省点 サブルーチンがとても長くなると思い、サブルーチンを作らなかったが、task mainを少なくするためにサブルーチンを使うべきだったと思う。~ こざとへんの書き順を間違えてしまった。