- 追加された行はこの色です。
- 削除された行はこの色です。
#contents
*課題1:お絵かきロボット [#c731371b]
A3の紙に相棒の似顔絵を書くロボットを作成せよ。
•ひとりにつき一つ以上のプログラムを作成すること。
•ペン以外はキットに含まれる部品を使うこと。
•キットに付属の高価な輪ゴムは切れやすいので切れないように細心の注意を払うこと。
•改良や調整をしやすくするため、ロボット本体だけでなく、プログラムについても可能な部分についてはサブルーチンや関数、マクロなどを使って部品に分けること。
*ロボットの仕組み [#db77bc51]
#ref(2010a/a3/課題1右/100519_214629)
*似顔絵について [#vfdfc1c1]
**村人Aの場合 [#g9cc648f]
基本プログラム
#define EYE 50//目の長さ
#define NOSE 50//鼻の長さ
#define MOUSE 85//口の長さ
void go_straigth(int t)//直進
{
OnFwd(OUT_A+OUT_C);
Wait(t);
Off(OUT_A+OUT_C);
}
{
OnFwd(OUT_A+OUT_C);
Wait(t);
Off(OUT_A+OUT_C);
}
void back(int t)//バック
{
OnRev(OUT_A+OUT_C);
Wait(t);
Off(OUT_A+OUT_C);
}
{
OnRev(OUT_A+OUT_C);
Wait(t);
Off(OUT_A+OUT_C);
}
sub turn_left()//左に曲がる
{
OnRev(OUT_A);
OnFwd(OUT_C);
Wait(100);
Off(OUT_A+OUT_C);
}
{
OnRev(OUT_A);
OnFwd(OUT_C);
Wait(100);
Off(OUT_A+OUT_C);
}
sub turn_right()//右に曲がる
{
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(100);
Off(OUT_A+OUT_C);
}
{
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(100);
Off(OUT_A+OUT_C);
}
sub arm_down()//アームを下ろす
{
OnFwd(OUT_B);
Wait(13);
Off(OUT_B);
}
{
OnFwd(OUT_B);
Wait(13);
Off(OUT_B);
}
sub arm_up()//アームを上げる
{
OnRev(OUT_B);
Wait(13);
Off(OUT_B);
}
{
OnRev(OUT_B);
Wait(13);
Off(OUT_B);
}
お絵かきプログラム
task main()
{
go_straigth(EYE);//目を描く
{
go_straigth(EYE);//目を描く
arm_up();
Wait(300);
go_straigth(EYE);
arm_down();
Wait(300);
go_straigth(EYE);
arm_up();
Wait(100);
back(75);
turn_left();
go_straigth(90);
arm_down();
Wait(300);
go_straigth(NOSE);//鼻を描く
arm_up();
Wait(300);
go_straigth(45);
turn_left();
arm_down();
Wait(300);
go_straigth(MOUSE);//口を描く
back(60);
arm_up();
Wait(300);
back(80);
turn_left();
go_straigth(90);
repeat(4)//顔の輪郭
{
repeat(4)//顔の輪郭
{
arm_down();
Wait(300);
go_straigth(160);
back(80);
arm_up();
Wait(300);
turn_right();
}
}
}
}
**もぇくぇの場合 [#rc7960a4]
#define go_straight OnFwd(OUT_A+OUT_C);
#define turn_left OnRev(OUT_A);OnFwd(OUT_C);
#define turn_right OnRev(OUT_C);OnFwd(OUT_A);
#define go_back OnRev(OUT_A+OUT_C);
#define turn_left_back Off(OUT_A);OnRev((OUT_C);
#define turn_right_back Off(OUT_C);OnRev(OUT_A);
#define pen_up OnFwd(OUT_B);Wait(10);Off(OUT_B);
#define pen_down OnRev(OUT_B);Wait(10);Off(OUT_B);
task main()
{
go_straight;/*左輪郭*/
Wait(100);
pen_up;
go_straight;
Wait(15);
turn_left;
Wait(70);
go_back;
Wait(50);
pen_down;
go_straight;/*左アゴ*/
Wait(60);
pen_up;
go_straight;
Wait(27);
turn_left;
Wait(50);
go_back;
Wait(40);
pen_down;
go_straight;/*右アゴ*/
Wait(60);
pen_up;
go_straight;
Wait(20);
turn_left;
Wait(70);
go_back;
Wait(40);
pen_down;
go_straight;/*右輪郭*/
Wait(90);
pen_up;
go_straight;
Wait(20);
turn_left;
Wait(90);
go_back;
Wait(70);
pen_down;
go_straight;/*前髪*/
Wait(185);
pen_up;
go_straight;
Wait(80);
turn_right;
Wait(150);
go_straight;
Wait(0);
pen_down;
go_straight;/*頭*/
Wait(60);
pen_up;
go_straight;
Wait(40);
turn_right;
Wait(60);
go_back;
Wait(20);
pen_down;
go_straight;/*頭頂部*/
Wait(160);
pen_up;
go_straight;
Wait(50);
turn_right;
Wait(100);
go_back;
Wait(15);
pen_down;
go_straight;/*後頭部*/
Wait(140);
pen_up;
go_straight;
Wait(55);
turn_right;
Wait(100);
go_back;
Wait(10);
pen_down;
go_straight;/*後ろ髪*/
Wait(40);
pen_up;
go_straight;
Wait(25);
pen_down;
go_straight;/*口*/
Wait(30);
pen_up;
go_straight;
Wait(50);
turn_right;
Wait(100);
go_straight;
Wait(20);
pen_down;
go_straight;/*右目*/
Wait(35);
pen_up;
go_straight;
Wait(30);
turn_right;
Wait(100);
go_straight;
Wait(80);
turn_right;
Wait(100);
go_back;
Wait(40);
pen_down;
go_straight;/*左目*/
Wait(40);
pen_up;
Off(OUT_A+OUT_C);
}
***もぇくぇの完成図 [#n88ab3ac]
#ref(2010a/A3/課題1右/うわらば.jpg,100%,蛍光ペンで書いたので見づらい…)
*苦労したこと [#j1c255bd]
***村人A [#faa9f3b4]
マシンがまっすぐ進まないので、少しずつ直線などがずれていくので、思い通りの絵がなかなかうまくかけなかった。
プログラムは難しい。
***もぇくぇ [#wf2d97a9]
ペンを上げ下げして新しい直線を描くときに位置の微調整が難航したことと、&br;
ある程度プログラムを組んでいくと挙動が安定しない、&br;
つまりうまく直線がつながらないことがあることに苦労をさせられました。
*反省 [#ra44d2fa]
***村人A [#k4f69e4c]
もうちょっとプログラムを簡略化できたのではないかと、思った。
もうちょっと頭を使って、難しい絵が描けたのではないかとおもった。
***もぇくぇ [#f90781ad]
結構、直線の位置を調整したにもかかわらず完璧にはつながらなかったこと、&br;
簡略化のため鼻や眉毛など一部の顔のパーツを省略したことが少し心残りです。&br;
*コメント [#z927614e]
好きなことを書いてください
#comment