2017a/Member/Ryota/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2017a/Member]]
目次
#contents
*今回の課題について [#v9709070]
#ref(./course1.png,100%,a)
1 E右折(SOUND_UP)
2 P一時停止(SOUND_DOWN)&左折
3 Q(SOUND_UP)&直進
4 R(SOUND_UP)&左折
5 T一時停止(SOUND_DOWN)&直進
6 T一時停止(SOUND_DOWN)&直進
7 H(SOUND_UP)
8 G(SOUND_UP)
9 S一時停止(SOUND_DOWN)&左折
10 P直進(SOUND_UP)
11 Q左折(SOUND_UP)
12 F(SOUND_UP)
13 E直進
14 A停止(SOUND_DOWN)
という道順で進むロボットを作らなければなりませんでした。
さらに、以下の条件を満たすようなロボットを作らなければな...
・できるだけ素早く正確に動くロボットになるように工夫し...
・一時停止の交差点および丁字路ではSOUND_DOWNを鳴らした...
・直角コーナーと一時停止が必要でない丁字路ではSOUND_UP...
・ロボットのサイズは、15cmX15cmに収めなければなりません...
・交差点、丁字路、直角コーナーについては、差し掛かった...
距離のみで判定してはいけません。
*ロッボトについて [#f4d447b5]
**概形 [#r0397754]
#ref(./senn2.jpg,10%,a)
15cm四方の枠内に収めなければならないという条件が存在した...
**車輪 [#pd458f58]
#ref(./senn3.jpg,10%,a)
最初は前二輪、後一輪の三輪にしていましたが、後ろにタイヤ...
**センサー [#xc1d8db6]
#ref(./senn1.jpg,10%,a)
センサーが本体から遠すぎたり近すぎたり紙から遠かったりす...
*交差点判断 [#v417694e]
白と黒の中間色より白が一定時間以上続く場合に、交差点と判...
*定数・マクロ [#dcdbd4e7]
最初に明るさの基準値を決めておき、その値から離れ具合によ...
また、場所によって曲がる角度が変化するので、曲がる方向が...
#define THRESHOLD 45
#define go_forward OnFwd(OUT_AC); /...
#define turn_right0 OnFwd(OUT_A);OnRev(OUT_C); /...
#define turn_right1 OnFwd(OUT_A); /...
#define turn_left0 OnRev(OUT_A);OnFwd(OUT_C); /...
#define turn_left1 OnFwd(OUT_C); /...
#define s_up PlaySound(SOUND_UP);
#define s_down PlaySound(SOUND_DOWN);
#define Tmax 29 /...
int t=0; /...
*サブルーチン [#te702616]
直角に左折
sub cross_left(){
s_up;
turn_left0;
until(SENSOR_2 < THRESHOLD -3);
}
直角に右折
sub cross_right(){
s_up;
turn_left0;
until(SENSOR_2 < THRESHOLD -3);
}
その場で一時停止
sub cross_stop(){
Off(OUT_AC);Wait(100);
s_down;
}
交差点を直進
sub cross_straight(){
turn_right1;
Wait(20);
go_foward;
until(SENSOR_2 < THRESHOLD -3);
turn_right1;
until(SENSOR_2 < THRESHOLD +8);
}
n秒間ラインの左側をたどる
void linetrace1(int s){
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(2);
while(FastTimer(2)<s){
if(SENSOR_2 < THRESHOLD -8){
turn_left0;
}else if(SENSOR_2 < THRESHOLD -3){
turn_left1;
}else if(SENSOR_2 < THRESHOLD +3){
go_forward;
}else if(SENSOR_2 < THRESHOLD +8){
turn_right1;
}else {
turn_right0;
}
ClearTimer(0);
}
}
*プログラミングについて [#c422dabd]
「t==0」のとき、最初の「if」の中に入ります。Fで交差点を見...
このとき「t==1」になりますが、「if」の動作が終わるまで「i...
そして「cross_left」に移ります。 「cross_left」が終わると...
#define go_straight OnFwd(OUT_AC); Wait(25); Off(OUT_AC...
#define cross_right Off(OUT_AC); Wait(3); OnFwd(OUT_A )...
#define turn_right Off(OUT_AC); Wait(3); OnFwd(OUT_A); ...
#define right_angle OnFwd(OUT_AC); Wait(25); Off(OUT_AC...
#define cross_left Off(OUT_AC); Wait(3); OnFwd(OUT_C); ...
#define turn_left Off(OUT_AC); Wait(3); OnFwd(OUT_C); O...
#define left_angle OnFwd(OUT_AC); Wait(25); Off(OUT_AC)...
task main(){
SetSensor(SENSOR_2,SENSOR_LIGHT);
int a=0;
while( a < 5 ){
if(SENSOR_2 >= 50){
turn_left;
} else if(SENSOR_2 >= 45 ){
cross_left;
} else if(SENSOR_2 >= 37 ){
cross_right;
} else if(SENSOR_2 >= 30 ){
turn_right;
a++;
}
} //ここまでE
PlaySound(SOUND_UP);
right_angle;
int b=0;
while( b < 4 ){
if(SENSOR_2 >= 50){
turn_left;
} else if(SENSOR_2 >= 45 ){
cross_left;
} else if(SENSOR_2 >= 40 ){
cross_right;
} else if(SENSOR_2 >= 30 ){
turn_right;
b++;
}
} //ここまでP
Off(OUT_AC);
Wait(100);
PlaySound(SOUND_DOWN);
left_angle;
int c=0;
while( c < 4 ){
if(SENSOR_2 >= 50){
turn_right;
} else if(SENSOR_2 >= 45 ){
cross_right;
} else if(SENSOR_2 >= 40 ){
cross_left;
} else if(SENSOR_2 >= 30 ){
turn_left;
c++;
}
} //ここまでQ
go_straight;
int d=0;
while( d < 4 ){
if(SENSOR_2 >= 50){
turn_right;
} else if(SENSOR_2 >= 45 ){
cross_right;
} else if(SENSOR_2 >= 40 ){
cross_left;
} else if(SENSOR_2 >= 30 ){
turn_left;
d++;
}
} //ここまでR
go_straight;
int e=0;
while( e < 5 ){
if(SENSOR_2 >= 50){
turn_left;
} else if(SENSOR_2 >= 45 ){
cross_left;
} else if(SENSOR_2 >= 37 ){
cross_light;
} else if(SENSOR_2 >= 30 ){
turn_right;
e++;
}
} //ここまでT
PlaySound(SOUND_DOWN);
go_straight;
int f=0;
while( f < 6 ){
if(SENSOR_2 >= 50){
turn_left;
} else if(SENSOR_2 >= 45 ){
cross_left;
} else if(SENSOR_2 >= 37 ){
cross_right;
} else if(SENSOR_2 >= 30 ){
turn_right;
f++;
}
} //一周してTに戻る
PlaySound(SOUND_DOWN);
go_straight;
int g=0;
while( g < 11 ){
if(SENSOR_2 >= 50){
turn_left;
} else if(SENSOR_2 >= 45 ){
cross_left;
} else if(SENSOR_2 >= 37 ){
cross_right;
} else if(SENSOR_2 >= 30 ){
turn_right;
g++;
}
} //ここまでH
PlaySound(SOUND_UP);
right_angle;
int h=0;
while( h < 60 ){
if(SENSOR_2 >= 50){
turn_left;
} else if(SENSOR_2 >= 45 ){
cross_left;
} else if(SENSOR_2 >= 37 ){
cross_right;
} else if(SENSOR_2 >= 30 ){
turn_right;
h++;
}
} //ここまでG
PlaySound(SOUND_UP);
right_angle;
int i=0;
while( i < 3 ){
if(SENSOR_2 >= 50){
turn_left;
} else if(SENSOR_2 >= 45 ){
cross_left;
} else if(SENSOR_2 >= 37 ){
cross_right;
} else if(SENSOR_2 >= 30 ){
turn_right;
i++;
}
} //ここまでS
PlaySound(SOUND_DOWN);
Off(OUT_AC);
Wait(100);
left_angle;
int j=0;
while( j < 4 ){
if(SENSOR_2 >= 50){
turn_right;
} else if(SENSOR_2 >= 45 ){
cross_right;
} else if(SENSOR_2 >= 40 ){
cross_left;
} else if(SENSOR_2 >= 30 ){
turn_left;
j++;
}
} //ここまでP
PlaySound(SOUND_UP);
go_straight;
int k=0;
while( k < 4 ){
if(SENSOR_2 >= 50){
turn_right;
} else if(SENSOR_2 >= 45 ){
cross_right;
} else if(SENSOR_2 >= 40 ){
cross_left;
} else if(SENSOR_2 >= 30 ){
turn_left;
k++;
}
} //ここまでQ
PlaySound(SOUND_UP);
go_straight;
int l=0;
while( l < 5 ){
if(SENSOR_2 >= 50){
turn_left;
} else if(SENSOR_2 >= 45 ){
cross_left;
} else if(SENSOR_2 >= 37 ){
cross_right;
} else if(SENSOR_2 >= 30 ){
turn_right;
l++;
}
} //ここまでF
PlaySound(SOUND_UP);
right_angle;
int m=0;
while( m < 10 ){
if(SENSOR_2 >= 50){
turn_left;
} else if(SENSOR_2 >= 45 ){
cross_left;
} else if(SENSOR_2 >= 37){
cross_right;
} else if(SENSOR_2 >= 30 ){
turn_right;
m++;
}
} //スタート地点に戻る
Off(OUT_AC);
PlaySound(SOUND_DOWN);
} //停止して終了
* 結果 [#g5b4d5d4]
前回の課題同様上手くいく時と上手くいかない時がありました...
終了行:
[[2017a/Member]]
目次
#contents
*今回の課題について [#v9709070]
#ref(./course1.png,100%,a)
1 E右折(SOUND_UP)
2 P一時停止(SOUND_DOWN)&左折
3 Q(SOUND_UP)&直進
4 R(SOUND_UP)&左折
5 T一時停止(SOUND_DOWN)&直進
6 T一時停止(SOUND_DOWN)&直進
7 H(SOUND_UP)
8 G(SOUND_UP)
9 S一時停止(SOUND_DOWN)&左折
10 P直進(SOUND_UP)
11 Q左折(SOUND_UP)
12 F(SOUND_UP)
13 E直進
14 A停止(SOUND_DOWN)
という道順で進むロボットを作らなければなりませんでした。
さらに、以下の条件を満たすようなロボットを作らなければな...
・できるだけ素早く正確に動くロボットになるように工夫し...
・一時停止の交差点および丁字路ではSOUND_DOWNを鳴らした...
・直角コーナーと一時停止が必要でない丁字路ではSOUND_UP...
・ロボットのサイズは、15cmX15cmに収めなければなりません...
・交差点、丁字路、直角コーナーについては、差し掛かった...
距離のみで判定してはいけません。
*ロッボトについて [#f4d447b5]
**概形 [#r0397754]
#ref(./senn2.jpg,10%,a)
15cm四方の枠内に収めなければならないという条件が存在した...
**車輪 [#pd458f58]
#ref(./senn3.jpg,10%,a)
最初は前二輪、後一輪の三輪にしていましたが、後ろにタイヤ...
**センサー [#xc1d8db6]
#ref(./senn1.jpg,10%,a)
センサーが本体から遠すぎたり近すぎたり紙から遠かったりす...
*交差点判断 [#v417694e]
白と黒の中間色より白が一定時間以上続く場合に、交差点と判...
*定数・マクロ [#dcdbd4e7]
最初に明るさの基準値を決めておき、その値から離れ具合によ...
また、場所によって曲がる角度が変化するので、曲がる方向が...
#define THRESHOLD 45
#define go_forward OnFwd(OUT_AC); /...
#define turn_right0 OnFwd(OUT_A);OnRev(OUT_C); /...
#define turn_right1 OnFwd(OUT_A); /...
#define turn_left0 OnRev(OUT_A);OnFwd(OUT_C); /...
#define turn_left1 OnFwd(OUT_C); /...
#define s_up PlaySound(SOUND_UP);
#define s_down PlaySound(SOUND_DOWN);
#define Tmax 29 /...
int t=0; /...
*サブルーチン [#te702616]
直角に左折
sub cross_left(){
s_up;
turn_left0;
until(SENSOR_2 < THRESHOLD -3);
}
直角に右折
sub cross_right(){
s_up;
turn_left0;
until(SENSOR_2 < THRESHOLD -3);
}
その場で一時停止
sub cross_stop(){
Off(OUT_AC);Wait(100);
s_down;
}
交差点を直進
sub cross_straight(){
turn_right1;
Wait(20);
go_foward;
until(SENSOR_2 < THRESHOLD -3);
turn_right1;
until(SENSOR_2 < THRESHOLD +8);
}
n秒間ラインの左側をたどる
void linetrace1(int s){
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(2);
while(FastTimer(2)<s){
if(SENSOR_2 < THRESHOLD -8){
turn_left0;
}else if(SENSOR_2 < THRESHOLD -3){
turn_left1;
}else if(SENSOR_2 < THRESHOLD +3){
go_forward;
}else if(SENSOR_2 < THRESHOLD +8){
turn_right1;
}else {
turn_right0;
}
ClearTimer(0);
}
}
*プログラミングについて [#c422dabd]
「t==0」のとき、最初の「if」の中に入ります。Fで交差点を見...
このとき「t==1」になりますが、「if」の動作が終わるまで「i...
そして「cross_left」に移ります。 「cross_left」が終わると...
#define go_straight OnFwd(OUT_AC); Wait(25); Off(OUT_AC...
#define cross_right Off(OUT_AC); Wait(3); OnFwd(OUT_A )...
#define turn_right Off(OUT_AC); Wait(3); OnFwd(OUT_A); ...
#define right_angle OnFwd(OUT_AC); Wait(25); Off(OUT_AC...
#define cross_left Off(OUT_AC); Wait(3); OnFwd(OUT_C); ...
#define turn_left Off(OUT_AC); Wait(3); OnFwd(OUT_C); O...
#define left_angle OnFwd(OUT_AC); Wait(25); Off(OUT_AC)...
task main(){
SetSensor(SENSOR_2,SENSOR_LIGHT);
int a=0;
while( a < 5 ){
if(SENSOR_2 >= 50){
turn_left;
} else if(SENSOR_2 >= 45 ){
cross_left;
} else if(SENSOR_2 >= 37 ){
cross_right;
} else if(SENSOR_2 >= 30 ){
turn_right;
a++;
}
} //ここまでE
PlaySound(SOUND_UP);
right_angle;
int b=0;
while( b < 4 ){
if(SENSOR_2 >= 50){
turn_left;
} else if(SENSOR_2 >= 45 ){
cross_left;
} else if(SENSOR_2 >= 40 ){
cross_right;
} else if(SENSOR_2 >= 30 ){
turn_right;
b++;
}
} //ここまでP
Off(OUT_AC);
Wait(100);
PlaySound(SOUND_DOWN);
left_angle;
int c=0;
while( c < 4 ){
if(SENSOR_2 >= 50){
turn_right;
} else if(SENSOR_2 >= 45 ){
cross_right;
} else if(SENSOR_2 >= 40 ){
cross_left;
} else if(SENSOR_2 >= 30 ){
turn_left;
c++;
}
} //ここまでQ
go_straight;
int d=0;
while( d < 4 ){
if(SENSOR_2 >= 50){
turn_right;
} else if(SENSOR_2 >= 45 ){
cross_right;
} else if(SENSOR_2 >= 40 ){
cross_left;
} else if(SENSOR_2 >= 30 ){
turn_left;
d++;
}
} //ここまでR
go_straight;
int e=0;
while( e < 5 ){
if(SENSOR_2 >= 50){
turn_left;
} else if(SENSOR_2 >= 45 ){
cross_left;
} else if(SENSOR_2 >= 37 ){
cross_light;
} else if(SENSOR_2 >= 30 ){
turn_right;
e++;
}
} //ここまでT
PlaySound(SOUND_DOWN);
go_straight;
int f=0;
while( f < 6 ){
if(SENSOR_2 >= 50){
turn_left;
} else if(SENSOR_2 >= 45 ){
cross_left;
} else if(SENSOR_2 >= 37 ){
cross_right;
} else if(SENSOR_2 >= 30 ){
turn_right;
f++;
}
} //一周してTに戻る
PlaySound(SOUND_DOWN);
go_straight;
int g=0;
while( g < 11 ){
if(SENSOR_2 >= 50){
turn_left;
} else if(SENSOR_2 >= 45 ){
cross_left;
} else if(SENSOR_2 >= 37 ){
cross_right;
} else if(SENSOR_2 >= 30 ){
turn_right;
g++;
}
} //ここまでH
PlaySound(SOUND_UP);
right_angle;
int h=0;
while( h < 60 ){
if(SENSOR_2 >= 50){
turn_left;
} else if(SENSOR_2 >= 45 ){
cross_left;
} else if(SENSOR_2 >= 37 ){
cross_right;
} else if(SENSOR_2 >= 30 ){
turn_right;
h++;
}
} //ここまでG
PlaySound(SOUND_UP);
right_angle;
int i=0;
while( i < 3 ){
if(SENSOR_2 >= 50){
turn_left;
} else if(SENSOR_2 >= 45 ){
cross_left;
} else if(SENSOR_2 >= 37 ){
cross_right;
} else if(SENSOR_2 >= 30 ){
turn_right;
i++;
}
} //ここまでS
PlaySound(SOUND_DOWN);
Off(OUT_AC);
Wait(100);
left_angle;
int j=0;
while( j < 4 ){
if(SENSOR_2 >= 50){
turn_right;
} else if(SENSOR_2 >= 45 ){
cross_right;
} else if(SENSOR_2 >= 40 ){
cross_left;
} else if(SENSOR_2 >= 30 ){
turn_left;
j++;
}
} //ここまでP
PlaySound(SOUND_UP);
go_straight;
int k=0;
while( k < 4 ){
if(SENSOR_2 >= 50){
turn_right;
} else if(SENSOR_2 >= 45 ){
cross_right;
} else if(SENSOR_2 >= 40 ){
cross_left;
} else if(SENSOR_2 >= 30 ){
turn_left;
k++;
}
} //ここまでQ
PlaySound(SOUND_UP);
go_straight;
int l=0;
while( l < 5 ){
if(SENSOR_2 >= 50){
turn_left;
} else if(SENSOR_2 >= 45 ){
cross_left;
} else if(SENSOR_2 >= 37 ){
cross_right;
} else if(SENSOR_2 >= 30 ){
turn_right;
l++;
}
} //ここまでF
PlaySound(SOUND_UP);
right_angle;
int m=0;
while( m < 10 ){
if(SENSOR_2 >= 50){
turn_left;
} else if(SENSOR_2 >= 45 ){
cross_left;
} else if(SENSOR_2 >= 37){
cross_right;
} else if(SENSOR_2 >= 30 ){
turn_right;
m++;
}
} //スタート地点に戻る
Off(OUT_AC);
PlaySound(SOUND_DOWN);
} //停止して終了
* 結果 [#g5b4d5d4]
前回の課題同様上手くいく時と上手くいかない時がありました...
ページ名: