- 追加された行はこの色です。
- 削除された行はこの色です。
*課題1 [#z183b23a]
#contents
*この課題の目的 [#x7e98ed5]
相棒の似顔絵を描くロボットを作る。
*手段 [#i65f602e]
NQCプログラミングとRCX2を使用する。
#br 付属物のほかに、鉛筆を用意した。
付属物のほかに、鉛筆を用意した。
*完成品 [#za68a9a3]
**お絵描きロボット初号機 [#i11cc446]
・鉛筆を単純に固定したシンプルなもの
(写真と説明)
・鉛筆を単純に固定したシンプルなもの。
・ゴムと軸を使って固定されている。
#ref(081030_175331.jpg)
**二号機 [#l161d7bb]
(写真と説明)
#ref(081105_161528.jpg)
・一号を改良したもの。鉛筆部分が回るようになっている。
**三号機 [#na7ac058]
・最終的に行き着いた形。
(写真と説明)
#ref(081105_173314.jpg)
・最終的に行き着いた形。 ↓上から見た図。
#ref(081105_172743.jpg)
**プログラム [#a1dd775c]
***第一段階 A [#mc21d647]
void go_straight(int t)// t/100秒間前進
{
OnFwd(OUT_A+OUT_C);Wait(t);
Off(OUT_A+OUT_C);
}
void go_back(int t)// t/100秒間後退
{
OnRev(OUT_A+OUT_C);Wait(t)
Off(OUT_A+OUT_C);
}
void turn_right(int t)// t/100秒間右回りに回転
{
OnFwd(OUT_A);OnRev(OUT_C);
Wait(t);
Off(OUT_A+OUT_C);
}
void turn_left(int t)// t/100秒間左回りに回転
{
OnFwd(OUT_C);OnRev(OUT_A);
Wait(t);
Off(OUT_A+OUT_C);
}
task main()
{
go_straight(100);//右目
turn_left();//90°左へ
go_straight(100);//右頬
turn_left();//60°左へ
go_straight(100);//右顎
turn_left();//60°左へ
go_straight(100);//左顎
turn_left();//60°左へ
go_straight(100);//左頬
turn_left();//90°左へ
go_straight(100);//左目
go_back(100);
turn_right();//90°右へ
repeat(3)//髪の毛
{
go_straight(115);
turn_left();//150°左へ
go_straight(115);
turn_right();//150°右へ
}
}
task main()
{
OnFwd(OUT_A);Wait();//時計回りに一回転
Off(OUT_A);
turn_right();//右に90°
go_straight();
OnFwd(OUT_3);Wait();//左レンズ
Off(OUT_3);
go_straight();
OnFwd(OUT_3);Wait();//右レンズ
Off(OUT_3);
go_straight();
}
***第一段階 B [#uee579b8]
#define TURN_T 54 //time for faceturn
#define turn_l OnRev(OUT_A);OnFwd(OUT_C);Wait(81);Off(OUT_A+OUT_C); //turn
#defrine turn_r OnFwd(OUT_A);OnRev(OUT_C);Wait(108);Off(OUT_A+OUT_C);
sub hair()
{
OnFwd(OUT_A+OUT_C);
Wait(35);
Off(OUT_A+OUT_C);
OnRev(OUT_A);OnFwd(OUT_C);
Wait(108);
Off(OUT_A+OUT_C);
OnFwd(OUT_A+OUT_C);
Wait(35);
Off(OUT_A+OUT_C);
}
sub turn() //sub for turn
{
OnRev(OUT_A); OnFwd(OUT_C);
Wait(TURN_T);
Off(OUT_A+OUT_C);
}
sub go() //sub for face
{
OnFwd(OUT_A+OUT_C);
Wait(30);
Off(OUT_A+OUT_C);
}
task main()
{
OnFwd(OUT_A+OUT_C); Wait(10); Off(OUT_A+OUT_C); //eye
turn_l;
//for face start
go();
turn();
go();
turn();
go();
turn(); // faceline end
turn_l;
OnFwd(OUT_A+OUT_C); Wait(10); Off(OUT_A+OUT_C); //eye go
OnRev(OUT_A+OUT_C); Wait(10); Off(OUT_A+OUT_C); //eye back
OnFwd(OUT_A); OnRev(OUT_C); Wait(54); Off(OUT_A+OUT_C); //turn
OnFwd(OUT_A+OUT_C);Wait(5);Off(OUT_A+OUT_C); //forehead
hair();
turn_r;
hair();
turn_r:
hair();
OnFwd(OUT_A); OnRev(OUT_C); Wait(54); Off(OUT_A+OUT_C); //turn
OnFwd(OUT_A+OUT_C);Wait(5);Off(OUT_A+OUT_C); //forehead
}
しかし両プログラムともこのロボットの形(先頭に鉛筆)だとそもそも予定していた線がかけないことが判明。
しかし両プログラムともこのロボットの形(先頭に鉛筆)だと、
曲がり方の問題からそもそも予定していた線がかけないことが判明。
**改良 [#fc3c8624]
***改善点 [#z555a8b2]
・このプログラムだとうまくいかないことから、本体かプログラムの変更ということでプログラムの方をきれいに描けるよう変更した。
***改善後のプログラム [#l777a7a5]
#define RENZ OnFwd(OUT_B);Wait(297);Off(OUT_B); //grass
#define TURU OnRev(OUT_A+OUT_C);Wait(20);Off(OUT_A+OUT_C) //grassline
task main()
{
SetPower(OUT_A+OUT_C+OUT_B,1);
OnFwd(OUT_A);OnRev(OUT_C); //face
Wait(400);
Off(OUT_A+OUT_C);
TURU;
OnFwd(OUT_B);Wait(323);Off(OUT_B); //grass
TURU;
RENZ;
TURU;
}
*まとめ/考察/感想 [#w43c45f7]
・ややぎこちなく動くので、もう少し滑らかに出来ればよかったと思う。
・プログラムを作成した後にロボットの動き方と鉛筆の位置との関係に気づいたりしたため、ずいぶんと慌ててしまった。
#br
#br
*コメントをどうぞ
#comment