目次
これまで住んだことのある都道府県名、市町村名、地区名などの中から2文字以上のものを選び、それをA4の紙に書くロボットを作成せよ。
松本出身なので、「松本」を選んだ。
今回は、x軸、y軸に移動するロボットを作成した。モーターを3つまでしか使うことができないので、本体の車部分の後輪、x軸のレール、ペンの上下、にそれぞれ一つずつ利用した。
レールを伸び縮みさせることでx軸方向に動くことができる。
ブロックに歯を取り付け、ギアと組み合わせることで動くようにした。始めは1つのギアとブロックをかみ合わせていたが、動きが速くなってしまうため、2つのギアとかみ合わせるようにした。
また、伸びきったときにペン側の重みで少し傾いてしまい、不安定になってしまった。ただ、レール部分を補強することにより多少安定した。
ペン先は、ギアの回転でペンも回転させ、ペンを上下させた。
構造上、ペン先が地面に向かって垂直に下に降りず、書き始めにぶれが生じてしまった。
より少ない動きでかけるように全体を7画とした。
#define pen_down OnFwd(OUT_B);Wait(30);Off(OUT_B);Wait(100);//ペンを下げる #define pen_up OnRev(OUT_B);Wait(30);Off(OUT_B);Wait(100);//ペンを上げる #define right(t) OnFwd(OUT_A);Wait(t);Off(OUT_A);//レール部分を伸ばす #define left(z) OnRev(OUT_A);Wait(z);Off(OUT_A);//レール部分を縮める #define mae(m) OnFwd(OUT_C);Wait(m);Off(OUT_C);//本体を前進させる #define usiro(q) OnRev(OUT_C);Wait(q);Off(OUT_C);//本体を後退させる #define hidarimae(r) OnRev(OUT_A);OnFwd(OUT_C);Wait(r);Off(OUT_AC);//本体を前進させレールを伸ばす #define migiusiro(e) OnFwd(OUT_A);OnRev(OUT_C);Wait(e);Off(OUT_AC);//本体を後退させレールを縮める #define migimae(h) OnFwd(OUT_AC);Wait(h);Off(OUT_AC);//本体を前進させレールを縮める #define hidariusiro(f) OnRev(OUT_AC);Wait(f);Off(OUT_AC);//本体を後退させレールを伸ばす
ペン先の動き、本体の前後、x軸の横の動き、そして複雑な斜めの動きを定義した。
t,z,m,q,r,e,h,fはそれぞれの時間である。
ペンを上げた後、下げた後に時間を空け、動きの安定性を高めた。
sub ichikaku()//1画目 { pen_down; right(030); pen_up; mae(017); left(015); pen_down; usiro(060); pen_up; } sub nikaku()//2画目 { left(015); mae(020); pen_down; migimae(015); Wait(100); migiusiro(015); pen_up; } sub sannkaku()//3画目 { mae(007); right(007); pen_down; migimae(020); pen_up; right(010); pen_down; migiusiro(024); Wait(050); pen_up; } sub yonnkaku()//4画目 { left(016); pen_down; hidariusiro(040); Wait(100); right(045); Wait(100); migiusiro(016); pen_up; }
ペンを下げたまま動く角度を変えるときは、1秒間の間隔を入れることで精度を高めた。
sub gokaku()//5画目 { usiro(015); left(010); pen_down; left(066); pen_up; usiro(036); right(020); pen_down; right(015); Wait(050); pen_up; } sub rokukaku()//6画目 { right(020); mae(035); left(027); pen_down; usiro(065); pen_up; } sub nanakaku()//7画目 { left(035); mae(008); pen_down; migimae(035); Wait(100); migiusiro(038); Wait(100); pen_up; }
task main()//メイン { ichikaku(); nikaku(); sannkaku(); yonnkaku(); gokaku(); rokukaku(); nanakaku(); }
横方向の直線は安定しているが、縦方向の直線が波打ってしまった。しかし、本番で一番上手く書くことができたのでよかった。
最初の課題であったが、かなり苦戦した。なかなかプログラミングと同じようにロボットが動いてくれなかったが、実際に動かしながら微調整していくことで、なんとか文字にすることができた。ロボット作成のコツや、プログラミングの基本を理解することができたので、次回の課題に生かしていきたい。