目次 #contents * 課題1 [#n868ac37] 住んだことのある土地名を2文字以上のものを選び、A4用紙内にロボットで書く ** 選んだ文字 [#ve294d19] はじめ「三木」を書く予定だったが、メンバーや周りの人たちと比べると比較的容易であったため、「高木」を書くことにした。 *ロボット [#eab70b37] **説明 [#le1b73d2] &ref(2017b/Member/n1sh1/Mission1/全体.jpg,90%,全体写真); いつかの授業で見た恐竜を描いていたロボットを作れたらロマンがあり、かっこいいと思い作ろうとしたが、ロボット、プログラムの作成を考えるとロマンを求めるより大切なことがあるという声が上がり断念した。そこで、x-y軸で動くロボットを作ることになったが、これも容易ではなくta.kashi氏のロボット([[2016b/Member/ta.kashi/Mission1]])を参考にさせて頂いた。その結果、上のようなロボットが完成した。後述のように試行錯誤を繰り返し、オリジナルと呼べるものができたのではないだろうか。 **x軸を動くロボット及びペンを上げ下げするロボット [#o18c286d] #ref(./橋上ロボット.jpg,60%,橋上ロボット) x軸の移動はモーターの両端にタイヤをつけただけのシンプルなものである。ペンの上下も同様であるが、モーターとの接合部で遊びが生じてペンが不安定だったため、モーターと4点で繋げることで安定させることができた。5点で繋げたかったのだが横のブロックと干渉してしまうため断念した。また、ペンをx軸と平行に上下させることでy軸方向への揺れは小さくなったと思われる。 **y軸を動くロボット [#pbae40e2] #ref(./裏側.JPG,60%,裏側) y軸方向に動かした時の勢いによる橋梁の端の振れを小さくしたかった。モーターからの軸を伸ばすのが一番であったが、ペンの動作範囲であったから画像のように、ギアを用いることによりこの問題は多少解決することができた。 **レール部分 [#y52229a9] #ref(./レール.jpg,60%,レール) 最初に作ったものはブロックの凹凸の間にタイヤを走らせるものだったが、少しのずれで脱線することがあったため、画像のように平らなレールの横をブロックで囲むことで安定して走らせることができた。また、偶然であるがレールのつなぎ目部分にタイヤが走らないようになっている。 *プログラム [#y7e2c1d8] #ref(./軸.jpg,70%,軸) モーターの関係上座標設定はこのようになっている。 **各定義 [#ke7e407c] #define tate_up_time 150//y軸負の方向 #define tate_down_time 160//y軸正の方向 #define yoko_left_time 190//x軸正の方向 #define yoko_right_time 190//x軸負の方向 #define pen_down_time 78//ペンを下げる #define pen_up_time 75//ペンを上げる これらはモーターを動かす時間を定義している。x-y方向への時間は、数秒間走らせてその時間を進んだ距離で割ったもので、1cm進むのに必要な時間を表している。ペン上下の時間も同様にペンの回転させた時間を回転角で割ったものに、ペンの上下に必要な角度を掛けたものである。 #define speed 25 #define tate_speed 20 これらはモーターのスピードを定義している。はじめは全て25で統一していたが、y軸方向への移動時間はy軸方向に動かしたときに揺れが大きかったので少し小さくした。 **サブルーチン [#hb81cace] sub pen_up()//ペンを上げる { Wait(800); OnRev(OUT_B,speed); Wait(pen_up_time); Off(OUT_B); Wait(300); } sub pen_down()//ペンを下げる { Wait(800); OnFwd(OUT_B,speed); Wait(pen_down_time); Off(OUT_B); Wait(500); } ペンを上下した直後に字を書かせていると字がはねてしまっていたため、wait timeを設けることによりあまりはねなくなった。 sub write_right(float x)//x軸負の方向にx(cm)書く { pen_down(); OnRev(OUT_A,speed); Wait(x*yoko_right_time); Off(OUT_A); pen_up(); } sub write_up(float y)//y軸負の方向にy(cm)書く { pen_down(); OnRev(OUT_C,tate_speed); Wait(y*tate_up_time); Off(OUT_C); pen_up(); } sub move_left(float x)//x軸の正方向にx(cm)移動 { OnFwd(OUT_A,speed); Wait(x*yoko_left_time); Off(OUT_A); } sub move_up(float y)//y軸負の方向にy(cm)移動 { OnRev(OUT_C,tate_speed); Wait(y*tate_up_time); Off(OUT_C); } sub move_down(float y)//y軸正の方向にy(cm)移動 { OnFwd(OUT_C,tate_speed); Wait(y*tate_down_time); Off(OUT_C); } この通りだが、今回はx軸負の方向への移動が必要でなかったので省いた。また、斜めの線はサブルーチンを作らず、本文に直接書いた。引数にx,y(cm)進むとしているが、移動時間を計る時にずれが生じたのか若干長くなったり、短くなっている。字は書けたし、比だと考えれば何も問題は無いと信じる。 **task main [#oa4cadf4] task main() { write_up(2);//高 1画目 move_down(2); move_left(4); write_right(8);//高 2画目 move_left(6.5); move_down(3); write_up(1.5);//上の口左上 write_right(5); move_left(5); move_down(1.5); write_right(5);//上の口右下 write_up(1.5); move_left(6); move_down(6.5); write_up(4.5);//高の下の囲い write_right(7); move_down(4.5); write_up(4.5); move_left(5); move_down(3); write_up(1.5);//下の口左上 write_right(3); move_left(3); move_down(1.5); write_right(3);//下の口右下 write_up(1.5); move_left(6); move_down(5); write_right(8); //木 1画目 move_left(4.5); move_down(8); write_up(10); //木 2画目 move_down(8); move_left(4); pen_down(); //木の3画目 OnRev(OUT_A,speed); OnRev(OUT_C,23); Wait(4*yoko_right_time); Off(OUT_AC); pen_up(); pen_down(); //木の4画目 OnRev(OUT_A,speed); OnFwd(OUT_C,23); Wait(4.5*yoko_right_time); Off(OUT_AC); pen_up(); } この通りだが、ロボットの構造上y軸正の方向に書くのが苦手なので、4画目は4.5(cm)進むようにしたことで3,4画目の長さを同じにすることができた。前述したように、サブルーチンの引数は比である。 *まとめ [#n1d435d8] **書けた字 [#t345d410] #ref(./高木.jpg,90%,高木) x軸負の方向への移動時間が長かったのか少し傾いてしまった。また上に書くときにペンが振れてしまい線と線がひっつかなかった。しかし、きちんと読める字が書けて良かった。 **感想と反省 [#a795f320] この課題において一番の失敗は本番前日に電池を交換してしまったことだろう。そのため、移動時間が大幅に変わり計測などをし直さなければならなくなり、細かな調整ができなくなってしまった。結局本番当日の午前に字が書けるようになり、本番でも読める字が書けて良かった。この課題が出されたときは全く手も足も出なかったが、ロボットはきちんと形になり。字もきちんと書けたのでおよそ成功したといえるだろう。しかし、ロボットの安定性、字の正確さなどまだ不十分なところがあるので、次回の課題ではそういうところが無くなるように取り組もうと思う。