目次 #contents *課題 [#uf6cc320] 今回の課題は、似顔絵を描くロボットを作ることである。 *ロボット本体の説明 [#o8811721] **本体の説明 [#h51b7730] 2つのモーター(A,C)を用いて本体の前後の動作を行っている。~ &ref(2016a/Member/michiya/Mission1/IMG_3641.JPG,50%,zentaizou); **ペン部分の説明 [#a2ceef28] モーター(B)とタイヤ2つを用いてベンの上下の動作を行っている。~ モーターとギアを噛み合わせてタイヤ2つを動かしている。 &ref(2016a/Member/michiya/Mission1/IMG_3624.JPG,50%,pen);~ &ref(2016a/Member/michiya/Mission1/IMG_3623.JPG,50%,pen); *似顔絵の作成 [#z1822482] **下書き [#xeda085f] プログラミングしやすいように角ばった顔にした。~ 旋回によってペン先がずれてしまうため、一度後退してからペン先をあわせるようにした。~ &ref(2016a/Member/michiya/Mission1/image2.JPG,25%,kao); **描き順 [#g347dd0b] 下図のように、1〜13の順で描いた。~ &ref(2016a/Member/michiya/Mission1/IMG_1266 (1).JPG,120%,kakijyun); *プログラムの説明 [#yaa38967] **定義の説明 [#j5f9361e] 旋回、前進後退の時間の定義である。 #define TURN_TIMEi 125 #define TURN_TIMEii 90 #define TURN_TIMEiii 46 #define TURN_TIMEiv 80 #define TURN_TIMEv 200 #define forword_TIME 50 ペンの上下運動の定義である。 #define down OnFwd(OUT_B);Wait(10);Off(OUT_B); #define up OnRev(OUT_B);Wait(10);Off(OUT_B); 直進、左右旋回の定義である。(行変更の際の記号が¥となっている) #define go_forward(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC); #define turn_right_i up;OnRev(OUT_AC);Wait(50); \ OnRev(OUT_C); OnFwd(OUT_A);Wait(TURN_TIMEi); \ go_forward(forword_TIME);down;Off(OUT_ABC); #define turn_left_i up;OnRev(OUT_A); OnFwd(OUT_C);Wait(TURN_TIMEv); \ go_forward(forword_TIME); #define turn_right_ii up;OnRev(OUT_AC);Wait(50); \ OnRev(OUT_C); OnFwd(OUT_A);Wait(TURN_TIMEii); \ go_forward(forword_TIME);down;Off(OUT_ABC); #define turn_left_ii up;OnRev(OUT_AC);Wait(50); \ OnRev(OUT_A); OnFwd(OUT_C);Wait(TURN_TIMEii); \ go_forward(forword_TIME);down;Off(OUT_ABC); #define turn_right_iii up;OnRev(OUT_AC);Wait(50); \ OnRev(OUT_C); OnFwd(OUT_A);Wait(TURN_TIMEiii); \ go_forward(forword_TIME);down;Off(OUT_ABC); #define turn_right_iv up;OnRev(OUT_AC);Wait(40); \ OnRev(OUT_C); OnFwd(OUT_A);Wait(TURN_TIMEiv); \ go_forward(forword_TIME);down;Off(OUT_ABC); 直進、左右旋回の定義を利用して、実際にプログラム本文でよく使う定義である。 #define face(t) turn_right_iii; go_forward(t); #define face_i(t) turn_right_ii; go_forward(t); #define face_ii(t) turn_right_iv; go_forward(t); #define face_iii(t) turn_left_ii; go_forward(t); **実際に使ったプログラム [#p9bbdbd2] task main() { OnFwd(OUT_B); Wait(3); Off(OUT_B); go_forward(100); face(32); face(80); face(32); face(100); face_i(110); //輪郭終了 face_i(25); face_ii(50); face_i(20); face_iii(60); //髪終了 turn_left_i; go_forward(30); repeat(2){ go_forward(30); down; go_forward(30); up; //目終了 } OnRev(OUT_C); OnFwd(OUT_A); Wait(TURN_TIMEi); go_forward(TURN_TIMEiii); OnRev(OUT_C); OnFwd(OUT_A); Wait(TURN_TIMEiv); go_forward(TURN_TIMEi); down; go_forward(forword_TIME); Off(OUT_ABC); //口終了 } *感想 [#ffa246d0] 顔のパーツを顔の中に収めるようにプログラミングするのが難しかった。~ また、一画かき終わった後にその続きから顔を描けるようにペン先をあわせるのが大変だった。