2016a/Member/eseda/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2016a/Member]]
*課題2 [#x5f4f5f5]
**目次 [#z20feb59]
#CONTENTS
**ロボットの説明 [#qd2bbdaf]
今回も説明書通りのシンプルな構造にしました。
#ref(本体.jpg)
**プログラムの説明 [#k2f36dac]
***定義について [#vfa65f43]
#define THRESHOLD 55 //閾値
#define SPEED_H 50 //早めのスピード
#define SPEED_H2 45 //やや早めのスピード
#define SPEED_L 25 //遅めのスピード
#define OnRL(speedR,speedL) OnFwd(OUT_A,speedR);OnFwd(OU...
#define go_forward OnRL(SPEED_H,SPEED_H); //前進
#define turn_left1 OnRL(SPEED_L,-SPEED_L); //左折1
#define turn_left0 OnRL(SPEED_L,0); //左折0
#define turn_left2 OnRL(SPEED_H2,0); //左折2
#define turn_right0 OnRL(0,SPEED_L); //右折0
#define turn_right1 OnRL(-SPEED_L,SPEED_L); //右折1
#define turn_right2 OnRL(0,SPEED_H2); //右折2
#define cross_right1 turn_right2;Wait(600);Off(OUT_AC); ...
#define cross_left turn_left2;Wait(500);Off(OUT_AC); ...
#define find_line turn_right1;until(SENSOR_1 < THRESHOLD...
#define cross_right2 turn_right2;Wait(250);Off(OUT_AC);...
}
***サブルーチンついて [#x5605670]
sub CROSS1() //C地点からS左折まで
{
SetSensorLight(S1);
int n ; //カウント数をnとおく
while(n < 1400) //nが1400までの間は...
{
★ if(SENSOR_1<THRESHOLD-15) //閾値-15より低いと...
{
turn_left1;
n++;
}
else if(SENSOR_1<THRESHOLD-7) //閾値-7より低いと...
{
turn_left0;
}
else if(SENSOR_1<THRESHOLD+7) //閾値+7より低いと...
{
go_forward;
}
else if(SENSOR_1<THRESHOLD+15) //閾値+15より低い...
{
turn_right0;
}
else //その他は右折1
{
turn_right1;
}
}
Float(OUT_AC); //慣性力で車体を...
★ PlaySound(SOUND_UP); //交差点で音を鳴らす
Wait(400); //停止
n=0; //カウントを0に戻す
}
以降、★〜★の間の行はどのサブルーチンでも同じなのでコメン...
sub CROSS2() //S左折か...
{
SetSensorLight(S1);
int j ; //カウン...
while(j < 4700) //カウン...
{
★ if(SENSOR_1<THRESHOLD-15)
{
turn_left1;
j++;
}
else if(SENSOR_1<THRESHOLD-7)
{
turn_left0;
}
else if(SENSOR_1<THRESHOLD+7)
{
go_forward;
}
else if(SENSOR_1<THRESHOLD+15)
{
turn_right0;
}
else
{
turn_right1;
}
}
Float(OUT_AC);
PlaySound(SOUND_UP);
★ Wait(400);
j=0; //カウント数をリ...
}
sub CROSS3() //P左折からQ直進
{
SetSensorLight(S1);
int k ; //カウント数をk...
while(k < 6950) //カウント数が69...
{
★ if(SENSOR_1<THRESHOLD-15)
{
turn_left1;
k++;
}
else if(SENSOR_1<THRESHOLD-7)
{
turn_left0;
}
else if(SENSOR_1<THRESHOLD+7)
{
go_forward;
}
else if(SENSOR_1<THRESHOLD+15)
{
turn_right0;
}
else
{
turn_right1;
}
}
Float(OUT_AC);
PlaySound(SOUND_UP);
★ Wait(2000);
cross_right2; //右旋回
find_line; //黒い...
k=0; //カウ...
}
sub CROSS4() /...
{
SetSensorLight(S1);
int n ; /...
while(n < 14100) /...
{
★ if(SENSOR_1<THRESHOLD-15)
{
turn_left1;
n++;
}
else if(SENSOR_1<THRESHOLD-7)
{
turn_left0;
}
else if(SENSOR_1<THRESHOLD+7)
{
go_forward;
}
else if(SENSOR_1<THRESHOLD+15)
{
turn_right0;
}
else
{
turn_right1;
}
}
Float(OUT_AC);
PlaySound(SOUND_UP);
★ Wait(400);
cross_right2; //右旋回
find_line; //黒い線を見...
n=0; //カウント数...
}
sub CROSS5() //Q直進からR...
{
SetSensorLight(S1);
int n ; //カウント数...
while(n < 4100) //カウント数...
{
★ if(SENSOR_1<THRESHOLD-15)
{
turn_left1;
n++;
}
else if(SENSOR_1<THRESHOLD-7)
{
turn_left0;
}
else if(SENSOR_1<THRESHOLD+7)
{
go_forward;
}
else if(SENSOR_1<THRESHOLD+15)
{
turn_right0;
}
else
{
turn_right1;
}
}
Float(OUT_AC);
PlaySound(SOUND_UP);
★ Wait(400);
cross_right1; //少しだけ右旋回
find_line; //黒い線まで右...
n=0; //カウント数を...
}
sub CROSS6() //R左折からP左折
{
SetSensorLight(S1);
int n ; //カウント数を...
while(n < 920) //カウント数が9...
{
★ if(SENSOR_1<THRESHOLD-15)
{
turn_left1;
n++;
}
else if(SENSOR_1<THRESHOLD-7)
{
turn_left0;
}
else if(SENSOR_1<THRESHOLD+7)
{
go_forward;
}
else if(SENSOR_1<THRESHOLD+15)
{
turn_right0;
}
else
{
turn_right1;
}
}
Float(OUT_AC);
PlaySound(SOUND_UP);
★ Wait(400);
n=0; //カウント数を0に戻す
}
sub CROSS7() //P左折からA地...
{
SetSensorLight(S1);
int n ; //カウント数を...
while(n < 10000) //カウント数が1...
{
★ if(SENSOR_1<THRESHOLD-15)
{
turn_left1;
n++;
}
else if(SENSOR_1<THRESHOLD-7)
{
turn_left0;
}
else if(SENSOR_1<THRESHOLD+7)
{
go_forward;
}
else if(SENSOR_1<THRESHOLD+15)
{
turn_right0;
}
else
{
turn_right1;
}
}
Float(OUT_AC);
PlaySound(SOUND_UP);
Wait(400);
go_forward;
★ Wait(700);
n=0; //カウント数を0に戻す
}
***カウント数について [#we46ba0f]
カウント数とは交差点から交差点の間で、黒い部分を通った回...
そのカウント数が一定数に達すると、次の動作に移るようにし...
***交差点の判断について [#za5bb84c]
交差点の判断はカウント数を利用して判断させました。それぞ...
定めたカウント数に達すると一時停止をし、直進や右左折をす...
***プログラム [#j59d3db7]
task main()
{
CROSS1();
Wait(1000);
CROSS2();
Wait(1000);
CROSS3();
Wait(1000);
CROSS4();
Wait(1000);
CROSS5();
Wait(1000);
CROSS6();
Wait(1000);
CROSS7();
Float(OUT_AC);
}
**直進と右左折の仕方 [#v6b35b09]
黒い線の左側を走らせることでカウント数を増やしているため...
直進は下の写真のような状況から、cross_right1をし、find_li...
#ref(修正前.jpg)
#ref(修正後.jpg)
右折は直進と違って、cross_right2をして、さらに右側のコー...
**考察・気づいた点 [#u11ddd40]
・電池を交換するとロボットの動きが良くなるので、カウント...
・カウントは右カーブより左カーブの方が増えやすい。カーブ...
・もしスタート地点がずれていたら、すべての動作がずれてし...
・カウントを設定した値より約200増やしても交差点の攻略はで...
・カウントを蓄積して交差点を攻略するという方法をやってし...
(交差点は直線やカーブよりも黒い部分が長く続くことを利用...
**感想 [#l9ede9f3]
交差点で停止するようにカウント数を調整することがとても時...
終了行:
[[2016a/Member]]
*課題2 [#x5f4f5f5]
**目次 [#z20feb59]
#CONTENTS
**ロボットの説明 [#qd2bbdaf]
今回も説明書通りのシンプルな構造にしました。
#ref(本体.jpg)
**プログラムの説明 [#k2f36dac]
***定義について [#vfa65f43]
#define THRESHOLD 55 //閾値
#define SPEED_H 50 //早めのスピード
#define SPEED_H2 45 //やや早めのスピード
#define SPEED_L 25 //遅めのスピード
#define OnRL(speedR,speedL) OnFwd(OUT_A,speedR);OnFwd(OU...
#define go_forward OnRL(SPEED_H,SPEED_H); //前進
#define turn_left1 OnRL(SPEED_L,-SPEED_L); //左折1
#define turn_left0 OnRL(SPEED_L,0); //左折0
#define turn_left2 OnRL(SPEED_H2,0); //左折2
#define turn_right0 OnRL(0,SPEED_L); //右折0
#define turn_right1 OnRL(-SPEED_L,SPEED_L); //右折1
#define turn_right2 OnRL(0,SPEED_H2); //右折2
#define cross_right1 turn_right2;Wait(600);Off(OUT_AC); ...
#define cross_left turn_left2;Wait(500);Off(OUT_AC); ...
#define find_line turn_right1;until(SENSOR_1 < THRESHOLD...
#define cross_right2 turn_right2;Wait(250);Off(OUT_AC);...
}
***サブルーチンついて [#x5605670]
sub CROSS1() //C地点からS左折まで
{
SetSensorLight(S1);
int n ; //カウント数をnとおく
while(n < 1400) //nが1400までの間は...
{
★ if(SENSOR_1<THRESHOLD-15) //閾値-15より低いと...
{
turn_left1;
n++;
}
else if(SENSOR_1<THRESHOLD-7) //閾値-7より低いと...
{
turn_left0;
}
else if(SENSOR_1<THRESHOLD+7) //閾値+7より低いと...
{
go_forward;
}
else if(SENSOR_1<THRESHOLD+15) //閾値+15より低い...
{
turn_right0;
}
else //その他は右折1
{
turn_right1;
}
}
Float(OUT_AC); //慣性力で車体を...
★ PlaySound(SOUND_UP); //交差点で音を鳴らす
Wait(400); //停止
n=0; //カウントを0に戻す
}
以降、★〜★の間の行はどのサブルーチンでも同じなのでコメン...
sub CROSS2() //S左折か...
{
SetSensorLight(S1);
int j ; //カウン...
while(j < 4700) //カウン...
{
★ if(SENSOR_1<THRESHOLD-15)
{
turn_left1;
j++;
}
else if(SENSOR_1<THRESHOLD-7)
{
turn_left0;
}
else if(SENSOR_1<THRESHOLD+7)
{
go_forward;
}
else if(SENSOR_1<THRESHOLD+15)
{
turn_right0;
}
else
{
turn_right1;
}
}
Float(OUT_AC);
PlaySound(SOUND_UP);
★ Wait(400);
j=0; //カウント数をリ...
}
sub CROSS3() //P左折からQ直進
{
SetSensorLight(S1);
int k ; //カウント数をk...
while(k < 6950) //カウント数が69...
{
★ if(SENSOR_1<THRESHOLD-15)
{
turn_left1;
k++;
}
else if(SENSOR_1<THRESHOLD-7)
{
turn_left0;
}
else if(SENSOR_1<THRESHOLD+7)
{
go_forward;
}
else if(SENSOR_1<THRESHOLD+15)
{
turn_right0;
}
else
{
turn_right1;
}
}
Float(OUT_AC);
PlaySound(SOUND_UP);
★ Wait(2000);
cross_right2; //右旋回
find_line; //黒い...
k=0; //カウ...
}
sub CROSS4() /...
{
SetSensorLight(S1);
int n ; /...
while(n < 14100) /...
{
★ if(SENSOR_1<THRESHOLD-15)
{
turn_left1;
n++;
}
else if(SENSOR_1<THRESHOLD-7)
{
turn_left0;
}
else if(SENSOR_1<THRESHOLD+7)
{
go_forward;
}
else if(SENSOR_1<THRESHOLD+15)
{
turn_right0;
}
else
{
turn_right1;
}
}
Float(OUT_AC);
PlaySound(SOUND_UP);
★ Wait(400);
cross_right2; //右旋回
find_line; //黒い線を見...
n=0; //カウント数...
}
sub CROSS5() //Q直進からR...
{
SetSensorLight(S1);
int n ; //カウント数...
while(n < 4100) //カウント数...
{
★ if(SENSOR_1<THRESHOLD-15)
{
turn_left1;
n++;
}
else if(SENSOR_1<THRESHOLD-7)
{
turn_left0;
}
else if(SENSOR_1<THRESHOLD+7)
{
go_forward;
}
else if(SENSOR_1<THRESHOLD+15)
{
turn_right0;
}
else
{
turn_right1;
}
}
Float(OUT_AC);
PlaySound(SOUND_UP);
★ Wait(400);
cross_right1; //少しだけ右旋回
find_line; //黒い線まで右...
n=0; //カウント数を...
}
sub CROSS6() //R左折からP左折
{
SetSensorLight(S1);
int n ; //カウント数を...
while(n < 920) //カウント数が9...
{
★ if(SENSOR_1<THRESHOLD-15)
{
turn_left1;
n++;
}
else if(SENSOR_1<THRESHOLD-7)
{
turn_left0;
}
else if(SENSOR_1<THRESHOLD+7)
{
go_forward;
}
else if(SENSOR_1<THRESHOLD+15)
{
turn_right0;
}
else
{
turn_right1;
}
}
Float(OUT_AC);
PlaySound(SOUND_UP);
★ Wait(400);
n=0; //カウント数を0に戻す
}
sub CROSS7() //P左折からA地...
{
SetSensorLight(S1);
int n ; //カウント数を...
while(n < 10000) //カウント数が1...
{
★ if(SENSOR_1<THRESHOLD-15)
{
turn_left1;
n++;
}
else if(SENSOR_1<THRESHOLD-7)
{
turn_left0;
}
else if(SENSOR_1<THRESHOLD+7)
{
go_forward;
}
else if(SENSOR_1<THRESHOLD+15)
{
turn_right0;
}
else
{
turn_right1;
}
}
Float(OUT_AC);
PlaySound(SOUND_UP);
Wait(400);
go_forward;
★ Wait(700);
n=0; //カウント数を0に戻す
}
***カウント数について [#we46ba0f]
カウント数とは交差点から交差点の間で、黒い部分を通った回...
そのカウント数が一定数に達すると、次の動作に移るようにし...
***交差点の判断について [#za5bb84c]
交差点の判断はカウント数を利用して判断させました。それぞ...
定めたカウント数に達すると一時停止をし、直進や右左折をす...
***プログラム [#j59d3db7]
task main()
{
CROSS1();
Wait(1000);
CROSS2();
Wait(1000);
CROSS3();
Wait(1000);
CROSS4();
Wait(1000);
CROSS5();
Wait(1000);
CROSS6();
Wait(1000);
CROSS7();
Float(OUT_AC);
}
**直進と右左折の仕方 [#v6b35b09]
黒い線の左側を走らせることでカウント数を増やしているため...
直進は下の写真のような状況から、cross_right1をし、find_li...
#ref(修正前.jpg)
#ref(修正後.jpg)
右折は直進と違って、cross_right2をして、さらに右側のコー...
**考察・気づいた点 [#u11ddd40]
・電池を交換するとロボットの動きが良くなるので、カウント...
・カウントは右カーブより左カーブの方が増えやすい。カーブ...
・もしスタート地点がずれていたら、すべての動作がずれてし...
・カウントを設定した値より約200増やしても交差点の攻略はで...
・カウントを蓄積して交差点を攻略するという方法をやってし...
(交差点は直線やカーブよりも黒い部分が長く続くことを利用...
**感想 [#l9ede9f3]
交差点で停止するようにカウント数を調整することがとても時...
ページ名: