2017b/Member/Alex/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2017b/Member/Alex/Mission2]]
#contents
*概要 [#sb67315a]
今回の課題は黒い線の経路にそって動くロボットを作成します。
**コース [#bcc3e6be]
#ref(2017b/Member/Alex/Mission2/333.jpg,100%)
Dをスタート
Cを直進
Bを左折
Pを左折(一時停止)
Qを直進
Rを左折
Fを左折
Sを直進(一時停止)
Y地点の紙コップを取得してコースに戻る
Sを直進(一時停止)
Qを左折(一時停止)
Rを直進
X地点に紙コップを置いてコースに戻る
Pを左折
B を左折(一時停止)
A地点へ(ゴール)
*ロボット [#g4850692]
#ref(2017b/Member/Alex/Mission2/3.jpg,70%)
コップが光センサーの邪魔にならないように、間にものを置きました。
#ref(2017b/Member/Alex/Mission2/2.jpg,70%)
右側にモーターをつけて、手の上げ下げを起動します。
#ref(2017b/Member/Alex/Mission2/3.png,30%)
左側は対応して、コープをつかむ手が形成されました。
#ref(2017b/Member/Alex/Mission2/9999.JPG,10%)
#ref(2017b/Member/Alex/Mission2/777.png,40%)
このような形の手でコップをつかみます。
**ライントレースする仕組み [#w3b0d660]
#ref(2017b/Member/Alex/Mission2/667.png,70%)
`それぞれの場所の光強さを示す
*プログラミング概要 [#ed200de2]
**定義 [#s3e1a511]
#define t_l1 OnFwd(OUT_A,45); OnRev(OUT_C,10); //急左折
#define t_l2 OnFwd(OUT_A,55); OnFwd(OUT_C,10); //左折
#define t_l3 OnFwd(OUT_A,35); OnRev(OUT_C,30); //回転左折
#define go_forward OnFwd(OUT_AC,40); //前進
#define r_b OnRev(OUT_AC,40); //後退
#define t_r1 OnRev(OUT_A,10); OnFwd(OUT_C,45); //急右折
#define t_r2 OnFwd(OUT_A,10); OnFwd(OUT_C,55); //右折
#define t_r3 OnRev(OUT_A,30); OnFwd(OUT_C,35); //回転右折
#define DO 523
#define STEP 1
#define t_off OnFwd(OUT_B,50); Wait(300); Off(OUT_B); //手落とし
#define t_on OnRev(OUT_B,50); Wait(300); Off(OUT_B); //手挙げる
**サブルーチン [#w607bf28]
sub DM()
{
int BT=0; //BTは続けて暗いときになった回数
while(BT < 140){ //回数が140以下の時ライントレースを繰り返す
if (SENSOR_2 < 38) { //光強さが38以下の時に急左折する
t_l1;
BT++; //回数増加する
}else{
if (SENSOR_2 < 47) { //光強さが38〜47の間の時に左折する
t_l2;
} else if (SENSOR_2 < 55) { //光強さが47〜55の間の時に前進する
go_forward;
} else if (SENSOR_2 < 60) { //光強さが55〜60の間の時に右折する
t_r2;
} else { //光強さが60以上の時に急右折する
t_r1;
}
BT=0; //回数を初期化する
}
Wait(STEP);
}
Off(OUT_AC);
PlayTone(DO,100); Wait(100); //交差点で鳴らす
Wait(1000);
BT = 0;
}
sub CM()
{
int BP=0; //BPは続けて暗いときになった回数
while(BP < 140){ //回数が140以下の時ライントレースを繰り返す
if (SENSOR_2 < 48) { //光強さが48以下の時に急左折する
t_l1;
BP++; //回数増加する
} else{
if (SENSOR_2 < 55) { //光強さが48〜55の間の時に前進する
go_forward;
} else if (SENSOR_2 < 60) { //光強さが55〜60の間の時に回転右折する
t_r3;
} else { //光強さが60以上の時に急右折する
t_r1;
}
BP=0; //回数を初期化する
}
Wait(STEP);
}
Off(OUT_AC);
PlayTone(DO,100); Wait(100); //交差点で鳴らす
Wait(1000);
BP = 0;
}
CMはDMより交差点を反応しやすいです。
左側に沿って動いてます。
**task main [#t592df51]
task main()
{
SetSensorLight(S2);
DM();
t_r2; //Cでちょっと右折する
Wait(200);
DM();
OnFwd(OUT_A,55); //Bで90度左折する
Wait(1900);
DM();
t_l2; //Pで左折する
Wait(1200);
CM();
t_r2; //Qで右折する
Wait(300);
CM();
t_l2; //Rで左折する
Wait(300);
DM();
OnFwd(OUT_A,55); //Eで90度左折する
Wait(1900);
DM();
OnFwd(OUT_A,55);
Wait(3800);
CM();
OnFwd(OUT_A,50); //Fで90度左折する
Wait(1800);
Wait(STEP);
OnFwd(OUT_C,35);OnFwd(OUT_A,5); //Fのところで紙コップを探す
Wait(200);
Wait(STEP);
t_on; //手を下げる
Wait(STEP);
OnFwd(OUT_C,50);OnRev(OUT_A,15); //軌道へ戻る
Wait(1500);
DM();
t_r1; //Sのところでちょっと右折する
Wait(300);
DM();
go_forward; //Qのところで反応して前にちょっと進む
Wait(300);
t_off; //手を上げる
r_b; //後退して元の場所へ戻る
Wait(1100);
t_l2; //Qのところで左折する
Wait(1100);
DM();
t_r2; //Rのところで右折する
Wait(300);
CM();
t_l1; //Pのところで左折する
Wait(800);
DM();
OnFwd(OUT_A,50); //Bのところで90度左折する
Wait(1400);
DM();
t_r1; //Aの前の交差点で反応してちょっと右折する
Wait(200);
go_forward; //Aに入る
Wait(500);
}
*結果 [#c922b252]
テストの時はうまく行けたけど、最後の時、電池が消耗されて、思ったより変わったので、成功できませんでした。
*反省 [#k0a18516]
電池の消耗をもっと注意すべきです。
終了行:
[[2017b/Member/Alex/Mission2]]
#contents
*概要 [#sb67315a]
今回の課題は黒い線の経路にそって動くロボットを作成します。
**コース [#bcc3e6be]
#ref(2017b/Member/Alex/Mission2/333.jpg,100%)
Dをスタート
Cを直進
Bを左折
Pを左折(一時停止)
Qを直進
Rを左折
Fを左折
Sを直進(一時停止)
Y地点の紙コップを取得してコースに戻る
Sを直進(一時停止)
Qを左折(一時停止)
Rを直進
X地点に紙コップを置いてコースに戻る
Pを左折
B を左折(一時停止)
A地点へ(ゴール)
*ロボット [#g4850692]
#ref(2017b/Member/Alex/Mission2/3.jpg,70%)
コップが光センサーの邪魔にならないように、間にものを置きました。
#ref(2017b/Member/Alex/Mission2/2.jpg,70%)
右側にモーターをつけて、手の上げ下げを起動します。
#ref(2017b/Member/Alex/Mission2/3.png,30%)
左側は対応して、コープをつかむ手が形成されました。
#ref(2017b/Member/Alex/Mission2/9999.JPG,10%)
#ref(2017b/Member/Alex/Mission2/777.png,40%)
このような形の手でコップをつかみます。
**ライントレースする仕組み [#w3b0d660]
#ref(2017b/Member/Alex/Mission2/667.png,70%)
`それぞれの場所の光強さを示す
*プログラミング概要 [#ed200de2]
**定義 [#s3e1a511]
#define t_l1 OnFwd(OUT_A,45); OnRev(OUT_C,10); //急左折
#define t_l2 OnFwd(OUT_A,55); OnFwd(OUT_C,10); //左折
#define t_l3 OnFwd(OUT_A,35); OnRev(OUT_C,30); //回転左折
#define go_forward OnFwd(OUT_AC,40); //前進
#define r_b OnRev(OUT_AC,40); //後退
#define t_r1 OnRev(OUT_A,10); OnFwd(OUT_C,45); //急右折
#define t_r2 OnFwd(OUT_A,10); OnFwd(OUT_C,55); //右折
#define t_r3 OnRev(OUT_A,30); OnFwd(OUT_C,35); //回転右折
#define DO 523
#define STEP 1
#define t_off OnFwd(OUT_B,50); Wait(300); Off(OUT_B); //手落とし
#define t_on OnRev(OUT_B,50); Wait(300); Off(OUT_B); //手挙げる
**サブルーチン [#w607bf28]
sub DM()
{
int BT=0; //BTは続けて暗いときになった回数
while(BT < 140){ //回数が140以下の時ライントレースを繰り返す
if (SENSOR_2 < 38) { //光強さが38以下の時に急左折する
t_l1;
BT++; //回数増加する
}else{
if (SENSOR_2 < 47) { //光強さが38〜47の間の時に左折する
t_l2;
} else if (SENSOR_2 < 55) { //光強さが47〜55の間の時に前進する
go_forward;
} else if (SENSOR_2 < 60) { //光強さが55〜60の間の時に右折する
t_r2;
} else { //光強さが60以上の時に急右折する
t_r1;
}
BT=0; //回数を初期化する
}
Wait(STEP);
}
Off(OUT_AC);
PlayTone(DO,100); Wait(100); //交差点で鳴らす
Wait(1000);
BT = 0;
}
sub CM()
{
int BP=0; //BPは続けて暗いときになった回数
while(BP < 140){ //回数が140以下の時ライントレースを繰り返す
if (SENSOR_2 < 48) { //光強さが48以下の時に急左折する
t_l1;
BP++; //回数増加する
} else{
if (SENSOR_2 < 55) { //光強さが48〜55の間の時に前進する
go_forward;
} else if (SENSOR_2 < 60) { //光強さが55〜60の間の時に回転右折する
t_r3;
} else { //光強さが60以上の時に急右折する
t_r1;
}
BP=0; //回数を初期化する
}
Wait(STEP);
}
Off(OUT_AC);
PlayTone(DO,100); Wait(100); //交差点で鳴らす
Wait(1000);
BP = 0;
}
CMはDMより交差点を反応しやすいです。
左側に沿って動いてます。
**task main [#t592df51]
task main()
{
SetSensorLight(S2);
DM();
t_r2; //Cでちょっと右折する
Wait(200);
DM();
OnFwd(OUT_A,55); //Bで90度左折する
Wait(1900);
DM();
t_l2; //Pで左折する
Wait(1200);
CM();
t_r2; //Qで右折する
Wait(300);
CM();
t_l2; //Rで左折する
Wait(300);
DM();
OnFwd(OUT_A,55); //Eで90度左折する
Wait(1900);
DM();
OnFwd(OUT_A,55);
Wait(3800);
CM();
OnFwd(OUT_A,50); //Fで90度左折する
Wait(1800);
Wait(STEP);
OnFwd(OUT_C,35);OnFwd(OUT_A,5); //Fのところで紙コップを探す
Wait(200);
Wait(STEP);
t_on; //手を下げる
Wait(STEP);
OnFwd(OUT_C,50);OnRev(OUT_A,15); //軌道へ戻る
Wait(1500);
DM();
t_r1; //Sのところでちょっと右折する
Wait(300);
DM();
go_forward; //Qのところで反応して前にちょっと進む
Wait(300);
t_off; //手を上げる
r_b; //後退して元の場所へ戻る
Wait(1100);
t_l2; //Qのところで左折する
Wait(1100);
DM();
t_r2; //Rのところで右折する
Wait(300);
CM();
t_l1; //Pのところで左折する
Wait(800);
DM();
OnFwd(OUT_A,50); //Bのところで90度左折する
Wait(1400);
DM();
t_r1; //Aの前の交差点で反応してちょっと右折する
Wait(200);
go_forward; //Aに入る
Wait(500);
}
*結果 [#c922b252]
テストの時はうまく行けたけど、最後の時、電池が消耗されて、思ったより変わったので、成功できませんでした。
*反省 [#k0a18516]
電池の消耗をもっと注意すべきです。
ページ名: