- 追加された行はこの色です。
- 削除された行はこの色です。
[[2007b/A1]]
* 目次 [#yadc5925]
#contents
* ロボットの説明 [#f84c3395]
私たちのロボットは後輪駆動で、ペンの上げ下げはモーターの回転に直接つなげた棒にくっつけたペンが上がったり下がったりすることで行われます。
&ref(IMG_0184)
モーターが右側についている為、バランスをとる為に反対側にただの飾りにしかならないタイヤがついています。
* 「市」を書くプログラム [#o5846baa]
#define MOVE_TIME 270 // MOVE_TIMEという定数を定義(値は270)
#define MOVE_TIME 270
task main()
{
OnFwd(OUT_A+OUT_B+OUT_C); // chokushin
Wait(40); //
OnRev(OUT_B); //pen hanasu
OnFwd(OUT_A+OUT_C); //chokushin
Wait(55); //
OnRev(OUT_C); //90kaiten
Wait(MOVE_TIME); //
OnRev(OUT_A+OUT_C); //koutai
Wait(20); //
OnFwd(OUT_B); //pen tsukeru
OnRev(OUT_A+OUT_C); //chokushin
Wait(160); //
OnRev(OUT_B); //pen hanasu
OnFwd(OUT_A+OUT_C); //chokushin
Wait(120+55); //
OnRev(OUT_A); //90kaiten
Wait(MOVE_TIME); //
OnRev(OUT_C); //koutai
Wait(60); //
OnFwd(OUT_A+OUT_B+OUT_C); // chokushin pem tsukeru
Wait(80); //
OnRev(OUT_A+OUT_B+OUT_C); //koutai pen hanasu
Wait(55); //
OnFwd(OUT_A); //90kaiten
Wait(MOVE_TIME); //
OnRev(OUT_A); //koutai
Wait(100); //
OnFwd(OUT_B); //pen tsukeru
OnRev(OUT_A+OUT_C); //koutai
Wait(80); //
OnRev(OUT_B); //pen hanasu
OnRev(OUT_A+OUT_C); //koutai
Wait(55); //
OnFwd(OUT_A); //90kaiten
Wait(MOVE_TIME); //
OnRev(OUT_A); //koutai
Wait(100); //
OnRev(OUT_A+OUT_C); //koutai
OnFwd(OUT_B); //pem tsukeru
Wait(80); //
OnRev(OUT_B); //pen hanasu
OnRev(OUT_A+OUT_C); //koutai
Wait(55); //
OnFwd(OUT_A); //90kaiten
Wait(MOVE_TIME); //
OnRev(OUT_A); //koutai
Wait(100); //
OnRev(OUT_A+OUT_C); //koutai
Wait(40+55); //
OnFwd(OUT_A); //90kaiten
Wait(MOVE_TIME); //
OnRev(OUT_A); //koutai
Wait(300); //
OnFwd(OUT_A+OUT_B+OUT_C); // chokushin pem tsukeru
Wait(260); //
Off(OUT_A+OUT_B+OUT_C); //shuuryo
1 OnFwd(OUT_A+OUT_B+OUT_C); //ペンをつけて前進 1〜3行目;一画目
2 Wait(40); //
3 OnRev(OUT_B); //ペンを離す
4 OnFwd(OUT_A+OUT_C); //前進 2〜9行目;二画目の位置まで移動
5 Wait(55); //
6 OnRev(OUT_C); //90°回転
7 Wait(MOVE_TIME); //
8 OnRev(OUT_A+OUT_C); //後退
9 Wait(20); //
10 OnFwd(OUT_B); //ペンをつける 10〜13行目;二画目
11 OnRev(OUT_A+OUT_C); //前進
12 Wait(160); //
13 OnRev(OUT_B); //ペンを離す
14 OnFwd(OUT_A+OUT_C); //前進 14〜19行目;三画目の位置まで移動
15 Wait(120+55); //
16 OnRev(OUT_A); //90°回転
17 Wait(MOVE_TIME); //
18 OnRev(OUT_C); //後退
19 Wait(60); //
20 OnFwd(OUT_A+OUT_B+OUT_C); //ペンをつけて前進 20〜22行目;三画目
21 Wait(80); //
22 OnRev(OUT_A+OUT_B23〜27
24 OnFwd(OUT_A); //90°回転
25 Wait(MOVE_TIME); //
26 OnRev(OUT_A); //後退
27 Wait(100); //
28 OnFwd(OUT_B); //ペンをつける 28〜31行目;四画目の前半(横棒)
29 OnRev(OUT_A+OUT_C); //後退
30 Wait(120); //
31 OnRev(OUT_B); //ペンを離す
32 OnRev(OUT_A+OUT_C); //後退
33 Wait(55); //
34 OnFwd(OUT_A); //90°回転
35 Wait(MOVE_TIME); //
36 OnRev(OUT_A); //後退
37 Wait(100); //
38 OnRev(OUT_A+OUT_C); //後退
39 OnFwd(OUT_B); //ペンをつける 39〜41行目;四画目の後半(縦棒)
40 Wait(80); //
41 OnRev(OUT_B); //ペンを離す
42 OnFwd(OUT_A+OUT_C); //前進
43 Wait(55); //
44 OnRev(OUT_C); //90°回転
45 Wait(MOVE_TIME); //
46 OnRev(OUT_A); //後退
47 Wait(50); //
48 OnRev(OUT_A+OUT_C); //後退
49 Wait( 55); //
50 OnFwd(OUT_A); //90°回転
51 Wait(MOVE_TIME); //
52 OnRev(OUT_A); //後退
53 Wait(300); //
54 OnFwd(OUT_A+OUT_B+OUT_C); // ペンをつけて前進 54〜56行目;五画目
55 Wait(240); //
56 Off(OUT_A+OUT_B+OUT_C); //ペンを離して停止
}
* 「本」を書くプログラム [#pf9bd47b]
#define MOVE_TIME 270 // MOVE_TIMEという定数を定義(値は270)
task main()
{
OnRev(OUT_B);
#define MOVE_TIME 260 // MOVE_TIMEという定数を定義(値は260)
task main()
{
OnRev(OUT_B); //ペンを上げる
Wait(10);
OnFwd(OUT_A+OUT_C);
OnFwd(OUT_A+OUT_C); //直進
Wait(30);
OnFwd(OUT_B);
OnFwd(OUT_B); //一画目
Wait(200);
OnRev(OUT_B);
OnRev(OUT_B); //ペンを上げる
Wait(30);
OnFwd(OUT_A+OUT_C);
OnRev(OUT_B);
OnFwd(OUT_A+OUT_C); //調整
Wait(55);
OnRev(OUT_A);
OnRev(OUT_A); //90度回転
OnFwd(OUT_C);
Wait(MOVE_TIME);
OnRev(OUT_A+OUT_C+ OUT_B);
Wait(MOVE_TIME);
OnRev(OUT_A+OUT_C+ OUT_B);//調整
Wait(100);
OnFwd(OUT_A+OUT_C);
OnFwd(OUT_A+OUT_C); //直進
Wait(120);
OnFwd(OUT_A+OUT_C);
OnRev(OUT_B);
OnFwd(OUT_A+OUT_C); //調整
Wait(55);
OnRev(OUT_A);
OnRev(OUT_A); //90度回転
OnFwd(OUT_C);
Wait(MOVE_TIME);
OnRev(OUT_A+OUT_C+ OUT_B);
Wait(MOVE_TIME);
OnRev(OUT_A+OUT_C+ OUT_B);//調整
Wait(100);
OnFwd(OUT_A+OUT_C);
OnFwd(OUT_A+OUT_C); //直進
Wait(160);
OnFwd(OUT_A+OUT_C);
OnRev(OUT_B);
OnFwd(OUT_A+OUT_C); //調整
Wait(55);
OnRev(OUT_A);
OnRev(OUT_A); //90度回転
OnFwd(OUT_C);
Wait(MOVE_TIME);
OnRev(OUT_A+OUT_C+ OUT_B);
Wait(MOVE_TIME);
OnRev(OUT_A+OUT_C+ OUT_B);//調整
Wait(100);
OnFwd(OUT_A+OUT_C);
OnFwd(OUT_A+OUT_C); //直進
Wait(60);
OnFwd(OUT_B);
OnFwd(OUT_B); //二画目
Wait(200);
OnRev(OUT_B);
OnRev(OUT_B); //ペンを上げる
Wait(60);
OnRev(OUT_A+OUT_C);
OnRev(OUT_A+OUT_C); //後退
Wait(140);
OnFwd(OUT_A+OUT_C);
OnRev(OUT_B);
OnFwd(OUT_A+OUT_C); //調整
Wait(55);
OnFwd(OUT_A);
OnFwd(OUT_A); //45度回転
OnRev(OUT_C);
Wait(MOVE_TIME/2);
OnRev(OUT_A+OUT_C+ OUT_B);
Wait(MOVE_TIME/2);
OnRev(OUT_A+OUT_C); //調整
Wait(100);
OnRev(OUT_A+OUT_C);
OnRev(OUT_A+OUT_C); //後退
Wait(30);
OnFwd(OUT_A+OUT_C);
OnFwd(OUT_A+OUT_C); //直進
Wait(30);
OnFwd(OUT_B);
OnFwd(OUT_B); //三画目
Wait(140);
OnRev(OUT_B);
OnRev(OUT_B); //ペンを上げる
Wait(60);
OnRev(OUT_A+OUT_C);
OnRev(OUT_A+OUT_C); //後退
Wait(200);
OnFwd(OUT_A+OUT_C);
OnRev(OUT_B);
OnFwd(OUT_A+OUT_C); //調整
Wait(55);
OnRev(OUT_A);
OnRev(OUT_A); //90度回転
OnFwd(OUT_C);
Wait(MOVE_TIME);
OnRev(OUT_A+OUT_C+ OUT_B);
OnRev(OUT_A+OUT_C); //調整
Wait(100);
OnRev(OUT_C+OUT_A);
OnRev(OUT_C+OUT_A); //後退
Wait(30);
OnFwd(OUT_A+OUT_C);
OnFwd(OUT_A+OUT_C); //直進
Wait(30);
OnFwd(OUT_B);
OnFwd(OUT_B); //四画目
Wait(140);
OnRev(OUT_B);
OnRev(OUT_B); //ペンを上げる
Wait(60);
OnRev(OUT_A+OUT_C);
OnRev(OUT_A+OUT_C); //後退
Wait(100);
OnFwd(OUT_A+OUT_C);
OnRev(OUT_B);
OnFwd(OUT_A+OUT_C); //調整
Wait(55);
OnRev(OUT_A);
OnRev(OUT_A); //45度回転
OnFwd(OUT_C);
Wait(MOVE_TIME/2);
OnRev(OUT_A+OUT_C+ OUT_B);
OnRev(OUT_A+OUT_C); //調整
Wait(100);
OnRev(OUT_C+OUT_A);
OnRev(OUT_C+OUT_A); //後退
Wait(100);
OnFwd(OUT_C+OUT_A+OUT_B);//五画目
Wait(40);
OnFwd(OUT_B);
Wait(40);
Off(OUT_A+OUT_C+ OUT_B);
}
Off(OUT_A+OUT_C+ OUT_B);//停止
}
* 苦労した点 [#ieeb2793]
-部品の制限
ロボットを作るにあたって、ペンを上げ下げする為の部品と、ロボット自体を動かす為の部品がなくてはいけないのですが、私たちのロボットはペンを上げ下げする部品にギアを使っている為に、車輪を回すのに丁度良い部品がなくなってしまいました。
-重心の偏り
このロボットは、ペンを上げ下げするためのモーターが右に偏っている為に、必要最低限の部品だけにした場合右に傾いてしまって、全身する時にだんだんと右にカーブしてしまいます。
-コードの不調
動作の確認中に、コードが使えなくなってしまい、長いコードを使わなければならなくなってしまい、その処理に苦労しました。
-ペンの位置と回転軸のずれ
ペンの位置がロボットの回転軸がずれているので、ロボットの中心で線をイメージして動かすとうまく文字にならないので、そこをうまくコントロールするのに苦労しました。
* 工夫した点 [#r44ba0c3]
-後輪駆動
このロボットはペンを上げ下げする為にギアを使っていて、四つの車輪を同じギアで動かすことはできません。なので、前輪を動かすことは諦めて、後輪のみを動かすことにしました。
-直角に曲がる
ペンを下ろしたままでカーブをした場合、ペンの位置を軸にして回転している訳ではないので、うまく直角に曲がる線は書けないので、したのプログラムを使って直角に曲がりました。
#define MOVE_TIME 270
task main()
{
OnFwd(OUT_A+OUT_C);
OnRev(OUT_B);
Wait(55);
OnRev(OUT_A);
OnFwd(OUT_C);
Wait(MOVE_TIME);
OnRev(OUT_A+OUT_C+ OUT_B);
Wait(100);
OnFwd(OUT_A+OUT_C);
Wait(100);
Off(OUT_A+OUT_C+ OUT_B);
Wait(10);
}
-骨組と肉付け
プログラムに何かミスがあった場合にわかりやすくする為に、まずはカーブでのずれなどは気にせずに作ったプログラミングを用意し、そのあとに上に書いたような直角に曲がるラインを書くためのプログラムを入れていくという方法でプログラムを作りました。
-プログラムソースが整形済みテキスト部からはみ出ているのを直しておきましょう。本のプログラムにコメントをつけましょう。また市のプログラムのほうも、「市」のどこの部分を書いているかわかるようにコメントをつけましょう。 -- [[まいける(TA)]] &new{2007-11-07 (水) 19:01:13};
#comment
[[2007b/A1]]