*目次 [#b782d0ee] #contents *課題について [#yf9b9e75] 課題については[[課題1>2017a/Mission1]]を参照。 **選んだ字について [#hd4f2933] 一人暮らしには、何事にも判断が必要になるということで「判」という字を選んだ。 *ロボットについて [#h6289520] &ref(2017a/Member/Kawachan/Mission1/ロボット前面.JPG,50%,ロボット前面); &ref(2017a/Member/Kawachan/Mission1/ロボット側面.JPG,50%,ロボット側面); 今回のロボットは最初に取扱説明書に書いてあった車に筆ペンを稼働させるアームを取り付けた構造にした。筆ペンの固定方法に関しては、一番上のバーで筆ペンが書くときに上方向の移動を、側面4本のバーと輪ゴムで左右と下方向の移動を抑えている。 &ref(2017a/Member/Kawachan/Mission1/ペン先ータイヤ.JPG,50%,ペン先とタイヤの位置関係); ※ペン先が見やすいように画像を加工 また、ペンの先の延長線上にタイヤがあるようにしている。このようにした理由は後述の【プログラムについて/回転時】で説明する。 &ref(2017a/Member/Kawachan/Mission1/ロボット分解.JPG,50%,ロボット分解); さらに上の写真のように、ロボット本体とアーム部分の分解を容易にすることで、収納ケースへの収納やアームの微調整をしやすくしている。 *プログラムについて [#j275c876] **書き順 [#r2cc3783] &ref(2017a/Member/Kawachan/Mission1/書き順.jpg,50%,書き順); ロボットでの書き順は、本来の書き順ではなくこのようにした。 **直進時 [#g42d5a0f] ロボットが直進する際にアーム部分の重さによって、左右同じ出力にすると前進した際に徐々に右に曲がってしまう。そこで、左右の出力を OnFwd(OUT_B,27); OnFwd(OUT_C,24); というように違う値にすることによって、なるべく真っ直ぐ進むようにした。 また、進む時間を #define STRAIGHT_TIME_0 0 #define STRAIGHT_TIME_1 114 #define STRAIGHT_TIME_2 228 #define STRAIGHT_TIME_3 342 #define STRAIGHT_TIME_4 456 #define STRAIGHT_TIME_5 570 #define STRAIGHT_TIME_6 684 #define STRAIGHT_TIME_8 912 #define STRAIGHT_TIME_10 1140 #define STRAIGHT_TIME_11 1254 #define STRAIGHT_TIME_12 1368 #define STRAIGHT_TIME_14 1596 と1単位「114」とし、12パターンの秒数を設定した。このようにすることで、後の「task main」のところで、線の長さや書き始めの位置の調整をしやすくした。 **回転時 [#c2b19676] &ref(2017a/Member/Kawachan/Mission1/ペンの誤差.JPG,50%,誤差の原因); ロボットをそのまま回転してしまうと上の写真の部分の長さによって、書き始めの位置に誤差が出てしまうため、次のように回転するようにした。 1.書き終えた位置(水色の点)の上に右のタイヤが乗るように前進する。 &ref(2017a/Member/Kawachan/Mission1/1.jpg,50%,1); OnFwd(OUT_B,52); OnFwd(OUT_C,50); Wait(550); Off(OUT_BC); 2.右のタイヤを中心に回転する。 &ref(2017a/Member/Kawachan/Mission1/2.jpg,50%,2); OnFwd(OUT_C,50); Wait(1020); Off(OUT_C); 3.書き終えた位置にペン先が来るように後進する。 &ref(2017a/Member/Kawachan/Mission1/3.jpg,50%,3); OnRev(OUT_B,52); OnRev(OUT_C,50); Wait(650); Off(OUT_BC); なお、上に示したプログラムは時計回りに90度回るときのものだが、2の部分でモーターの回転する向きや秒数を変えるだけで、角度や回転の向きの変更が可能である。 今回は「時計回りに90度」・「時計回りに45度」・「反時計回りに90度」・「反時計回りに45度」のプログラムを定義した。 **ペンの上げ下げ [#weec5a62] ペンを設置する部分にはそれなりに重さがあるため、ある一定の角度を超えると自然と前に倒れてしまう。そこで、上げるときの出力を大きくすることで対処した。 ペンを上げるプログラム OnRev(OUT_A,25); Wait(800); Off(OUT_A); ペンを下げるプログラム OnFwd(OUT_A,10); Wait(800); Off(OUT_A); **プログラム全体 [#gdae77ad] ロボットに送信したプログラムは以下の通り。 #define STRAIGHT_TIME_0 0 #define STRAIGHT_TIME_1 114 #define STRAIGHT_TIME_2 228 #define STRAIGHT_TIME_3 342 #define STRAIGHT_TIME_4 456 #define STRAIGHT_TIME_5 570 #define STRAIGHT_TIME_6 684 #define STRAIGHT_TIME_8 912 #define STRAIGHT_TIME_10 1140 #define STRAIGHT_TIME_11 1254 #define STRAIGHT_TIME_12 1368 #define STRAIGHT_TIME_14 1596 #define pen_down OnFwd(OUT_A,10);\ Wait(800);\ Off(OUT_A);\ #define pen_up OnRev(OUT_A,25);\ Wait(800);\ Off(OUT_A);\ #define turn_right_90 OnFwd(OUT_B,52);\ OnFwd(OUT_C,50);\ Wait(550);\ Off(OUT_BC);\ OnFwd(OUT_C,50);\ Wait(1020);\ Off(OUT_C);\ OnRev(OUT_B,52);\ OnRev(OUT_C,50);\ Wait(650);\ Off(OUT_BC);\ #define turn_left_90 OnFwd(OUT_B,52);\ OnFwd(OUT_C,50);\ Wait(550);\ Off(OUT_BC);\ OnRev(OUT_C,50);\ Wait(1020);\ Off(OUT_C);\ OnRev(OUT_B,52);\ OnRev(OUT_C,50);\ Wait(650);\ Off(OUT_BC);\ #define turn_right_45 OnFwd(OUT_B,52);\ OnFwd(OUT_C,50);\ Wait(550);\ Off(OUT_BC);\ OnFwd(OUT_C,50);\ Wait(510);\ Off(OUT_C);\ OnRev(OUT_B,52);\ OnRev(OUT_C,50);\ Wait(650);\ Off(OUT_BC);\ #define turn_left_45 OnFwd(OUT_B,52);\ OnFwd(OUT_C,50);\ Wait(550);\ Off(OUT_BC);\ OnRev(OUT_C,50);\ Wait(510);\ Off(OUT_C);\ OnRev(OUT_B,52);\ OnRev(OUT_C,50);\ Wait(650);\ Off(OUT_BC);\ #define straight OnFwd(OUT_B,27);\ OnFwd(OUT_C,24);\ #define back OnRev(OUT_B,27);\ OnRev(OUT_C,24);\ task main () { straight; Wait(STRAIGHT_TIME_3); Off(OUT_BC); // 3前進 turn_right_90; // 90度時計 straight; Wait(STRAIGHT_TIME_4); Off(OUT_BC); // 4前進 turn_right_45; // 45度時計 pen_down; // ペン下ろす back; Wait(STRAIGHT_TIME_2); Off(OUT_BC); // 1画目 pen_up; // ペン上げる straight; Wait(STRAIGHT_TIME_2); Off(OUT_BC); // 2前進 turn_right_45; // 45度時計 back; Wait(STRAIGHT_TIME_0); Off(OUT_BC); // 0後進 turn_left_90; // 90度反時計 straight; Wait(STRAIGHT_TIME_3); Off(OUT_BC); // 3前進 pen_down; // ペン下ろす back; Wait(STRAIGHT_TIME_6); Off(OUT_BC); // 2画目 pen_up; // ペン上げる straight; Wait(STRAIGHT_TIME_4); Off(OUT_BC); // 4前進 turn_right_90; // 90度時計 back; Wait(STRAIGHT_TIME_1); Off(OUT_BC); // 1後進 turn_left_90; // 90度反時計 straight; Wait(STRAIGHT_TIME_5); Off(OUT_BC); // 5前進 pen_down; // ペン下ろす back; Wait(STRAIGHT_TIME_8); Off(OUT_BC); // 3画目 pen_up; // ペン上げる straight; Wait(STRAIGHT_TIME_3); Off(OUT_BC); // 3前進 turn_right_90; // 90度時計 straight; Wait(STRAIGHT_TIME_8); Off(OUT_BC); // 8前進 pen_down; // ペン下ろす back; Wait(STRAIGHT_TIME_14); Off(OUT_BC); // 4画目 pen_up; // ペン上げる straight; Wait(STRAIGHT_TIME_14); Off(OUT_BC); // 12前進 turn_right_90; // 90度時計 straight; Wait(STRAIGHT_TIME_6); Off(OUT_BC); // 6前進 turn_left_45; // 45度反時計 pen_down; // ペン下ろす back; Wait(STRAIGHT_TIME_2); Off(OUT_BC); // 5画目 pen_up; // ペン上げる straight; Wait(STRAIGHT_TIME_2); Off(OUT_BC); // 2前進 turn_right_45; // 45度時計 straight; Wait(STRAIGHT_TIME_6); Off(OUT_BC); // 6前進 turn_left_90; // 90度反時計 pen_down; // ペン下ろす back; Wait(STRAIGHT_TIME_3); Off(OUT_BC); // 6画目 pen_up; // ペン上げる straight; Wait(STRAIGHT_TIME_3); Off(OUT_BC); // 3前進 turn_right_90; // 90度時計 straight; Wait(STRAIGHT_TIME_5); Off(OUT_BC); // 5前進 turn_left_90; // 90度反時計 straight; Wait(STRAIGHT_TIME_2); Off(OUT_BC); // 2前進 pen_down; // ペン下ろす back; Wait(STRAIGHT_TIME_11); Off(OUT_BC); // 7画目 pen_up; // ペン上げる } *まとめ [#wa1bc311] **書いた文字 [#m247c5d8] &ref(2017a/Member/Kawachan/Mission1/文字.JPG,50%,ロボットで書いた文字); **感想 [#a1af8cc6]