[[2017a/Member]] 目次 #contents * 課題について [#v83a501a] 課題は、ロボットに七画以上の漢字を書かせることである。 詳しくは[[課題1>2017a/Mission1]]を参照 大学生活を表す漢字を選ぶということで、免許を取ろうか迷っている私は「車」という漢字を設定した。 * ロボット本体について [#r4cafd4f] #ref(2017a/Member/mitsu/Mission1/DSC_0129.JPG,50%,達筆なロボット) ロボット自体は写真の通り単純な作りにした。本体には手を加えずに、前方にモーターをつけてペンを上下させる構造になっている。 一つ工夫した点は、ペンを外側ではなく内側につけたことだ。本体をそのまま動かすので回転するときはペンがタイヤの中心に近いほうがイメージがしやすくなる。 欠点としては、安定感に乏しく揺れが大きい点と課題には関係がないがペンを装着しにくい点だ。 * プログラムについて [#i82eee3d] ** モーターの対応 [#p8d02c69] //OUT_A -> ペンの上げ下げ //OUT_B -> 右側のモーター //OUT_C -> 左側のモーター ** プログラムの内容 [#xd6de0ac] #define SPEED 50 // モーターの出力 #define PEN_TIME 200 // ペンの上げ下げの時間 #define STR_TIME 500 // 長い直線の時間 #define HALF_TIME 250 // 短い直線の時間 #define TURN_TIME 520 // 回転の時間 よく使うものを先に定義しておく。 長い直線の時間は「車」の一番上と一番下の横棒の時間。 短い直線の時間は「車」の「日」の部分の時間。 sub pen_down() // ペンを下げる { OnRev(OUT_A,SPEED); Wait(PEN_TIME); Off(OUT_A); } sub pen_up() // ペンを上げる { OnFwd(OUT_A,SPEED); Wait(PEN_TIME); Off(OUT_A); } この二つは、ペンの上げ下げの動作をあらかじめサブルーチンにしたもの。 sub turn_r() // 右に回転 { Wait(1000); // 時間の猶予 OnFwd(OUT_C,SPEED); OnRev(OUT_B,SPEED); Wait(TURN_TIME); Off(OUT_BC); } sub turn_l() // 左に回転 { Wait(1000); // 時間の猶予 OnFwd(OUT_B,SPEED); OnRev(OUT_C,SPEED); Wait(TURN_TIME); Off(OUT_BC); } この二つは、それぞれ左右に90度回転するサブルーチン。 「車」という字は、全てが直角になっているため90度に設定した。 また、本体の揺れが回転に影響を与えてしまわないように時間の猶予をあたえた。 sub tunagi_f(int t) // 位置調整の前進 { Wait(1000); // 時間の猶予 OnFwd(OUT_BC,SPEED); Wait(t); Off(OUT_BC); } sub tunagi_r(int t) // 位置調整の後退 { Wait(1000); // 時間の猶予 OnRev(OUT_BC,SPEED); Wait(t); Off(OUT_BC); } これらは、位置を微調整するために作ったもので、使う場所によって時間が異なるため、直接時間を入力するようにした。 #ref(2017a/Member/mitsu/Mission1/unnamed1.jpg,50%,一画目) sub kaku1() // 一画目 { pen_down(); OnFwd(OUT_BC,SPEED); Wait(STR_TIME); Off(OUT_BC); pen_up(); tunagi_f(250); turn_r(); tunagi_r(220); } 一画目から二画目の直前までのサブルーチン。 #ref(2017a/Member/mitsu/Mission1/unnamed2.jpg,50%,二画目) sub kaku2() // 二画目 { Wait(500); pen_down(); OnFwd(OUT_BC,SPEED); Wait(HALF_TIME); Off(OUT_BC); pen_up(); tunagi_f(100); turn_r(); tunagi_r(150); } 二画目から三画目の直前までのサブルーチン。 #ref(2017a/Member/mitsu/Mission1/unnamed3.jpg,50%,三画目) sub kaku3() // 三画目 { Wait(500); pen_down(); OnRev(OUT_BC,SPEED); Wait(HALF_TIME); Off(OUT_BC); pen_up(); turn_l(); tunagi_f(150); turn_r(); tunagi_f(50); } 三画目から四画目の直前までのサブルーチン。 #ref(2017a/Member/mitsu/Mission1/unnamed4.jpg,50%,四画目) sub kaku4() // 四画目 { Wait(500); pen_down(); OnFwd(OUT_BC,SPEED); Wait(HALF_TIME); Off(OUT_BC); pen_up(); turn_l(); tunagi_f(150); turn_r(); } 四画目から五画目の直前までのサブルーチン。 #ref(2017a/Member/mitsu/Mission1/unnamed5.jpg,50%,五画目) sub kaku5() // 五画目 { Wait(500); pen_down(); OnRev(OUT_BC,SPEED); Wait(HALF_TIME); Off(OUT_BC); pen_up(); tunagi_f(650); turn_r(); tunagi_r(150); } 五画目から六画目の直前までのサブルーチン。 #ref(2017a/Member/mitsu/Mission1/unnamed6.jpg,50%,六画目) sub kaku6() // 六画目 { Wait(500); pen_down(); OnRev(OUT_BC,SPEED); Wait(HALF_TIME); Off(OUT_BC); pen_up(); tunagi_f(200); turn_r(); tunagi_r(500); } 六画目から七画目の直前までのサブルーチン。 #ref(2017a/Member/mitsu/Mission1/unnamed7.jpg,50%,七画目) sub kaku7() // 七画目 { Wait(500); pen_down(); OnFwd(OUT_BC,SPEED); Wait(STR_TIME); Off(OUT_BC); pen_up(); tunagi_f(200); turn_r(); tunagi_r(250); } 七画目から八画目の直前までのサブルーチン。 #ref(2017a/Member/mitsu/Mission1/unnamed8.jpg,50%,八画目) sub kaku8() // 八画目 { Wait(500); pen_down(); OnRev(OUT_BC,SPEED); Wait(750); Off(OUT_BC); pen_up(); } 八画目のサブルーチン。 task main() { kaku1(); // 一画目 kaku2(); // 二画目 kaku3(); // 三画目 kaku4(); // 四画目 kaku5(); // 五画目 kaku6(); // 六画目 kaku7(); // 七画目 kaku8(); // 八画目 } * 結果と反省 [#u7979d09] * 感想 [#jca02c52]