[[2019a/Member]] 目次 #contents *課題1 [#v3010bd1] これまで住んだことのある都道府県名、市町村名、地区名などの中から2文字以上、 &br;かつ合計10画以上のものを選び、それをA4の紙に書くロボットを制作せよ。 **選んだ文字 [#e9540ac0] 富山県の &size(20){富山};、という文字にしました。 *ロボットの説明 [#h7355b96] #ref(./P_20190603_145 (2).jpg,111,全体図) 私たちのグループでは、ロボットが動き回るのではなく、x軸、y軸にのみ動くロボットを制作しました。&br;ロボットの重量が、できるだけ軽くなるように、不要な部品を取り除きました。車体を細くしたため、&br;モーターのギアを多く取り付けることができず、少し前後移動のスピードが速くなってしまいました。 **x軸方向について [#b7a8cf9e] #ref(./P_20190607_12520545.jpg,85.2,x軸) ギザギザのパーツを使って、動くようにしました。&br;x軸方向の運動はブレが大きくなってしまいました。そのため、ブレが可能な限り、小さくなるように写真のようにしました。 **y軸方向について [#g293b198] #ref(./P_20190607_125256.jpg,89.1,y軸) 前後に動くだけなので、不要なものを取り除き、できるだけ小さくしました。&br; また、ロボットの先端には、車体を支えるためのタイヤを写真のように取り付けました。 **z軸方向について [#f4cd6c26] #ref(./P_20190607_125907.jpg,76.8,z軸) ペンを上下ではなく、弧を描くようにペンを上げたり、下げたりできるようにしました。ギアをつけなかったため、&br;回転が速くなってしまったことを、後で述べるようにプログラミングで制御することができました。 *制御について [#w8cdec7d] **#define について [#b374d1ab] #define wa Wait(100) #define stop_t 220 #define go_f(t) OnFwd(OUT_A);Wait(t);Off(OUT_A);wa; #define go_b(t) OnRev(OUT_A);Wait(t);Off(OUT_A);wa; -1番上の物は1秒間停止するというもの -2番目の物は、 stop_t としたものに 220 を代入するというもの -3番目、4番目の物は、サブルーチンで設定することが出来なかったy軸方向の移動に関するもの **サブルーチンについて [#m0800e92] int move_t=0; sub go_l() { OnFwd(OUT_B);Wait(move_t);Off(OUT_B);wa; } sub go_r() { OnRev(OUT_B);Wait(move_t);Off(OUT_B);wa; } ++1,2番目 :y軸方向の移動に関するもの ・移動時間が異なるため move_t と置きました。 sub touch() { repeat(3){ OnRev(OUT_C);Wait(3);Off(OUT_C);};Wait(stop_t); } sub up() { repeat(3){ OnFwd(OUT_C);Wait(3);Off(OUT_C);};Wait(stop_t); } ++3,4番目 :ペンの上げ下げに関するもの ・ここで繰り返しを利用しているのは、連続して動かすと、&br;モーターの回転数が速いために、ペン先を強く打ち付けるようなかたちになってしまったため、&br;モーターが長時間動いてしまうことがないようにしました。 sub back_for() { OnRev(OUT_A);Wait(move_t);Off(OUT_A);wa; repeat(3){ OnFwd(OUT_C);Wait(3);Off(OUT_C);};Wait(stop_t); OnFwd(OUT_A);Wait(move_t);Off(OUT_A);wa repeat(3){ OnRev(OUT_C);Wait(3);Off(OUT_C);};Wait(stop_t); } ++5番目 :後ろに下がりペンを上げ、前に進みペンを下げるというもの ・このサブルーチンを設定したのは、私たちのロボットは紙の上を縦横無尽に駆け巡るようなものではないため、&br;後ろに進んだら字の途切れ目が多く、前方に進んだら字の始まりという画が多かったからです。 sub back_up() { OnRev(OUT_A);Wait(move_t);Off(OUT_A);wa; repeat(3){ OnFwd(OUT_C);Wait(3);Off(OUT_C);};Wait(stop_t); } ++6番目 :後ろに下がりペンを上げるというもの ・5番目のでは後ろに進んだ後に前に進む必要があったため、&br;後ろに下がった後にx軸方向の運動を可能にするために設定しました。 sub left_touch() { OnFwd(OUT_B);Wait(move_t);Off(OUT_B);wa; repeat(3){ OnRev(OUT_C);Wait(3);Off(OUT_C);};Wait(stop_t); } ++7番目 :左に動きペンを下すというもの ・漢字は右から左に線を描くことはないので、&br;左に動いたらペンを下すというサブルーチンを設定しました。 sub right_up() { OnRev(OUT_B);Wait(move_t);Off(OUT_B);wa; repeat(3){ OnFwd(OUT_C);Wait(3);Off(OUT_C);};Wait(stop_t); } ++8番目 :右に動きペンを上げるというもの ・7番目で述べたように右に移動したら、ペンを上げる回数が&br;多かったのでサブルーチンを設定しました。 **task main()について [#la91eb5c] ここでは、できるだけプログラムを書く量が、少なくなるように設定した, #define ,サブルーチンを多用しました。 task main() { move_t=5;back_up(); move_t=11;left_touch(); move_t=6;back_for(); move_t=18;go_r(); Wait(50); move_t=7;back_up(); &size(16){ウ冠}; の部分です。 move_t=15;go_l(); go_f(4); touch(); move_t=12;right_up(); &size(16){4画目}; です。 go_l(); go_b(5); touch(); move_t=7;back_for(); move_t=13;go_r();wa; move_t=7;back_up(); move_t=13;left_touch(); right_up(); &size(16){口}; の部分です。 move_t=14;go_l(); go_b(5); touch(); move_t=11;back_for(); move_t=15;go_r(); move_t=12;back_up(); go_f(9); move_t=7;left_touch(); move_t=9;back_up(); go_f(6); move_t=7;left_touch(); move_t=14;right_up(); go_l(); go_b(6); touch(); right_up(); repeat(2){ wa; } &size(16){田}; の部分です。 go_b(7); move_t=8;left_touch(); move_t=14;back_up(); go_f(8); move_t=7;left_touch(); go_b(8); move_t=16;go_r();up(); go_f(8); touch(); move_t=9;back_up(); } 最後が &size(16){山}; の部分です。 ・これらの、それぞれの最後に待ち時間を設けているのは、動いたときに反動があり、移動した後すぐに動かしてしまうとより誤差が生じてしまうからです。 *文字について [#m11efd4e] #ref(./P_20190607_132913 (1).jpg,43.4,文字) x軸方向の腕の動きがグラグラしてしまったことにより、線を真っ直ぐ書くことができませんでした。また、2文字の中心線を揃えること、文字のバランスを考えることができませんでした。 *まとめ [#ce9fd868] ・出来たこと -読める文字を書くロボットの作成 -プログラムを簡略化すること ・出来なかったこと -きれいな字を書くこと -真っ直ぐな線を書くこと ・改善可能な点 ++私たちのようなロボットは、x軸方向のグラグラに堪えることができるように、何か対策をとる必要があったと思います。今考えられる対応策は、パーツは多くなってしまうが、紙の両側に壁のようなものを作り、文字を書くときに、固定する