[[2018a/Member]] *目次 [#h8ee0496] #contents *課題1.書道ロボット [#r9f4a6e3] 今回は自分の出身地にちなんだ文字(十画以上)でA4の紙に書くということだったので出身地の「田原」を選びました. *ロボットの説明 [#q8a8444e] **ロボット全体について [#t543f30f] 私達はX(左右,縦書き),Y(前後,横書き)軸でペンをもたせたアームの上下で文字を書くロボットを制作した. 下の画像はその詳細である. #ref(./robo全体.jpg,70%,全体画像) **Y軸(前後移動,横書き) [#i34baee7] Y軸は車輪を回転させて動かす機構になっている.特に問題はなかった. #ref(./robot台車.jpg,70%,Y軸) **X軸(左右,縦書き) [#a9e06728] X軸はレールの上をアーム部分を走らせて動かす機構にした.文字を書くときにX軸だけを動かす場合には特に問題点はなかったが,Y軸を動かすときにアーム部分が安定しないため壁を作ることでブレを小さくするように改善した. #ref(./robotアーム2.jpg,70%,X軸,アーム) #ref(./robotレール.jpg,70%,レール) **アーム [#g289792a] ペンはアーム部分にゴムを取り付けて固定した.ギアをつけることでアームの上下のスピードを落とすことに成功したがもう少し遅くできると良かった. #ref(./robotペン.jpg,70%,アーム) *プログラムについて [#p3248c2a] **文字の書き方 [#i6ffa5bc] 文字の書き方は人間の書き方とは異なった形となっている.ペンの上下の際に誤差が出てしまうためできる限り一筆で書くことを優先した. #ref(./robot文字.jpg,90%,書き方) **定義プログラム [#v539cf9e] 今回はペンを上げる動作,下げる動作,B電源を切る,A電源を切る,一時停止の5つを定義した.一時停止は動作が連続するときに慣性の法則で機体のズレが生じるため次の動作に移るまでに少しの時間を挟む際に使用した. #define pen_up OnFwd(OUT_C);Wait(15);Off(OUT_C);//ペンを上げる #define pen_down OnRev(OUT_C);Wait(15);Off(OUT_C);//ペンを下げる #define offB Off(OUT_B);//Bを止める #define offA Off(OUT_A);//Aを止める #define wait Wait(30);//一時停止 **メインプログラム [#k4fac32e] 一画一画の長さを変えやすいように変数などを定義し利用するようにすればもっとプログラムの変更が楽に行えていたと思う. task main() { pen_down; OnFwd(OUT_B); Wait(25); offB;//一画目 OnFwd(OUT_A); Wait(35); offA; wait;//二画目 OnRev(OUT_B); Wait(25); offB;//三画目 OnRev(OUT_A); Wait(45); offA; wait;//四画目 pen_up;//五画目、始 OnFwd(OUT_B); Wait(15); offB; OnFwd(OUT_A); Wait(10); offA;//五画目、終 pen_down;// OnFwd(OUT_A); Wait(35); offA;//六画目 pen_up;//七画目、始 OnRev(OUT_A); Wait(20); offA; pen_down; wait;//七画目、終 OnFwd(OUT_B); Wait(13); offB;//八画目 OnRev(OUT_B); Wait(26); offB;//九画目 wait; pen_up;//ここまでで”田” ここまでで九画目が終了し,田原の「田」が完成する OnFwd(OUT_A);//十画目、始 Wait(40); offA; wait; pen_down; wait;//十画目、終 OnFwd(OUT_A); Wait(40); offA;//十一画目 pen_up;十二画目、始 OnRev(OUT_A); Wait(40); offA; pen_down;//十二画目、終 OnFwd(OUT_B); Wait(50); offB; wait;//十三画目 pen_up; OnRev(OUT_B); Wait(45); offB;//十四画目 wait; OnFwd(OUT_A); Wait(16); offA; wait;//十五画目 pen_down; wait; OnFwd(OUT_B); Wait(7); offB;//十六画目 OnFwd(OUT_A); Wait(19); offA; wait;//十七画目 OnFwd(OUT_B); Wait(10); offB; wait;//十八画目 OnRev(OUT_A); Wait(40); offA; wait;//十九画目 OnRev(OUT_B); Wait(10); offB; OnFwd(OUT_A); Wait(40); offA; wait;//二十画目 OnFwd(OUT_B); Wait(5); offB; wait;//二十一画目 OnRev(OUT_A); Wait(40); offA; wait;//二十二画目 pen_up; OnFwd(OUT_A); Wait(19); offA;//二十三画目 OnFwd(OUT_B); Wait(7); offB; wait; pen_down;//二十四画目 OnFwd(OUT_B); Wait(20); offB; wait;//二十五画目 pen_up; OnRev(OUT_A); Wait(13); offA;//二十六画目 OnRev(OUT_B); Wait(13); offB; pen_down;//二十七画目 OnFwd(OUT_B); Wait(5); offB; wait; pen_up;//二十八画目 OnFwd(OUT_A); Wait(20); offA; pen_down;//二十九画目 OnRev(OUT_B); Wait(5); offB;//三十画目 pen_up;//終了 } 最後に田原の「原」が完成し「田原」となる. *まとめ [#hd171027] **完成した文字 [#w7552d49] #ref(./robot田原.jpg,70%,完成した文字) 読むことは可能ではあるが,やはりペンの上下の際に生じるズレのせいで余分な点ができてしまった. **感想 [#sd642279] 最初は簡単にできると思っていた文字を書くということだったが想像以上にロボットの組み立ても難しく,いざロボットができてプログラムを書いてみても私の想像しているようには動いてくれず何度もプログラムを書き直した.何度も失敗しているうちにだんだんと読めるような文字になっていく工程はとても楽しかった.反省点はもっとプログラムを変更しやすいように,見やすいようにサブルーチンなどを利用して工夫ができたら良かったと思う.また,機体のモータ部分のギア比を考慮して遅くできると良かったと思う.