2016a/Member/kotatu/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2016a/Member]]
*1.目次 [#ldea1e8b]
#contents
*2.はじめに [#t9c7cf52]
今回の課題は、ライントレースです。下図の黒線に沿って...
#ref(2016a/Member/kotatu/Mission2/2016a-mission2.png,50%,...
私はC地点からA地点へ移動するプログラムを作成したので、
C地点 → S左折 → P左折 → Q直進 → Q直進 → R...
のルートを通ります。
*3.本体の説明 [#x51938a1]
本体は比較的シンプルなものにしました。光センサーをな...
#ref(2016a/Member/kotatu/Mission2/Image_514cd12.jpg,20%,...
#ref(2016a/Member/kotatu/Mission2/S_4574108066090.jpg,15%...
本体を引きずらないように、裏面は写真のように滑りやす...
#ref(2016a/Member/kotatu/Mission2/S_4573649592503.jpg,20%...
*4.プログラム [#c6f252ca]
?定義文
光センサーの境界は4つ設けました。nMAXは交差点判定時に...
右(左)旋回は、右(左)回転よりも急に曲がります。
#define BLACK 35 //境界? 3...
#define B_GLAY 38 //境界? 3...
#define W_GLAY 42 //境界? 4...
#define WHITE 45 //境界? 4...
#define go_forward OnFwd(OUT_AC); //前進
#define turn_right1 OnFwd(OUT_A);OnRev(OUT_C);//右旋回(...
#define turn_right2 OnFwd(OUT_A); //右回転
#define turn_left1 OnFwd(OUT_C);OnRev(OUT_A); //左旋回(...
#define turn_left2 OnFwd(OUT_C); //左回転
#define nMAX 5 //nが5以上...
#define STEP 1 //小休憩(...
#define TURN_TIME90 50 //90度曲が...
#define TURN_TIME180 80 //180度曲...
?ライントレース(サブルーチン)
基本はラインの左側をトレースします。
交差点は、続けて黒になる回数が何回続くかによって判断...
「nOnBLACK」は何回連続で光センサーの値が35以下(黒と...
「X」は交差点と判断したときにライントレースを止めさせ...
sub line_trace()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
int nOnBLACK=0; //nOnBLACKを...
int X=0; //Xを定義する...
while(X == 0){ //Xが0の間以...
while(nOnBLACK < nMAX){
if (SENSOR_2 < BLACK) { //黒のとき、...
turn_left1;
nOnBLACK++; //OnBLACKのカ...
} else {
if (SENSOR_2 < B_GLAY) { //黒寄りの灰...
turn_left2;
} else if (SENSOR_2 < W_GLAY) { //黒寄りの灰...
go_forward;
} else if (SENSOR_2 < WHITE) { //白寄りの灰...
turn_right2;
} else if (SENSOR_2 > WHITE) { //白のとき、...
turn_right1;
}
nOnBLACK=0; //OnBLACKのカ...
}
Wait(STEP); //小休憩
}
Off(OUT_AC);
Wait(100);
PlaySound(SOUND_FAST_UP); //音を鳴らす
Wait(300);
nOnBLACK=0; //OnBLACKのカ...
X++; //Xのカウント...
}
X=0; //Xのカウント...
}
?交差点を左折(サブルーチン)
交差点と判定したときのロボットの位置にはばらつきがあ...
左折の場合は、回転させた後小休憩をはさみそのまま再度...
sub turn_left()
{
while(SENSOR_2 < WHITE){ //光センサーが白と判定...
turn_left1;
}
Wait(STEP); //小休憩
}
?交差点を直進(サブルーチン)
左折の場合と同様に白になるまで右回転させます。
その後90度その場で回転させ、前進してラインを超えます。
sub advance()
{
while(SENSOR_2 < WHITE){ //光センサーが白と判定...
turn_left1;
}
Wait(STEP); //小休憩
turn_right1; //90度曲がる
Wait(TURN_TIME90);
go_forward; //ライン上を通過
Wait(20);
}
?交差点を右折(サブルーチン)
左折の場合と同様に白になるまで右回転させます。
その後180度その場で回転させ、前進してラインを超え、再...
sub turn_right()
{
while(SENSOR_2 < WHITE){ //光センサーが白と判定...
turn_left1;
}
Wait(STEP); //小休憩
turn_right1; //180度曲がる
Wait(TURN_TIME180);
go_forward; //ライン上を通過
Wait(20);
}
?コースに沿ってライントレース
2.はじめに で記述したように
C地点 → S左折 → P左折 → Q直進 → Q直進 → R...
のルートを進みます。最後の直進はA地点の枠の中に入るた...
task main()
{
line_trace();
turn_left();
line_trace();
turn_left();
line_trace();
advance();
line_trace();
advance();
line_trace();
turn_right();
line_trace();
turn_left();
line_trace();
advance();
go_forward(OUT_AC);
Wait(100);
Off(OUT_AC);
}
*5.結果と感想 [#v26f8003]
スタートからゴールまでにかかった時間は1分10秒でした。
まれに途中でコースを見失うことがありましたが、その場...
前回の似顔絵は完成させることが出来ませんでしたが、今...
終了行:
[[2016a/Member]]
*1.目次 [#ldea1e8b]
#contents
*2.はじめに [#t9c7cf52]
今回の課題は、ライントレースです。下図の黒線に沿って...
#ref(2016a/Member/kotatu/Mission2/2016a-mission2.png,50%,...
私はC地点からA地点へ移動するプログラムを作成したので、
C地点 → S左折 → P左折 → Q直進 → Q直進 → R...
のルートを通ります。
*3.本体の説明 [#x51938a1]
本体は比較的シンプルなものにしました。光センサーをな...
#ref(2016a/Member/kotatu/Mission2/Image_514cd12.jpg,20%,...
#ref(2016a/Member/kotatu/Mission2/S_4574108066090.jpg,15%...
本体を引きずらないように、裏面は写真のように滑りやす...
#ref(2016a/Member/kotatu/Mission2/S_4573649592503.jpg,20%...
*4.プログラム [#c6f252ca]
?定義文
光センサーの境界は4つ設けました。nMAXは交差点判定時に...
右(左)旋回は、右(左)回転よりも急に曲がります。
#define BLACK 35 //境界? 3...
#define B_GLAY 38 //境界? 3...
#define W_GLAY 42 //境界? 4...
#define WHITE 45 //境界? 4...
#define go_forward OnFwd(OUT_AC); //前進
#define turn_right1 OnFwd(OUT_A);OnRev(OUT_C);//右旋回(...
#define turn_right2 OnFwd(OUT_A); //右回転
#define turn_left1 OnFwd(OUT_C);OnRev(OUT_A); //左旋回(...
#define turn_left2 OnFwd(OUT_C); //左回転
#define nMAX 5 //nが5以上...
#define STEP 1 //小休憩(...
#define TURN_TIME90 50 //90度曲が...
#define TURN_TIME180 80 //180度曲...
?ライントレース(サブルーチン)
基本はラインの左側をトレースします。
交差点は、続けて黒になる回数が何回続くかによって判断...
「nOnBLACK」は何回連続で光センサーの値が35以下(黒と...
「X」は交差点と判断したときにライントレースを止めさせ...
sub line_trace()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
int nOnBLACK=0; //nOnBLACKを...
int X=0; //Xを定義する...
while(X == 0){ //Xが0の間以...
while(nOnBLACK < nMAX){
if (SENSOR_2 < BLACK) { //黒のとき、...
turn_left1;
nOnBLACK++; //OnBLACKのカ...
} else {
if (SENSOR_2 < B_GLAY) { //黒寄りの灰...
turn_left2;
} else if (SENSOR_2 < W_GLAY) { //黒寄りの灰...
go_forward;
} else if (SENSOR_2 < WHITE) { //白寄りの灰...
turn_right2;
} else if (SENSOR_2 > WHITE) { //白のとき、...
turn_right1;
}
nOnBLACK=0; //OnBLACKのカ...
}
Wait(STEP); //小休憩
}
Off(OUT_AC);
Wait(100);
PlaySound(SOUND_FAST_UP); //音を鳴らす
Wait(300);
nOnBLACK=0; //OnBLACKのカ...
X++; //Xのカウント...
}
X=0; //Xのカウント...
}
?交差点を左折(サブルーチン)
交差点と判定したときのロボットの位置にはばらつきがあ...
左折の場合は、回転させた後小休憩をはさみそのまま再度...
sub turn_left()
{
while(SENSOR_2 < WHITE){ //光センサーが白と判定...
turn_left1;
}
Wait(STEP); //小休憩
}
?交差点を直進(サブルーチン)
左折の場合と同様に白になるまで右回転させます。
その後90度その場で回転させ、前進してラインを超えます。
sub advance()
{
while(SENSOR_2 < WHITE){ //光センサーが白と判定...
turn_left1;
}
Wait(STEP); //小休憩
turn_right1; //90度曲がる
Wait(TURN_TIME90);
go_forward; //ライン上を通過
Wait(20);
}
?交差点を右折(サブルーチン)
左折の場合と同様に白になるまで右回転させます。
その後180度その場で回転させ、前進してラインを超え、再...
sub turn_right()
{
while(SENSOR_2 < WHITE){ //光センサーが白と判定...
turn_left1;
}
Wait(STEP); //小休憩
turn_right1; //180度曲がる
Wait(TURN_TIME180);
go_forward; //ライン上を通過
Wait(20);
}
?コースに沿ってライントレース
2.はじめに で記述したように
C地点 → S左折 → P左折 → Q直進 → Q直進 → R...
のルートを進みます。最後の直進はA地点の枠の中に入るた...
task main()
{
line_trace();
turn_left();
line_trace();
turn_left();
line_trace();
advance();
line_trace();
advance();
line_trace();
turn_right();
line_trace();
turn_left();
line_trace();
advance();
go_forward(OUT_AC);
Wait(100);
Off(OUT_AC);
}
*5.結果と感想 [#v26f8003]
スタートからゴールまでにかかった時間は1分10秒でした。
まれに途中でコースを見失うことがありましたが、その場...
前回の似顔絵は完成させることが出来ませんでしたが、今...
ページ名: