目次 #contents *課題の説明 [#m710e389] 今回の課題は、書道ロボットを作成し、各自の名前の一文字を選択し、A4用紙に書道ロボットに書かせるというものである。ただし、選択する文字は7画以上でなければならない。なお、今回私は「村」という一文字を選んだ。 * ロボットの説明 [#mfdabb24] **全体 [#m42cd21d] #ref(new_IMG_0268.jpg) 最初は後輪が高いため、重心が高くなっており、ひっくり返ってしまった。そこで後輪を組み換え重心を低くした。 **タイヤ部分 [#e01b93bb] #ref(new_IMG_0259.jpg) 後輪はRISの冊子を参考に作った。前輪は歯数の小さいギアをモーター側に、大きいギアをタイヤ側につけることで速度を落とし、A4紙に収まる大きさの字を書きやすくした。モーターは前輪にのみ付いている。 **ペンの上げ下げ [#ycfc016c] #ref(new_IMG_0254.jpg) #ref(new_IMG_0255.jpg) タイヤを2つ使い、その間にペンをはさみ、タイヤをギアで回転させることで、ペンの上げ下げを行う。最初、ギアをそのままつけたが、強すぎ、ペン先がはじかれてしまった。そこで輪ゴムを使い、一定のテンションがかかり続けるようにすることで、はじかれないように調整した。 *プログラムの説明 [#z4fe8132] **プログラム [#p80eadb7] #define Down OnRev(OUT_B);Wait(120);Off(OUT_B);Wait(100); //ペンを下げる #define Up OnFwd(OUT_B);Wait(100);Off(OUT_B);Wait(100); //ペンを上げる #define SenFwd(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC);Wait(100); //前に進む #define spin90 OnFwd(OUT_C);OnRev(OUT_A);Wait(60); //90度回転させる #define SenRev(t) OnRev(OUT_AC);Wait(t);Off(OUT_AC);Wait(100); //後ろに進む task main () { Down; //一画目開始 Down; //一画目開始 int time1; time1 = 0; int time1; time1 = 0; time1 += 25; SenFwd(time1); time1 += 25; SenFwd(time1); Up; //一画目終了 Up; //一画目終了 time1 /= 2; SenFwd(time1); //五画目の始めの位置に移動 time1 /= 2; SenFwd(time1); //五画目の始めの位置に移動 Down; //五画目開始 Down; //五画目開始 time1 *= 2; SenFwd(time1); time1 *= 2; SenFwd(time1); Up; //五画目終了 Up; //五画目終了 time1 *= 2; SenRev(time1); //一画目の中央に移動 time1 *= 2; SenRev(time1); //一画目の中央に移動 spin90; //90度回転 spin90; //90度回転 time1 /= 4; SenRev(time1); //二画目の始めの位置に移動 time1 /= 4; SenRev(time1); //二画目の始めの位置に移動 Down; //二画目開始 Down; //二画目開始 time1 *= 8; SenFwd(time1); time1 *= 8; SenFwd(time1); Up; //二画目終了 Up; //二画目終了 time1 *= 3; time1 /= 4; SenRev(time1); //三画目の始めの位置に移動 time1 *= 3; time1 /= 4; SenRev(time1); //三画目の始めの位置に移動 OnFwd(OUT_C); OnRev(OUT_A); Wait(10); Off(OUT_AC); Wait(100); //三画目を書く方向を向かせる OnFwd(OUT_C); OnRev(OUT_A); Wait(10); Off(OUT_AC); Wait(100); //三画目を書く方向を向かせる Down; //三画目開始 Down; //三画目開始 time1 *= 2; time1 /= 3; SenFwd(time1); time1 *= 2; time1 /= 3; SenFwd(time1); Up; //三画目終了 Up; //三画目終了 SenRev(time1);//四画目の始めの位置に移動 SenRev(time1);//四画目の始めの位置に移動 OnFwd(OUT_A); OnRev(OUT_C); Wait(25); Off(OUT_AC); Wait(100); //四画目を書く方向を向かせる OnFwd(OUT_A); OnRev(OUT_C); Wait(25); Off(OUT_AC); Wait(100); //四画目を書く方向を向かせる Down; //四画目開始 Down; //四画目開始 time1 /= 2; SenFwd(time1); time1 /= 2; SenFwd(time1); Up; //四画目終了 Up; //四画目終了 time1 *= 3; time1 /= 2; SenFwd(time1);//六画目の始めの位置に移動(六画目は反対側から書く) time1 *= 3; time1 /= 2; SenFwd(time1);//六画目の始めの位置に移動(六画目は反対側から書く) Down; //六画目のはねの部分開始 Down; //六画目のはねの部分開始 time1 *= 2; time1 /= 3; SenFwd(time1);//六画目のはねの部分終わり time1 *= 2; time1 /= 3; SenFwd(time1);//六画目のはねの部分終わり OnFwd(OUT_A); OnRev(OUT_C); Wait(100); Off(OUT_AC); Wait(100); //六画目の直線を書く方向を向かせ、六画目の直線部分開始 OnFwd(OUT_A); OnRev(OUT_C); Wait(100); Off(OUT_AC); Wait(100); //六画目の直線を書く方向を向かせ、六画目の直線部分開始 time1 *= 4; SenFwd(time1); time1 *= 4; SenFwd(time1); Up; //六画目終了 Up; //六画目終了 OnFwd(OUT_A); OnRev(OUT_C); Wait(10); Off(OUT_AC); Wait(100); //七画目の始めの位置の方向を向かせる OnFwd(OUT_A); OnRev(OUT_C); Wait(10); Off(OUT_AC); Wait(100); //七画目の始めの位置の方向を向かせる time1 /= 2; SenFwd(time1);//七画目の始めの位置に移動 time1 /= 2; SenFwd(time1);//七画目の始めの位置に移動 spin90; //七画目を書く方向を向かせる spin90; //七画目を書く方向を向かせる Down; //七画目開始 Down; //七画目開始 time1 /= 8; SenFwd(time1);//七画目終了 time1 /= 8; SenFwd(time1);//七画目終了 } **説明 [#dba01cfe] #ref(new_ロボ書き順.jpg) 上の図の書き順で書いた。同じ方向の線を合わせて書くことで、向きを変える手間をできるだけ省いた。 プログラムにおける回転の秒数は、モーターの出力に差があったため、何回か実際に動かしてみることで秒数を決定した。 **書けたもの [#s2ecbaa9] #ref(new_IMG_0262.jpg) 少し斜めになってしまったが、何とか「村」と読める。 *感想と反省 [#aec3a5c4] ~・ロボットの動きの微調整が難しかった。特に、回転の秒数を決めるとき、モーターの出力に差があったため、何回も動かして秒数を決めていった。 ~・全員の予定がなかなか合わず、あまり時間を取れなかった。今度ロボットを組む時は連携をさらに密にし、完璧なものを作り上げたい。 ~・難しかった点や、困った点などいろいろとあったが、最終的にはなんとか形にでき、また楽しむこともできたのでよかったと思う。今回の経験は次回の課題に生かしていきたい。