[[2015a/Member]] #contents *はじめに [#w349bbbd] 今回の課題は「書道ロボ」。ということでこういうのを作りました。 *ロボットについて [#ub3c4133] **本体 [#l4768779] 僕たちが今回作ったロボットはこれです。 &ref(2015a/Member/Keima/Mission1/1434009073635.jpg,75%,書道ロボ); それでは説明していきます。 ***ペンの上げ下げ [#he30edda] 写真を見ると、本体のちょうど真ん中あたりにペンが立っています。 これは、ペンを二つのタイヤではさんで、タイヤの回転によってペンが上下する仕組みになっています。 その際、ギアの数を増やして、二つのタイヤが逆に回るようにしています。 ***書く方法 [#u57366c6] ペン自体は上下にしか動かないので、書くときは本体が動きまわります。 **プログラム [#re6573a5] 今回僕が選んだ文字は「亨」です。プログラム全体はこちらになります。 #define up OnFwd(OUT_B);Wait(100);Off(OUT_B); #define down OnRev(OUT_B);Wait(100);Off(OUT_B); #define turn_right OnFwd(OUT_A);OnRev(OUT_C);Wait(78);Off(OUT_AC); #define write_down_A down;OnFwd(OUT_AC);Wait(40);Off(OUT_AC);up;turn_right;OnFwd(OUT_AC);Wait(80);Off(OUT_AC);down;OnRev(OUT_AC);Wait(160);Off(OUT_AC);up; #define write_down_B down;OnFwd(OUT_AC);Wait(40);turn_right;OnFwd(OUT_AC);Wait(100);turn_right;OnFwd(OUT_AC);Wait(40);turn_right;OnFwd(OUT_AC);Wait(100);Off(OUT_AC);up; #define write_down_C OnFwd(OUT_C);OnRev(OUT_A);Wait(78);Off(OUT_AC);down;OnFwd(OUT_AC);Wait(100);\ OnFwd(OUT_A);OnRev(OUT_C);Wait(108);OnFwd(OUT_AC);Wait(40);\ OnFwd(OUT_C);OnRev(OUT_A);Wait(30);OnFwd(OUT_AC);Wait(60);OnFwd(OUT_A);OnRev(OUT_C);Wait(108);OnFwd(OUT_AC);Wait(20);Off(OUT_AC);up; task main() { write_down_A; OnFwd(OUT_AC); Wait(50); OnFwd(OUT_C); OnRev(OUT_A); Wait(78); OnFwd(OUT_AC); Wait(20); write_down_B; OnRev(OUT_AC); Wait(100); turn_right; Wait(45); OnFwd(OUT_AC); Wait(50); write_down_C; } それでは説明していきます。 ***サブルーチン [#ne3ab488] #defineによるサブルーチンですが、僕はよく使うプログラムと文字を書く動作をサブルーチンにしました。 どういうことかというと、「亨」という文字を、鍋蓋、口、了の三つに分解して、それぞれを書くサブルーチンを作りました。 また、”上げ””下げ””右回転”は、プログラムを見ていただくとわかるんですが、比較的多用しています。なので、この三つをサブルーチンに表し、プログラムをコンパクトにしようとしました。 ***メイン [#q5470d59] サブルーチンを作ることで、メインのプログラムは書く動作と移動だけという比較的シンプルな構造になりました。 *作ってみて [#bc2aad43] 本体を作ること自体は、方針が決まればそんなに難しく感じなかったです。ただ、プログラムはシビアなところがあって、どこか間違うと思ったように動かないので、今回一番苦労したのは、おそらくプログラムだと思います。