2012a/A2/LoveCraft/M1
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*似顔絵ロボットの製作 [#u85f0c57]
''目次''
#contents
**はじめに [#v8af37e3]
今回ロボット製作、プログラミングの練習として出された1つ目...
~''ルール''
-紙はA4の白紙を使うこと
-キットに入っている部品(レゴ)と自分たちで用意したペン以...
-似顔絵を描くとき人が紙をおさえてはならない
-絵を描くとき、絨毯の上でやるか机の上でやるか選ぶことがで...
~こんなところです。これがかなり厳しいルールでロボット作り...
では、そろそろロボットの方を紹介していきましょう!
**製作したロボット、プログラム [#r92596fb]
***ロボットの構造 [#ubdef5c2]
何回かロボットの改良もしたので改良前のものも少し紹介した...
~&ref(20120513_006.jpg,left);''&size(40){⇒};''&ref(201205...
~左が改良前、右が改良後。直進するときや旋回するときに、動...
~&ref(20120522_174116.jpg,left);
~また、紙の上にロボットが乗るのではなく、ペンの部分を長く...
タイヤの部分についても少し改良を加えました。最初はモータ...
~&ref(20120520_213204.jpg);
~ペンの部分に関しては下の写真のような構造をしています。
~&ref(20120518_191317.jpg);
~モータの回転によって軸も回転しそれによってペンのついてい...
***プログラム [#a62bccd4]
&ref(似顔絵1.jpg);
~上のような似顔絵を描くプログラムです。ちなみに、
-(1)⇒右輪郭、左輪郭
-(2)⇒両目、鼻
-(3)⇒右眉毛
-(4)⇒口
-(5)⇒左眉毛のように対応しています。
#define STOP_TIME 100//作業のあと停止する時間を定義
#define line_time01 140//(1)の線を描く時間を定義
#define line_time02 30//(2)の線を描く時間を定義
#define line_time03 20//(3)の線を描く時間を定義
#define RIGHT_TURN_TIME 97//右に旋回する時間を定義
#define LEFT_TURN_TIME 90//左に旋回する時間を定義
#define line_time04 10//(4)の線を描く時間を定義
sub turn_right()
{
OnFwd(OUT_C);OnRev(OUT_A);Wait(RIGHT_TURN_TIME);
Off(OUT_AC);Wait(STOP_TIME);
}//右に90度旋回するためのサブルーチン
sub turn_left()
{
OnFwd(OUT_A);OnRev(OUT_C);Wait(LEFT_TURN_TIME);
Off(OUT_AC);Wait(STOP_TIME);
}//左に90度旋回するためのサブルーチン
sub draw_1st_line()
{
OnFwd(OUT_B);OnRev(OUT_AC);Wait(line_time01);
Off(OUT_ABC);Wait(STOP_TIME);OnFwd(OUT_AC);
Wait(100);Off(OUT_AC);Wait(STOP_TIME);
}//(1)の線を描くためのサブルーチン
sub draw_2nd_line()
{
OnFwd(OUT_B);OnRev(OUT_AC);Wait(line_time02);
Off(OUT_ABC);Wait(STOP_TIME);
}//(2)の線を描くためのサブルーチン
sub draw_3rd_line()
{
OnFwd(OUT_AB);Wait(line_time03);Off(OUT_AB);OnRev(OUT_A);
Wait(line_time03);Off(OUT_A);Wait(STOP_TIME);
}//(3)の線を描くためのサブルーチン
sub draw_4th_line()
{
OnFwd(OUT_A);OnRev(OUT_C);Wait(line_time04);Off(OUT_AC);
Wait(STOP_TIME);OnFwd(OUT_B); Wait(STOP_TIME);OnFwd(OUT_...
Wait(line_time04*2);Off(OUT_ABC);Wait(STOP_TIME);
OnFwd(OUT_A);OnRev(OUT_C);Wait(line_time04);Off(OUT_AC);
Wait(STOP_TIME);
}//(4)の線を描くためのサブルーチン
sub draw_5th_line()
{
OnFwd(OUT_BC);Wait(line_time03);Off(OUT_BC);OnRev(OUT_C);
Wait(line_time03);Off(OUT_C);Wait(STOP_TIME);
}//(5)の線を描くためのサブルーチン
sub go_straight()
{
OnFwd(OUT_AC);Wait(45);Off(OUT_AC);Wait(STOP_TIME);
}//直進して紙のまわりを移動するためのサブルーチン
task main()
{
draw_1st_line();turn_left();//右の輪郭を描く
go_straight();turn_right();//i移動
draw_3rd_line();//右の眉毛を描く
OnRev(OUT_AC);Wait(20);Off(OUT_AC);Wait(STOP_TIME);
draw_2nd_line();//右目を描く
OnFwd(OUT_AC);Wait(20);Off(OUT_AC);Wait(STOP_TIME);
turn_left();go_straight();turn_right();//移動
OnRev(OUT_AC);Wait(30);Off(OUT_AC);Wait(STOP_TIME);
draw_2nd_line();//鼻を描く
OnRev(OUT_AC);Wait(40);Off(OUT_AC);Wait(STOP_TIME);
draw_4th_line();//口を描く
OnFwd(OUT_AC);Wait(100);Off(OUT_AC);Wait(STOP_TIME);
turn_left();go_straight();turn_right();//移動
draw_5th_line();//左眉を描く
OnRev(OUT_AC);Wait(13);Off(OUT_AC);Wait(STOP_TIME);
draw_2nd_line();//左目を描く
OnFwd(OUT_AC);Wait(22);Off(OUT_AC);Wait(STOP_TIME);
turn_left();go_straight();turn_right();OnFwd(OUT_AC);Wai...
Wait(STOP_TIME);//移動
draw_1st_line();//左の輪郭を描く
}
~プログラムは以上です。
~ちなみに完成した絵がこちら↓
~&ref(20120523_225321.jpg);
~・・・。まあ、一応顔には見えますよね!?でも、直線が曲がっ...
***工夫した点、頑張った点 [#rca7d767]
まず何より考えたのが絵の描き方。紙の上に載って書こうとす...
**まとめ [#y8b72831]
今回の課題、とにかく疲れた・・・。似顔絵を描くだけなのに...
終了行:
*似顔絵ロボットの製作 [#u85f0c57]
''目次''
#contents
**はじめに [#v8af37e3]
今回ロボット製作、プログラミングの練習として出された1つ目...
~''ルール''
-紙はA4の白紙を使うこと
-キットに入っている部品(レゴ)と自分たちで用意したペン以...
-似顔絵を描くとき人が紙をおさえてはならない
-絵を描くとき、絨毯の上でやるか机の上でやるか選ぶことがで...
~こんなところです。これがかなり厳しいルールでロボット作り...
では、そろそろロボットの方を紹介していきましょう!
**製作したロボット、プログラム [#r92596fb]
***ロボットの構造 [#ubdef5c2]
何回かロボットの改良もしたので改良前のものも少し紹介した...
~&ref(20120513_006.jpg,left);''&size(40){⇒};''&ref(201205...
~左が改良前、右が改良後。直進するときや旋回するときに、動...
~&ref(20120522_174116.jpg,left);
~また、紙の上にロボットが乗るのではなく、ペンの部分を長く...
タイヤの部分についても少し改良を加えました。最初はモータ...
~&ref(20120520_213204.jpg);
~ペンの部分に関しては下の写真のような構造をしています。
~&ref(20120518_191317.jpg);
~モータの回転によって軸も回転しそれによってペンのついてい...
***プログラム [#a62bccd4]
&ref(似顔絵1.jpg);
~上のような似顔絵を描くプログラムです。ちなみに、
-(1)⇒右輪郭、左輪郭
-(2)⇒両目、鼻
-(3)⇒右眉毛
-(4)⇒口
-(5)⇒左眉毛のように対応しています。
#define STOP_TIME 100//作業のあと停止する時間を定義
#define line_time01 140//(1)の線を描く時間を定義
#define line_time02 30//(2)の線を描く時間を定義
#define line_time03 20//(3)の線を描く時間を定義
#define RIGHT_TURN_TIME 97//右に旋回する時間を定義
#define LEFT_TURN_TIME 90//左に旋回する時間を定義
#define line_time04 10//(4)の線を描く時間を定義
sub turn_right()
{
OnFwd(OUT_C);OnRev(OUT_A);Wait(RIGHT_TURN_TIME);
Off(OUT_AC);Wait(STOP_TIME);
}//右に90度旋回するためのサブルーチン
sub turn_left()
{
OnFwd(OUT_A);OnRev(OUT_C);Wait(LEFT_TURN_TIME);
Off(OUT_AC);Wait(STOP_TIME);
}//左に90度旋回するためのサブルーチン
sub draw_1st_line()
{
OnFwd(OUT_B);OnRev(OUT_AC);Wait(line_time01);
Off(OUT_ABC);Wait(STOP_TIME);OnFwd(OUT_AC);
Wait(100);Off(OUT_AC);Wait(STOP_TIME);
}//(1)の線を描くためのサブルーチン
sub draw_2nd_line()
{
OnFwd(OUT_B);OnRev(OUT_AC);Wait(line_time02);
Off(OUT_ABC);Wait(STOP_TIME);
}//(2)の線を描くためのサブルーチン
sub draw_3rd_line()
{
OnFwd(OUT_AB);Wait(line_time03);Off(OUT_AB);OnRev(OUT_A);
Wait(line_time03);Off(OUT_A);Wait(STOP_TIME);
}//(3)の線を描くためのサブルーチン
sub draw_4th_line()
{
OnFwd(OUT_A);OnRev(OUT_C);Wait(line_time04);Off(OUT_AC);
Wait(STOP_TIME);OnFwd(OUT_B); Wait(STOP_TIME);OnFwd(OUT_...
Wait(line_time04*2);Off(OUT_ABC);Wait(STOP_TIME);
OnFwd(OUT_A);OnRev(OUT_C);Wait(line_time04);Off(OUT_AC);
Wait(STOP_TIME);
}//(4)の線を描くためのサブルーチン
sub draw_5th_line()
{
OnFwd(OUT_BC);Wait(line_time03);Off(OUT_BC);OnRev(OUT_C);
Wait(line_time03);Off(OUT_C);Wait(STOP_TIME);
}//(5)の線を描くためのサブルーチン
sub go_straight()
{
OnFwd(OUT_AC);Wait(45);Off(OUT_AC);Wait(STOP_TIME);
}//直進して紙のまわりを移動するためのサブルーチン
task main()
{
draw_1st_line();turn_left();//右の輪郭を描く
go_straight();turn_right();//i移動
draw_3rd_line();//右の眉毛を描く
OnRev(OUT_AC);Wait(20);Off(OUT_AC);Wait(STOP_TIME);
draw_2nd_line();//右目を描く
OnFwd(OUT_AC);Wait(20);Off(OUT_AC);Wait(STOP_TIME);
turn_left();go_straight();turn_right();//移動
OnRev(OUT_AC);Wait(30);Off(OUT_AC);Wait(STOP_TIME);
draw_2nd_line();//鼻を描く
OnRev(OUT_AC);Wait(40);Off(OUT_AC);Wait(STOP_TIME);
draw_4th_line();//口を描く
OnFwd(OUT_AC);Wait(100);Off(OUT_AC);Wait(STOP_TIME);
turn_left();go_straight();turn_right();//移動
draw_5th_line();//左眉を描く
OnRev(OUT_AC);Wait(13);Off(OUT_AC);Wait(STOP_TIME);
draw_2nd_line();//左目を描く
OnFwd(OUT_AC);Wait(22);Off(OUT_AC);Wait(STOP_TIME);
turn_left();go_straight();turn_right();OnFwd(OUT_AC);Wai...
Wait(STOP_TIME);//移動
draw_1st_line();//左の輪郭を描く
}
~プログラムは以上です。
~ちなみに完成した絵がこちら↓
~&ref(20120523_225321.jpg);
~・・・。まあ、一応顔には見えますよね!?でも、直線が曲がっ...
***工夫した点、頑張った点 [#rca7d767]
まず何より考えたのが絵の描き方。紙の上に載って書こうとす...
**まとめ [#y8b72831]
今回の課題、とにかく疲れた・・・。似顔絵を描くだけなのに...
ページ名: