2017a/Member/speedball/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2017a/Member]]
目次
#contents
*1.課題について [#j888b7b9]
#ref(./Misson_course.png,60%,コースマップ)
この課題は、黒い線にそって動くロボットの作成である([[課題...
*2.ロボット [#gbf90a89]
**本体 [#e91dda05]
#ref(./IMG_6438.JPG,50%,本体)
本体は、作り方説明書に載っているシンプルなものに光センサ...
**光センサ [#zb8d8f8a]
#ref(./DSC_0045.JPG,35%,光センサ)
急カーブを曲がれるようにするために光センサと本体の旋回軸...
*3.プログラム [#tc64471b]
コース全体を7種類の部分に分け、それぞれの部分に対応するプ...
**定義 [#fc36b986]
#define THRESHOLD 45 //閾値
#define SPEED_H 35 //直進時のモーター出力値
#define SPEED_L 25 //右左折時のモーター出力値
#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR); OnFwd(O...
#define go_forward OnRL(SPEED_H,SPEED_H);
#define spin_l OnRL(SPEED_L,-SPEED_L); //左旋回
#define spin_r OnRL(-SPEED_L,SPEED_L); //右旋回
#define turn_l OnRL(SPEED_L,0); //左折
#define turn_r OnRL(0,SPEED_L); //右折
#define STEP 1 //1回の判断...
#define RE_TIME1 400
#define nMAX 200 //カーブとし...
#define break_s Off(OUT_BC); Wait(300); //小休止
#define break_m Off(OUT_BC); Wait(1000); //中休止
#define CROSS_TIME 500 //交差点通過...
#define cross_line OnRL(SPEED_L,SPEED_L); Wait(CROSS_TIM...
#define turn_r45 RotateMotor(OUT_C,30,70); //45度右折く...
#define turn_r60 RotateMotor(OUT_BC,30,120); RotateMotor...
#define turn_r90 RotateMotor(OUT_BC,30,15); RotateMotor(...
#define turn_l90 RotateMotor(OUT_B,30,260); //90度左折く...
#define turn_l60 RotateMotor(OUT_BC,30,70); RotateMotor(...
#define turn_l45 RotateMotor(OUT_BC,30,70); //45度左折く...
#define go_last RotateMotor(OUT_BC,35,300); //最後の直進
**右側通行(黒の線に対して[以降同様])→右折→左側通行に変更(...
sub part1()
{
SetSensorLight(S4);
int n=0;
while(n<nMAX) {
if(SENSOR_4<THRESHOLD-10) {
spin_r;
n++; //カウンタを1増やす
} else {
if(SENSOR_4<THRESHOLD-5) {
turn_r;
} else if(SENSOR_4<THRESHOLD+5) {
go_forward;
} else if(SENSOR_4<THRESHOLD+10) {
turn_l;
} else {
spin_l;
}
n=0; //カウンタをリセット
}
Wait(STEP);
}
PlaySound(SOUND_UP); //交差点発見
turn_r60; //右折
n=0; //カウンタをリセット
}
**左側通行→左折→左側通行のまま(E→P,G→S) [#xdb6fa18]
sub part2()
{
SetSensorLight(S4);
int n=0;
while(n<nMAX) {
if(SENSOR_4<THRESHOLD-10) {
spin_l;
n++; //カウンタを1増やす
} else {
if(SENSOR_4<THRESHOLD-5) {
turn_l;
} else if(SENSOR_4<THRESHOLD+5) {
go_forward;
} else if(SENSOR_4<THRESHOLD+10) {
turn_r;
} else {
spin_r;
}
n=0; //カウンタをリセット
}
Wait(STEP);
}
break_s; //小休止
PlaySound(SOUND_DOWN); //交差点発見
break_m; //一時停止
turn_l90; //左折
n=0; //カウンタをリセット
}
**左側通行→横断→左側通行のまま(P→Q,S→P) [#bc6dcbca]
sub part3()
{
SetSensorLight(S4);
int n=0;
while(n<nMAX) {
if(SENSOR_4<THRESHOLD-10) {
spin_l;
n++; //カウンタを1増やす
} else {
if(SENSOR_4<THRESHOLD-5) {
turn_l;
} else if(SENSOR_4<THRESHOLD+5) {
go_forward;
} else if(SENSOR_4<THRESHOLD+10) {
turn_r;
} else {
spin_r;
}
n=0; //カウンタをリセット
}
Wait(STEP);
}
PlaySound(SOUND_UP); //交差点発見
spin_r; Wait(nMAX*STEP); //進行方向修正
cross_line; //横断
n=0; //カウンタをリセット
}
**左側通行→左折→右側通行に変更(Q→R,P→Q) [#l8dccee9]
sub part4()
{
SetSensorLight(S4);
int n=0;
while(n<nMAX) {
if(SENSOR_4<THRESHOLD-10) {
spin_l;
n++; //カウンタを1増やす
} else {
if(SENSOR_4<THRESHOLD-5) {
turn_l;
} else if(SENSOR_4<THRESHOLD+5) {
go_forward;
} else if(SENSOR_4<THRESHOLD+10) {
turn_r;
} else {
spin_r;
}
n=0; //カウンタをリセット
}
Wait(STEP);
}
PlaySound(SOUND_UP); //交差点発見
spin_r; Wait(RE_TIME1); //進行方向調整
turn_l45; //左折
n=0; //カウンタをリセット
}
**右側通行→横断→右側通行のまま(R→T,T→T) [#m2af9957]
sub part5()
{
SetSensorLight(S4);
int n=0;
while(n<nMAX) {
if(SENSOR_4<THRESHOLD-10) {
spin_r;
n++; //カウンタを1増やす
} else {
if(SENSOR_4<THRESHOLD-5) {
turn_r;
} else if(SENSOR_4<THRESHOLD+5) {
go_forward;
} else if(SENSOR_4<THRESHOLD+10) {
turn_l;
} else {
spin_l;
}
n=0; //カウンタをリセット
}
Wait(STEP);
}
break_s; //小休止
PlaySound(SOUND_DOWN); //交差点発見
break_m; //一時停止
spin_l; Wait(nMAX*STEP); //進行方向修正
cross_line; //横断
n=0; //カウンタをリセット
}
**右側通行→右折→右側通行のまま(T→H,Q→F) [#r5809fb3]
sub part6()
{
SetSensorLight(S4);
int n=0;
while(n<nMAX) {
if(SENSOR_4<THRESHOLD-10) {
spin_r;
n++; //カウンタを1増やす
} else {
if(SENSOR_4<THRESHOLD-5) {
turn_r;
} else if(SENSOR_4<THRESHOLD+5) {
go_forward;
} else if(SENSOR_4<THRESHOLD+10) {
turn_l;
} else {
spin_l;
}
n=0; //カウンタをリセット
}
Wait(STEP);
}
PlaySound(SOUND_UP); //交差点発見
turn_r90; //右折
n=0; //カウンタをリセット
}
**右側通行→Aの敷地内に停車(F→E→A) [#c71d8e72]
sub part7() //右側通行→Aの敷地内に停車(F→E→A)
{
SetSensorLight(S4);
int n=0;
while(n<nMAX) {
if(SENSOR_4<THRESHOLD-10) {
spin_r;
n++; //カウンタを1増やす
} else {
if(SENSOR_4<THRESHOLD-5) {
turn_r;
} else if(SENSOR_4<THRESHOLD+5) {
go_forward;
} else if(SENSOR_4<THRESHOLD+10) {
turn_l;
} else {
spin_l;
}
n=0; //カウンタをリセット
}
Wait(STEP);
}
spin_l; Wait(nMAX*STEP); //進行方向修正
go_last; //直進
PlaySound(SOUND_DOWN); //終了
}
**タスクメイン [#j8657e58]
task main()
{
part1(); //A→E右折(右)
part2(); //E→P左折(左)
part3(); //P→Q直進(左)
part4(); //Q→R左折(左)
part5(); //R→T直進(右)
part5(); //T→T直進(右)
part6(); //T→H右折(右)
part1(); //H→G右折(右)
part2(); //G→S左折(左)
part3(); //S→P直進(左)
part4(); //P→Q左折(左)
part6(); //Q→F右折(右)
part7(); //F→A直進(右)
}
()内の文字(右、左)は黒線のどちら側を通るかを示す。
*4.ミッション遂行タイム [#bf376c1b]
所定のコースを走行し終わったあとのタイムは1分29秒であった。
*5.まとめ・感想 [#pafe12f9]
まずは、無事に完走させることができたことを嬉しく思う。特...
Mission1の「まとめ・感想」で書いた反省のようにタスクメイ...
終了行:
[[2017a/Member]]
目次
#contents
*1.課題について [#j888b7b9]
#ref(./Misson_course.png,60%,コースマップ)
この課題は、黒い線にそって動くロボットの作成である([[課題...
*2.ロボット [#gbf90a89]
**本体 [#e91dda05]
#ref(./IMG_6438.JPG,50%,本体)
本体は、作り方説明書に載っているシンプルなものに光センサ...
**光センサ [#zb8d8f8a]
#ref(./DSC_0045.JPG,35%,光センサ)
急カーブを曲がれるようにするために光センサと本体の旋回軸...
*3.プログラム [#tc64471b]
コース全体を7種類の部分に分け、それぞれの部分に対応するプ...
**定義 [#fc36b986]
#define THRESHOLD 45 //閾値
#define SPEED_H 35 //直進時のモーター出力値
#define SPEED_L 25 //右左折時のモーター出力値
#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR); OnFwd(O...
#define go_forward OnRL(SPEED_H,SPEED_H);
#define spin_l OnRL(SPEED_L,-SPEED_L); //左旋回
#define spin_r OnRL(-SPEED_L,SPEED_L); //右旋回
#define turn_l OnRL(SPEED_L,0); //左折
#define turn_r OnRL(0,SPEED_L); //右折
#define STEP 1 //1回の判断...
#define RE_TIME1 400
#define nMAX 200 //カーブとし...
#define break_s Off(OUT_BC); Wait(300); //小休止
#define break_m Off(OUT_BC); Wait(1000); //中休止
#define CROSS_TIME 500 //交差点通過...
#define cross_line OnRL(SPEED_L,SPEED_L); Wait(CROSS_TIM...
#define turn_r45 RotateMotor(OUT_C,30,70); //45度右折く...
#define turn_r60 RotateMotor(OUT_BC,30,120); RotateMotor...
#define turn_r90 RotateMotor(OUT_BC,30,15); RotateMotor(...
#define turn_l90 RotateMotor(OUT_B,30,260); //90度左折く...
#define turn_l60 RotateMotor(OUT_BC,30,70); RotateMotor(...
#define turn_l45 RotateMotor(OUT_BC,30,70); //45度左折く...
#define go_last RotateMotor(OUT_BC,35,300); //最後の直進
**右側通行(黒の線に対して[以降同様])→右折→左側通行に変更(...
sub part1()
{
SetSensorLight(S4);
int n=0;
while(n<nMAX) {
if(SENSOR_4<THRESHOLD-10) {
spin_r;
n++; //カウンタを1増やす
} else {
if(SENSOR_4<THRESHOLD-5) {
turn_r;
} else if(SENSOR_4<THRESHOLD+5) {
go_forward;
} else if(SENSOR_4<THRESHOLD+10) {
turn_l;
} else {
spin_l;
}
n=0; //カウンタをリセット
}
Wait(STEP);
}
PlaySound(SOUND_UP); //交差点発見
turn_r60; //右折
n=0; //カウンタをリセット
}
**左側通行→左折→左側通行のまま(E→P,G→S) [#xdb6fa18]
sub part2()
{
SetSensorLight(S4);
int n=0;
while(n<nMAX) {
if(SENSOR_4<THRESHOLD-10) {
spin_l;
n++; //カウンタを1増やす
} else {
if(SENSOR_4<THRESHOLD-5) {
turn_l;
} else if(SENSOR_4<THRESHOLD+5) {
go_forward;
} else if(SENSOR_4<THRESHOLD+10) {
turn_r;
} else {
spin_r;
}
n=0; //カウンタをリセット
}
Wait(STEP);
}
break_s; //小休止
PlaySound(SOUND_DOWN); //交差点発見
break_m; //一時停止
turn_l90; //左折
n=0; //カウンタをリセット
}
**左側通行→横断→左側通行のまま(P→Q,S→P) [#bc6dcbca]
sub part3()
{
SetSensorLight(S4);
int n=0;
while(n<nMAX) {
if(SENSOR_4<THRESHOLD-10) {
spin_l;
n++; //カウンタを1増やす
} else {
if(SENSOR_4<THRESHOLD-5) {
turn_l;
} else if(SENSOR_4<THRESHOLD+5) {
go_forward;
} else if(SENSOR_4<THRESHOLD+10) {
turn_r;
} else {
spin_r;
}
n=0; //カウンタをリセット
}
Wait(STEP);
}
PlaySound(SOUND_UP); //交差点発見
spin_r; Wait(nMAX*STEP); //進行方向修正
cross_line; //横断
n=0; //カウンタをリセット
}
**左側通行→左折→右側通行に変更(Q→R,P→Q) [#l8dccee9]
sub part4()
{
SetSensorLight(S4);
int n=0;
while(n<nMAX) {
if(SENSOR_4<THRESHOLD-10) {
spin_l;
n++; //カウンタを1増やす
} else {
if(SENSOR_4<THRESHOLD-5) {
turn_l;
} else if(SENSOR_4<THRESHOLD+5) {
go_forward;
} else if(SENSOR_4<THRESHOLD+10) {
turn_r;
} else {
spin_r;
}
n=0; //カウンタをリセット
}
Wait(STEP);
}
PlaySound(SOUND_UP); //交差点発見
spin_r; Wait(RE_TIME1); //進行方向調整
turn_l45; //左折
n=0; //カウンタをリセット
}
**右側通行→横断→右側通行のまま(R→T,T→T) [#m2af9957]
sub part5()
{
SetSensorLight(S4);
int n=0;
while(n<nMAX) {
if(SENSOR_4<THRESHOLD-10) {
spin_r;
n++; //カウンタを1増やす
} else {
if(SENSOR_4<THRESHOLD-5) {
turn_r;
} else if(SENSOR_4<THRESHOLD+5) {
go_forward;
} else if(SENSOR_4<THRESHOLD+10) {
turn_l;
} else {
spin_l;
}
n=0; //カウンタをリセット
}
Wait(STEP);
}
break_s; //小休止
PlaySound(SOUND_DOWN); //交差点発見
break_m; //一時停止
spin_l; Wait(nMAX*STEP); //進行方向修正
cross_line; //横断
n=0; //カウンタをリセット
}
**右側通行→右折→右側通行のまま(T→H,Q→F) [#r5809fb3]
sub part6()
{
SetSensorLight(S4);
int n=0;
while(n<nMAX) {
if(SENSOR_4<THRESHOLD-10) {
spin_r;
n++; //カウンタを1増やす
} else {
if(SENSOR_4<THRESHOLD-5) {
turn_r;
} else if(SENSOR_4<THRESHOLD+5) {
go_forward;
} else if(SENSOR_4<THRESHOLD+10) {
turn_l;
} else {
spin_l;
}
n=0; //カウンタをリセット
}
Wait(STEP);
}
PlaySound(SOUND_UP); //交差点発見
turn_r90; //右折
n=0; //カウンタをリセット
}
**右側通行→Aの敷地内に停車(F→E→A) [#c71d8e72]
sub part7() //右側通行→Aの敷地内に停車(F→E→A)
{
SetSensorLight(S4);
int n=0;
while(n<nMAX) {
if(SENSOR_4<THRESHOLD-10) {
spin_r;
n++; //カウンタを1増やす
} else {
if(SENSOR_4<THRESHOLD-5) {
turn_r;
} else if(SENSOR_4<THRESHOLD+5) {
go_forward;
} else if(SENSOR_4<THRESHOLD+10) {
turn_l;
} else {
spin_l;
}
n=0; //カウンタをリセット
}
Wait(STEP);
}
spin_l; Wait(nMAX*STEP); //進行方向修正
go_last; //直進
PlaySound(SOUND_DOWN); //終了
}
**タスクメイン [#j8657e58]
task main()
{
part1(); //A→E右折(右)
part2(); //E→P左折(左)
part3(); //P→Q直進(左)
part4(); //Q→R左折(左)
part5(); //R→T直進(右)
part5(); //T→T直進(右)
part6(); //T→H右折(右)
part1(); //H→G右折(右)
part2(); //G→S左折(左)
part3(); //S→P直進(左)
part4(); //P→Q左折(左)
part6(); //Q→F右折(右)
part7(); //F→A直進(右)
}
()内の文字(右、左)は黒線のどちら側を通るかを示す。
*4.ミッション遂行タイム [#bf376c1b]
所定のコースを走行し終わったあとのタイムは1分29秒であった。
*5.まとめ・感想 [#pafe12f9]
まずは、無事に完走させることができたことを嬉しく思う。特...
Mission1の「まとめ・感想」で書いた反省のようにタスクメイ...
ページ名: