2017a/Member/fukupon/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2017a/Member]]
#contents
*課題について [#ecb7b652]
#ref(./2017a-mission2.png,11.8KB ,image/jpeg)
上の図にあるコースを
?Aスタート
?E直進
?F(SOUND_UP)
?Q一時停止(SOUND_DOWN)&左折
?R直進(SOUND_UP)
?S左折(SOUND_UP)
?G(SOUND_UP)
?H(SOUND_UP)
?T一時停止(SOUND_DOWN)&直進
?T一時停止(SOUND_DOWN)&直進
?R一時停止(SOUND_DOWN)&左折
?S直進(SOUND_UP)
?P左折(SOUND_UP)
?E一時停止(SOUND_DOWN)&左折
?A停止(SOUND_DOWN)
といった道順で進むようなロボットを作ること。
ただし、以下の条件を満たさなければならない。
・なるべく速く正確に動くロボットになるように工夫するこ...
・一時停止の交差点および丁字路ではSOUND_DOWNを鳴らした...
・直角コーナーおよび一時停止が不要は丁字路ではSOUND_UP...
・ロボットはサイズは、15cm四方以内とする(高さは無制限...
・交差点、丁字路、直角コーナーについては、差し掛かった...
*ロボットについて [#q1233b12]
**全体図 [#b59deb95]
ロボット本体は15?四方内に収めるという制限があったので、な...
#ref(./IMG_0128.JPG,134.7KB ,image/jpeg)
#ref(./IMG_0129.JPG,125.6KB ,image/jpeg)
**車輪部分 [#s0f2e5bf]
初めは前二輪、後ろ一輪の三輪にしていたが、後ろにタイヤを...
また、小回りが利くように両側の車輪を近くなる様にしてみた。
#ref(./IMG_0132.JPG,104.7KB ,image/jpeg)
**センサー部分 [#a2016db7]
センサーの位置で動きが変わったりするので、本体から遠すぎ...
#ref(./IMG_0133.JPG,100.4KB ,image/jpeg)
*プログラムについて [#n8bb806b]
前回は、マクロなどを定義しなかったせいでプログラムが長く...
**定数・マクロ [#i8468af5]
あらかじめ明るさの基準値を決めておいて、その値からいくつ...
また、曲がる場所によって角度が変わるので、曲がる方向が同...
#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; /...
**サブルーチン [#c0601493]
一時停止しなければならないところでの動作。
sub cross_stop(){
Off(OUT_AC);Wait(100);
s_down;
}
直角に左折するところでの動作。
sub cross_left(){
s_up;
turn_left0;
until(SENSOR_2 < THRESHOLD -3);
}
??において、交差点を直進するためのもの。
sub cross_straight(){
turn_right1;
Wait(20);
go_forward;
until(SENSOR_2 < THRESHOLD -3);
turn_right1;
until(SENSOR_2 < THRESHOLD +8);
}
Tmaxを超えるまでラインの左側をなぞる。
sub linetrace0(){
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0);
while(FastTimer(0)<Tmax){
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; //濃い...
}
if(SENSOR_2 < THRESHOLD -8){
ClearTimer(0);
} //濃い...
}
t+=1; //Tmax...
}
s秒間、時間を計らずにラインの左側をたどる
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);
}
}
細かいところをきれいにたどれるように、そこだけは特別にプ...
sub linetrace_2(){
SetSensor(SENSOR_2,SENSOR_LIGHT);
while(FastTimer(0)<26){
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;
}
if(SENSOR_2 < THRESHOLD -8){
ClearTimer(0);
}
}
t+=1;
}
**プログラム [#rc5bcfc9]
「t==0」のとき、最初の「if」の中に入る。交差点を見つける...
このとき「t==1」になるが、「if」の動作が終わるまで「if」...
そして「cross_left」に移る。 「cross_left」が終わると「t=...
(何度試しても「task mainが定義されていない」となってしま...
task main()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0);
while(<=13){
if(t==0){
linetrace1(6000); ...
linetrace0();
cross_left(); ...
}else if((t==1)||(t==8)||(t==11)){
linetrace0();
cross_stop();
turn_left0;until(SENSOR_2 < THRESHOLD +3); ...
}else if((t==2)||(t==9)){
linetrace1(500);
linetrace2();
s_up;
cross_straight(); ...
}else if((t==3)||(t==10)){
linetrace1(500);
linetrace0();
cross_left(); ...
}else if(t==4){
linetrace0();
cross_left(); ...
}else if(t==5){
linetrace1(4000);
linetrace0();
cross_left();
ClearTimer(0); ...
}else if(t==6){
linetrace0();
cross_stop();
cross_straight(); ...
}else if(t==7){
linetrace1(2000);
linetrace0();
cross_stop();
cross_straight(); ...
}else if(t==12){
linetrace0();
s_down;
Off(OUT_AC); ...
}
}
}
*結果と反省 [#i2e58b0b]
ただ単にラインとレースをするプログラムは簡単に作ることが...
しかし、交差点の判断などのプログラムに関しては、自分一人...
また、課題の内容は前回より単純なものだったが、プログラム...
終了行:
[[2017a/Member]]
#contents
*課題について [#ecb7b652]
#ref(./2017a-mission2.png,11.8KB ,image/jpeg)
上の図にあるコースを
?Aスタート
?E直進
?F(SOUND_UP)
?Q一時停止(SOUND_DOWN)&左折
?R直進(SOUND_UP)
?S左折(SOUND_UP)
?G(SOUND_UP)
?H(SOUND_UP)
?T一時停止(SOUND_DOWN)&直進
?T一時停止(SOUND_DOWN)&直進
?R一時停止(SOUND_DOWN)&左折
?S直進(SOUND_UP)
?P左折(SOUND_UP)
?E一時停止(SOUND_DOWN)&左折
?A停止(SOUND_DOWN)
といった道順で進むようなロボットを作ること。
ただし、以下の条件を満たさなければならない。
・なるべく速く正確に動くロボットになるように工夫するこ...
・一時停止の交差点および丁字路ではSOUND_DOWNを鳴らした...
・直角コーナーおよび一時停止が不要は丁字路ではSOUND_UP...
・ロボットはサイズは、15cm四方以内とする(高さは無制限...
・交差点、丁字路、直角コーナーについては、差し掛かった...
*ロボットについて [#q1233b12]
**全体図 [#b59deb95]
ロボット本体は15?四方内に収めるという制限があったので、な...
#ref(./IMG_0128.JPG,134.7KB ,image/jpeg)
#ref(./IMG_0129.JPG,125.6KB ,image/jpeg)
**車輪部分 [#s0f2e5bf]
初めは前二輪、後ろ一輪の三輪にしていたが、後ろにタイヤを...
また、小回りが利くように両側の車輪を近くなる様にしてみた。
#ref(./IMG_0132.JPG,104.7KB ,image/jpeg)
**センサー部分 [#a2016db7]
センサーの位置で動きが変わったりするので、本体から遠すぎ...
#ref(./IMG_0133.JPG,100.4KB ,image/jpeg)
*プログラムについて [#n8bb806b]
前回は、マクロなどを定義しなかったせいでプログラムが長く...
**定数・マクロ [#i8468af5]
あらかじめ明るさの基準値を決めておいて、その値からいくつ...
また、曲がる場所によって角度が変わるので、曲がる方向が同...
#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; /...
**サブルーチン [#c0601493]
一時停止しなければならないところでの動作。
sub cross_stop(){
Off(OUT_AC);Wait(100);
s_down;
}
直角に左折するところでの動作。
sub cross_left(){
s_up;
turn_left0;
until(SENSOR_2 < THRESHOLD -3);
}
??において、交差点を直進するためのもの。
sub cross_straight(){
turn_right1;
Wait(20);
go_forward;
until(SENSOR_2 < THRESHOLD -3);
turn_right1;
until(SENSOR_2 < THRESHOLD +8);
}
Tmaxを超えるまでラインの左側をなぞる。
sub linetrace0(){
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0);
while(FastTimer(0)<Tmax){
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; //濃い...
}
if(SENSOR_2 < THRESHOLD -8){
ClearTimer(0);
} //濃い...
}
t+=1; //Tmax...
}
s秒間、時間を計らずにラインの左側をたどる
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);
}
}
細かいところをきれいにたどれるように、そこだけは特別にプ...
sub linetrace_2(){
SetSensor(SENSOR_2,SENSOR_LIGHT);
while(FastTimer(0)<26){
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;
}
if(SENSOR_2 < THRESHOLD -8){
ClearTimer(0);
}
}
t+=1;
}
**プログラム [#rc5bcfc9]
「t==0」のとき、最初の「if」の中に入る。交差点を見つける...
このとき「t==1」になるが、「if」の動作が終わるまで「if」...
そして「cross_left」に移る。 「cross_left」が終わると「t=...
(何度試しても「task mainが定義されていない」となってしま...
task main()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0);
while(<=13){
if(t==0){
linetrace1(6000); ...
linetrace0();
cross_left(); ...
}else if((t==1)||(t==8)||(t==11)){
linetrace0();
cross_stop();
turn_left0;until(SENSOR_2 < THRESHOLD +3); ...
}else if((t==2)||(t==9)){
linetrace1(500);
linetrace2();
s_up;
cross_straight(); ...
}else if((t==3)||(t==10)){
linetrace1(500);
linetrace0();
cross_left(); ...
}else if(t==4){
linetrace0();
cross_left(); ...
}else if(t==5){
linetrace1(4000);
linetrace0();
cross_left();
ClearTimer(0); ...
}else if(t==6){
linetrace0();
cross_stop();
cross_straight(); ...
}else if(t==7){
linetrace1(2000);
linetrace0();
cross_stop();
cross_straight(); ...
}else if(t==12){
linetrace0();
s_down;
Off(OUT_AC); ...
}
}
}
*結果と反省 [#i2e58b0b]
ただ単にラインとレースをするプログラムは簡単に作ることが...
しかし、交差点の判断などのプログラムに関しては、自分一人...
また、課題の内容は前回より単純なものだったが、プログラム...
ページ名: