[[2016a/Member]] #contents *・はじめに [#yf11d292] 今回の課題はA4サイズの紙に似顔絵を描くロボットを作成すること。 なるべく誰か分かるように描きつつ、 main関数がなるべく単純になるようにプログラムを作ること。 *・ロボットの構造の説明 [#f86754a5] #ref(robot3.png) ペンはロボットのアームに輪ゴムで固定した。 アームのモーターを回転させることで、描く時はペンを下に動かし 移動する時はペンを上げて動かした。 ペンがグラグラしないようにいろいろなパーツを使って固定しすぎたため 見た目がごつくなってしまった。 もっと工夫すれば少ないパーツで組み立てられた思う。 #ref(robot5.png) *・プログラムの説明およびロボットの動作 [#e6d097b9] OnFwd(OUT_BC,30);Wait(t);Off(OUT_BC); これはモーターを30%の力でt秒間前進させた後に止めるプログラム。 OnRev(OUT_BC,30);Wait(t);Off(OUT_BC); これはモーターを30%の力でt秒間後進させた後に止めるプログラム。 OnFwd(OUT_B,40);Wait(t);Off(OUT_B);またはOnFwd(OUT_C,40)Wait(t);Off(OUT_BC); これはモーターを40%の力にし、タイヤBまたはCを軸にしてタイヤBまたはCだけを動かし、 t秒間ロボットを回転させるプログラム。 RotateMotor(OUT_A,25,45);またはRotateMotor(OUT_A,-25,45); これは腕のモーターを25%の力で45度回転させるプログラム。 モーターの力の%の所の数字を+にするとペンを上げ ーにするとペンを下げる。 ** 顔の輪郭(右) [#p05b4b36] #define OnFwd(OUT_BC,30);Wait(s);Off(OUT_BC); RotateMotor(OUT_A,25,45); OnFwd(OUT_BC,30);Wait(t);Off(OUT_BC); WRITE(700,1000)//前進後ペンを上げ再び前進 OnFwd(OUT_C,40);Wait(800);Off(OUT_C);//顔右、右に約45度回転 OnRev(OUT_BC,30);Wait(1500);Off(OUT_BC);//顎右、後進 RotateMotor(OUT_A,-25,45);OnFwd(OUT_BC,30);Wait(600);Off(OUT_BC)//ペンを下げ前進する 顔の輪郭(右)は 顎の角度を調節するのが大変だった。 **顔の輪郭(左) [#m9c39f4d] RotateMotor(OUT_A,25,45);//左顎 OnFwd(OUT_BC,30);Wait(600);Off(OUT_BC);OnFwd(OUT_B,40);Wait(1600); Off(OUT_B);OnRev(OUT_BC,30);Wait(2300);Off(OUT_BC); RotateMotor(OUT_A,-25,45); OnRev(OUT_BC,30);Wait(700);Off(OUT_BC); RotateMotor(OUT_A,25,45);//顔左 OnFwd(OUT_BC,30);Wait(1000);Off(OUT_BC); OnFwd(OUT_C,40);Wait(500);Off(OUT_C); OnRev(OUT_BC,30);Wait(1300);Off(OUT_BC); RotateMotor(OUT_A,-25,45); OnRev(OUT_BC,30);Wait(750);Off(OUT_BC); RotateMotor(OUT_A,25,45);//左顎、ペンを下げる OnFwd(OUT_BC,30);Wait(600);Off(OUT_BC);//前進 OnFwd(OUT_B,40);Wait(1600);Off(OUT_B);//左に約90度回転 OnRev(OUT_BC,30);Wait(2300);Off(OUT_BC);//後進 RotateMotor(OUT_A,-25,45);//ペンを下げる OnRev(OUT_BC,30);Wait(700);Off(OUT_BC);//後進 RotateMotor(OUT_A,25,45);//顔左、ペンを上げる OnFwd(OUT_BC,30);Wait(1000);Off(OUT_BC);//前進 OnFwd(OUT_C,40);Wait(500);Off(OUT_C);//右に約20度回転 OnRev(OUT_BC,30);Wait(1300);Off(OUT_BC);//後進 RotateMotor(OUT_A,-25,45);//ペンを下げる OnRev(OUT_BC,30);Wait(750);Off(OUT_BC);//後進 顔の輪郭(左)は 右顎から左顎を描くところが一番難しかった。 少しでも角度がずれると全く見当違いのところに行くので何回も 微調整をした。 **髪型 [#a3bbad79] RotateMotor(OUT_A,25,45);//左髪 OnFwd(OUT_BC,30);Wait(1050);Off(OUT_BC); OnFwd(OUT_C,40);Wait(800);Off(OUT_C); OnRev(OUT_BC,30);Wait(1450);Off(OUT_BC); RotateMotor(OUT_A,-25,45); OnRev(OUT_BC,30);Wait(900);Off(OUT_BC); RotateMotor(OUT_A,25,45);//右髪 OnFwd(OUT_BC,30);Wait(900);Off(OUT_BC); OnFwd(OUT_C,40);Wait(1200);Off(OUT_C); OnRev(OUT_BC,30);Wait(1800);Off(OUT_BC); RotateMotor(OUT_A,-25,45); OnRev(OUT_BC,30);Wait(950);Off(OUT_BC); RotateMotor(OUT_A,25,45);//前髪 OnFwd(OUT_BC,30);Wait(1000);Off(OUT_BC); OnFwd(OUT_B,40);Wait(650);Off(OUT_B); OnRev(OUT_BC,30);Wait(1500);Off(OUT_BC); RotateMotor(OUT_A,-25,45); OnFwd(OUT_BC,30);Wait(1200);Off(OUT_BC); RotateMotor(OUT_A,25,45);//左髪、ペンを上げる OnFwd(OUT_BC,30);Wait(1050);Off(OUT_BC);//前進 OnFwd(OUT_C,40);Wait(800);Off(OUT_C);//右に約40度回転 OnRev(OUT_BC,30);Wait(1450);Off(OUT_BC);//後進 RotateMotor(OUT_A,-25,45);//ペンを下げる OnRev(OUT_BC,30);Wait(900);Off(OUT_BC);//後進 RotateMotor(OUT_A,25,45);//右髪、ペンを上げる OnFwd(OUT_BC,30);Wait(900);Off(OUT_BC);//前進 OnFwd(OUT_C,40);Wait(1200);Off(OUT_C);//右に約50度回転 OnRev(OUT_BC,30);Wait(1800);Off(OUT_BC);//後進 RotateMotor(OUT_A,-25,45);//ペンを下げる OnRev(OUT_BC,30);Wait(950);Off(OUT_BC);//後進 RotateMotor(OUT_A,25,45);//前髪、ペンを上げる OnFwd(OUT_BC,30);Wait(1000);Off(OUT_BC);//前進 OnFwd(OUT_B,40);Wait(650);Off(OUT_B);//左に約30度回転 OnRev(OUT_BC,30);Wait(1500);Off(OUT_BC);//後進 RotateMotor(OUT_A,-25,45);//ペンを下げる OnFwd(OUT_BC,30);Wait(1200);Off(OUT_BC);//前進 髪型の部分は 顎の部分と同じように考えることが出来たので スムーズに進んだ。 **目 [#y1e550fd] RotateMotor(OUT_A,25,45);//目 OnFwd(OUT_BC,30);Wait(500);Off(OUT_BC); OnFwd(OUT_C,40);Wait(1500);Off(OUT_C); OnRev(OUT_BC,30);Wait(350);Off(OUT_BC); OnRev(OUT_C,40);Wait(1500);Off(OUT_C); OnRev(OUT_BC,30);Wait(500);Off(OUT_BC); RotateMotor(OUT_A,-25,45); OnRev(OUT_BC,30);Wait(250);Off(OUT_BC); RotateMotor(OUT_A,25,45); OnRev(OUT_BC,30);Wait(300);Off(OUT_BC); RotateMotor(OUT_A,-25,45); OnRev(OUT_BC,30);Wait(250);Off(OUT_BC); RotateMotor(OUT_A,25,45);//目、ペンを上げる OnFwd(OUT_BC,30);Wait(500);Off(OUT_BC);//前進 OnFwd(OUT_C,40);Wait(1500);Off(OUT_C);//右に約90度回転 OnRev(OUT_BC,30);Wait(350);Off(OUT_BC);//後進 OnRev(OUT_C,40);Wait(1500);Off(OUT_C);//右に約90度回転 OnRev(OUT_BC,30);Wait(500);Off(OUT_BC);//後進 RotateMotor(OUT_A,-25,45);//ペンを下げる OnRev(OUT_BC,30);Wait(250);Off(OUT_BC);//後進 RotateMotor(OUT_A,25,45);//ペンを上げる OnRev(OUT_BC,30);Wait(300);Off(OUT_BC);//後進 RotateMotor(OUT_A,-25,45);//ペンを下げる OnRev(OUT_BC,30);Wait(250);Off(OUT_BC);//後進 **鼻 [#j09d44ac] RotateMotor(OUT_A,25,45);//鼻 OnFwd(OUT_BC,30);Wait(1200);Off(OUT_BC); OnFwd(OUT_C,40);Wait(1550);Off(OUT_B); OnRev(OUT_BC,30);Wait(2150);Off(OUT_BC); RotateMotor(OUT_A,-25,45); OnRev(OUT_BC,30);Wait(175);Off(OUT_BC); OnFwd(OUT_BC,30);Wait(1200);Off(OUT_BC);//前進 OnFwd(OUT_C,40);Wait(1550);Off(OUT_B);//右に約90度回転 OnRev(OUT_BC,30);Wait(2150);Off(OUT_BC);//後進 RotateMotor(OUT_A,-25,45);//ペンを下げる OnRev(OUT_BC,30);Wait(175);Off(OUT_BC);//後進 鼻は少しでも右や左にずれると顔がおかしく見えたので 顔の中心に来るように調節するのが大変だった。 **口 [#d6c1ba22] RotateMotor(OUT_A,25,45);//口 OnFwd(OUT_BC,30);Wait(1800);Off(OUT_BC); OnRev(OUT_C,40);Wait(1600);Off(OUT_C); OnRev(OUT_BC,30);Wait(600);Off(OUT_BC); RotateMotor(OUT_A,-25,45); OnRev(OUT_BC,30);Wait(300);Off(OUT_BC); RotateMotor(OUT_A,25,45);//口、ペンを上げる OnFwd(OUT_BC,30);Wait(1800);Off(OUT_BC);//前進 OnRev(OUT_C,40);Wait(1600);Off(OUT_C);//右に約90度回転 OnRev(OUT_BC,30);Wait(600);Off(OUT_BC);//後進 RotateMotor(OUT_A,-25,45);//ペンを下げる OnRev(OUT_BC,30);Wait(300);Off(OUT_BC);//後進 *練習の時とテストの時の似顔絵 [#af310488] **練習時の似顔絵 [#w57c0d4d] #ref(robo88.png) プログラムを作り終え、動かす時間などを少し微調整した直後の似顔絵。 この後 顎と髪型と鼻の微調整をするのが大変だった。 **テスト時の似顔絵 [#jd644196] #ref(robo24.png) 本番直前ギリギリまで調整して 本番で一番上手くいった。 *・感想・考察 [#m9508252] ロボットの組み立て上、丸顔にすることが出来なかった ので、プログラムが長くなってしまった。組み立ての際にもっと工夫すれば よかった。#defineを上手く使えていなかったので次のミッションでは上手く使いたい。 電池の残量によってロボットのスピードが変わるので 残量も計算しながら動かす時間を考えるのが大変だった。 大変なことが多かったけれど、達成感が得られたのは良かった。