2016b/Member/ats/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
目次
#contents
*1、概要 [#k5f70c83]
今回、私が担当したのはコースBである。下の写真はロボットの...
#ref(2016b/Member/ats/Mission2/view.jpg,50%,全体像)
*2、ロボットについて [#v222303c]
**⑴台車と光センサー [#o25c6efa]
今回の課題のコースは、急なカーブがあったりたくさんの交...
&ref(2016b/Member/ats/Mission2/daisha.jpg,100%,台車(前方...
**ボールを保持する機構 [#hb549acb]
今回私のペアは、リング状の部品(バー)を作成し、そこにボ...
#ref(2016b/Member/ats/Mission2/ring.jpg,70%,機構の全体像)
バーは台車の乗せたモーターを動力として上下に動く。ボー...
#ref(2016b/Member/ats/Mission2/suka-to.jpg,50%,スカート)
また、上の写真を見てもわかるように台車に直接設置してあ...
**制御措置(電池ボックス) [#sd618e84]
台車は、正確な動作を実現するために少ない部品で構成して...
*3、プログラム(マクロ、サブルーチン)について [#if0e6e82]
プログラムはB→P、P→Q、Q→ボールキャッチ、ボールキャッチ→...
//とても明るい(白)
#define KYOKAI_1 50 //境界
//明るい(白黒境界よりやや白側)
#define KYOKAI_2 46 //境界
//普通(白黒境界)
#define KYOKAI_3 42 //境界
//暗い(白黒境界よりやや黒側)
#define KYOKAI_4 38 //境界
//とても暗い(黒)
#define TURN_L OnRev(OUT_A);OnFwd(OUT_C); //左回転
#define L OnFwd(OUT_C);Off(OUT_A); //左折
#define R OnFwd(OUT_A);Off(OUT_C); //右折
#define TURN_R OnRev(OUT_C);OnFwd(OUT_A); //右回転
#define CROSS_TIME 32 //交差点と判断する基準となる回転時間
#define CHECK_TIME 25 //十字路かT字路かを判断するために...
#define WAIT Off(OUT_ABC);Wait(20); //動作安定のために一...
#define BER_UP PlayTone(500,30);OnFwd(OUT_B);Wait(30);Of...
#define BER_DOWN PlayTone(500,30);OnRev(OUT_B);Wait(30);...
#define START_SOUND Wait(100);PlaySound(SOUND_UP);Wait(1...
#define CROSS_SOUND PlaySound(SOUND_DOUBLE_BEEP);Wait(15...
#define CROSS_FORWARD_SOUND PlayTone(440,100);Wait(150);...
#define CROSS_T_SOUND PlaySound(SOUND_LOW_BEEP);Wait(150...
#define GOAL_SOUND Wait(100);repeat(3){PlayTone(600,50);...
#define END_SOUND Wait(100);PlaySound(SOUND_DOWN);Wait(1...
以下では4つのサブルーチンを紹介する。サブルーチン内で使...
**P1(B→P用) [#d1180365]
sub P1()
{
ClearTimer(1); //タイマー1をリセット
while(FastTimer(1) < CROSS_TIME) //ラインの左側を走行...
{
if(SENSOR_2 > KYOKAI_1)
{
TURN_R;
ClearTimer(1);
}
else if(SENSOR_2 > KYOKAI_2)
{
R;
ClearTimer(1);
}
else if(SENSOR_2 > KYOKAI_3)
{
OnFwd(OUT_AC);
ClearTimer(1);
}
else if(SENSOR_2 > KYOKAI_4)
{
L;
ClearTimer(1);
}
else
{
TURN_L;
}
}
Off(OUT_AC);
CROSS_SOUND; //停止して交差点と判断した音を鳴らす
TURN_R;
Wait(70);
OnFwd(OUT_AC);
Wait(30);
Off(OUT_AC); //次のサブルーチンの始点に移動
}
このプログラムは、途中Rを直進するという難所がある。し...
**P2(Q→ボールをキャッチ用) [#yc9b6143]
sub P2()
{
TURN_L;
Wait(20);
WAIT; //次の走行の時に、間違えて交差点と判断しないよう...
ClearTimer(0); //タイマー0をリセット
while(FastTimer(0) < 300) //3秒間、線の左側を走行
{
if(SENSOR_2 > KYOKAI_1)
{
TURN_R;
}
else if(SENSOR_2 > KYOKAI_2)
{
R;
}
else if(SENSOR_2 > KYOKAI_3)
{
OnFwd(OUT_AC);
}
else if(SENSOR_2 > KYOKAI_4)
{
L;
}
else
{
TURN_L;
}
}
BER_DOWN; //ボールをキャッチする
WAIT;
}
このプログラムはサブルーチン「P3」の次に実行されるため...
**P3(P→Q、ボールをキャッチ→C用) [#i71ff35a]
sub P3()
{
ClearTimer(1);
while(FastTimer(1) < CROSS_TIME) //ラインの左側を走行...
{
if(SENSOR_2 > KYOKAI_1)
{
TURN_R;
ClearTimer(1);
}
else if(SENSOR_2 > KYOKAI_2)
{
R;
ClearTimer(1);
}
else if(SENSOR_2 > KYOKAI_3)
{
OnFwd(OUT_AC);
ClearTimer(1);
}
else if(SENSOR_2 > KYOKAI_4)
{
L;
ClearTimer(1);
}
else
{
TURN_L;
}
}
Off(OUT_AC);
CROSS_SOUND; //交差点と判断し、停止して音を鳴らす
TURN_R;
Wait(CROSS_TIME);
WAIT; //交差点に進入した時の位置に戻る
OnFwd(OUT_AC);
Wait(CHECK_TIME);
Off(OUT_AC); //十字路かT字路かを判断
if(SENSOR_2 < KYOKAI_1) //十字路だった場合は音を鳴らし...
{
CROSS_FORWARD_SOUND;
ClearTimer(1); //
}
else //T字路だった場合は音を鳴らした後、0.5秒間右回転...
{
CROSS_T_SOUND;
TURN_R;
Wait(50);
WAIT;
ClearTimer(1);
}
}
このプログラムは、十字路なら直進、T字路なら右に曲がると...
**END(C→シュート用) [#wc1a33fb]
sub END()
{
TURN_L;
Wait(50);
Off(OUT_AC);
WAIT; //サブルーチン「P3」終了後、ロボットをゴールの方...
OnRev(OUT_AC);
Wait(100);
WAIT; //ボールに勢いをつけるために下がる
GOAL_SOUND; //シュートまでのカウントダウン
OnFwd(OUT_AC);
BER_UP; //前進を開始するのと同時にバーを上げる
Wait(180);
Off(OUT_AC); //シュート
}
このプログラムはサブルーチン「P3」のあとに実行されるた...
*4、プログラム(task main())について [#f5c45685]
task main()
{
SetSensor(SENSOR_2,SENSOR_LIGHT); //光センサーを定義
int x = 0; //変数xを定義
BER_UP; //バーを持ち上げる
START_SOUND; //スタート音を鳴らす
P1(); //B→P
P3(); //P→Q
P2(); //Q→ボールキャッチ
while(x < 5) //ボールキャッチ→C(交差点を4回通過、5回...
{
P3();
x++; //xを1増加させる
}
END(); //C→シュート
END_SOUND; //終了音を鳴らす
}
上記のように、ロボットが走行を始める前にバーを上げるプ...
*5、まとめ [#afa64e5c]
今回の課題は、前回の反省を活かし、マクロやサブルーチン...
終了行:
目次
#contents
*1、概要 [#k5f70c83]
今回、私が担当したのはコースBである。下の写真はロボットの...
#ref(2016b/Member/ats/Mission2/view.jpg,50%,全体像)
*2、ロボットについて [#v222303c]
**⑴台車と光センサー [#o25c6efa]
今回の課題のコースは、急なカーブがあったりたくさんの交...
&ref(2016b/Member/ats/Mission2/daisha.jpg,100%,台車(前方...
**ボールを保持する機構 [#hb549acb]
今回私のペアは、リング状の部品(バー)を作成し、そこにボ...
#ref(2016b/Member/ats/Mission2/ring.jpg,70%,機構の全体像)
バーは台車の乗せたモーターを動力として上下に動く。ボー...
#ref(2016b/Member/ats/Mission2/suka-to.jpg,50%,スカート)
また、上の写真を見てもわかるように台車に直接設置してあ...
**制御措置(電池ボックス) [#sd618e84]
台車は、正確な動作を実現するために少ない部品で構成して...
*3、プログラム(マクロ、サブルーチン)について [#if0e6e82]
プログラムはB→P、P→Q、Q→ボールキャッチ、ボールキャッチ→...
//とても明るい(白)
#define KYOKAI_1 50 //境界
//明るい(白黒境界よりやや白側)
#define KYOKAI_2 46 //境界
//普通(白黒境界)
#define KYOKAI_3 42 //境界
//暗い(白黒境界よりやや黒側)
#define KYOKAI_4 38 //境界
//とても暗い(黒)
#define TURN_L OnRev(OUT_A);OnFwd(OUT_C); //左回転
#define L OnFwd(OUT_C);Off(OUT_A); //左折
#define R OnFwd(OUT_A);Off(OUT_C); //右折
#define TURN_R OnRev(OUT_C);OnFwd(OUT_A); //右回転
#define CROSS_TIME 32 //交差点と判断する基準となる回転時間
#define CHECK_TIME 25 //十字路かT字路かを判断するために...
#define WAIT Off(OUT_ABC);Wait(20); //動作安定のために一...
#define BER_UP PlayTone(500,30);OnFwd(OUT_B);Wait(30);Of...
#define BER_DOWN PlayTone(500,30);OnRev(OUT_B);Wait(30);...
#define START_SOUND Wait(100);PlaySound(SOUND_UP);Wait(1...
#define CROSS_SOUND PlaySound(SOUND_DOUBLE_BEEP);Wait(15...
#define CROSS_FORWARD_SOUND PlayTone(440,100);Wait(150);...
#define CROSS_T_SOUND PlaySound(SOUND_LOW_BEEP);Wait(150...
#define GOAL_SOUND Wait(100);repeat(3){PlayTone(600,50);...
#define END_SOUND Wait(100);PlaySound(SOUND_DOWN);Wait(1...
以下では4つのサブルーチンを紹介する。サブルーチン内で使...
**P1(B→P用) [#d1180365]
sub P1()
{
ClearTimer(1); //タイマー1をリセット
while(FastTimer(1) < CROSS_TIME) //ラインの左側を走行...
{
if(SENSOR_2 > KYOKAI_1)
{
TURN_R;
ClearTimer(1);
}
else if(SENSOR_2 > KYOKAI_2)
{
R;
ClearTimer(1);
}
else if(SENSOR_2 > KYOKAI_3)
{
OnFwd(OUT_AC);
ClearTimer(1);
}
else if(SENSOR_2 > KYOKAI_4)
{
L;
ClearTimer(1);
}
else
{
TURN_L;
}
}
Off(OUT_AC);
CROSS_SOUND; //停止して交差点と判断した音を鳴らす
TURN_R;
Wait(70);
OnFwd(OUT_AC);
Wait(30);
Off(OUT_AC); //次のサブルーチンの始点に移動
}
このプログラムは、途中Rを直進するという難所がある。し...
**P2(Q→ボールをキャッチ用) [#yc9b6143]
sub P2()
{
TURN_L;
Wait(20);
WAIT; //次の走行の時に、間違えて交差点と判断しないよう...
ClearTimer(0); //タイマー0をリセット
while(FastTimer(0) < 300) //3秒間、線の左側を走行
{
if(SENSOR_2 > KYOKAI_1)
{
TURN_R;
}
else if(SENSOR_2 > KYOKAI_2)
{
R;
}
else if(SENSOR_2 > KYOKAI_3)
{
OnFwd(OUT_AC);
}
else if(SENSOR_2 > KYOKAI_4)
{
L;
}
else
{
TURN_L;
}
}
BER_DOWN; //ボールをキャッチする
WAIT;
}
このプログラムはサブルーチン「P3」の次に実行されるため...
**P3(P→Q、ボールをキャッチ→C用) [#i71ff35a]
sub P3()
{
ClearTimer(1);
while(FastTimer(1) < CROSS_TIME) //ラインの左側を走行...
{
if(SENSOR_2 > KYOKAI_1)
{
TURN_R;
ClearTimer(1);
}
else if(SENSOR_2 > KYOKAI_2)
{
R;
ClearTimer(1);
}
else if(SENSOR_2 > KYOKAI_3)
{
OnFwd(OUT_AC);
ClearTimer(1);
}
else if(SENSOR_2 > KYOKAI_4)
{
L;
ClearTimer(1);
}
else
{
TURN_L;
}
}
Off(OUT_AC);
CROSS_SOUND; //交差点と判断し、停止して音を鳴らす
TURN_R;
Wait(CROSS_TIME);
WAIT; //交差点に進入した時の位置に戻る
OnFwd(OUT_AC);
Wait(CHECK_TIME);
Off(OUT_AC); //十字路かT字路かを判断
if(SENSOR_2 < KYOKAI_1) //十字路だった場合は音を鳴らし...
{
CROSS_FORWARD_SOUND;
ClearTimer(1); //
}
else //T字路だった場合は音を鳴らした後、0.5秒間右回転...
{
CROSS_T_SOUND;
TURN_R;
Wait(50);
WAIT;
ClearTimer(1);
}
}
このプログラムは、十字路なら直進、T字路なら右に曲がると...
**END(C→シュート用) [#wc1a33fb]
sub END()
{
TURN_L;
Wait(50);
Off(OUT_AC);
WAIT; //サブルーチン「P3」終了後、ロボットをゴールの方...
OnRev(OUT_AC);
Wait(100);
WAIT; //ボールに勢いをつけるために下がる
GOAL_SOUND; //シュートまでのカウントダウン
OnFwd(OUT_AC);
BER_UP; //前進を開始するのと同時にバーを上げる
Wait(180);
Off(OUT_AC); //シュート
}
このプログラムはサブルーチン「P3」のあとに実行されるた...
*4、プログラム(task main())について [#f5c45685]
task main()
{
SetSensor(SENSOR_2,SENSOR_LIGHT); //光センサーを定義
int x = 0; //変数xを定義
BER_UP; //バーを持ち上げる
START_SOUND; //スタート音を鳴らす
P1(); //B→P
P3(); //P→Q
P2(); //Q→ボールキャッチ
while(x < 5) //ボールキャッチ→C(交差点を4回通過、5回...
{
P3();
x++; //xを1増加させる
}
END(); //C→シュート
END_SOUND; //終了音を鳴らす
}
上記のように、ロボットが走行を始める前にバーを上げるプ...
*5、まとめ [#afa64e5c]
今回の課題は、前回の反省を活かし、マクロやサブルーチン...
ページ名: