2013b/Member/wei/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
目次
#contents
*ロボットの説明 [#x0902b6e]
#ls2
-ロボットは安定するためにロボットのタイヤにはキャタピラに...
-写真
&ref(./C:\Users\wangsang\Desktop\IMG_2911.JPG,100%,robotto)
-缶を上に持つために垂直であるエレベータをした、またエレベ...
-ライントレスについて、光センサーを二つでライントレースを...
*コース攻略 [#h543b21e]
-ロボットが走る順番は(細線)赤→水色→ピンク→(太線)緑→紫→黄...
-1〜6までの数字はこのロボットが取ろうとしている缶の位置...
*プログラム [#s2c3add9]
-車体の説明
#define left_kuro 28//黒とみなす最大の値
#define right_kuro 34//黒とみなす最大の値
#define left_sen 38//線上とみなす
#define right_sen 43//線上とみなす
#define sekkin 40//缶が接近したときの値
#define HIPOWER 7//強い力
#define LOWPOWER 5//弱い力
#define set_power_H SetPower(OUT_AC,HIPOWER);//モーターを...
#define set_power_L SetPower(OUT_AC,LOWPOWER);//モーター...
#define senkai_left set_power_L;OnRev(OUT_A);OnFwd(OUT_C)...
#define senkai_right set_power_L;OnRev(OUT_C);OnFwd(OUT_A...
#define go_forward set_power_H;OnFwd(OUT_AC);//前進
#define back set_power_L;OnRev(OUT_AC);//後退
#define CROSS(t,p,q) set_power_L;go_forward;Wait(t);senk...
#define STEP 1 //ライントレースで判断された動作を0.01...
#define SAIDAI 3 //T字路や交差点付近である条件に3連続で...
#define short_break Off(OUT_AC);Wait(80);//小休憩
#define counter3 PlaySound(SOUND_CLICK);//3回鳴ると交差点...
#define GO 1//もうひとつのRCXからこのメッセージが送られて...
#define HOLD 2//1つ目の缶を持ち上げる動作をもうひとつのR...
#define TUMU_UP 3//1つ目の缶を2つ目の缶に積んで2つ目の...
#define TUMU 4//1,2目の缶を3つ目の缶に積んで3つ目の缶...
#define HASAMI 5//ハサミを広げる動作をもうひとつのRCXに送...
sub line_race() //普通の...
{
if(SENSOR_1<=left_kuro){
if(SENSOR_3<=right_kuro){
go_forward;}
else if(SENSOR_3<=right_sen){
senkai_left;}
else{senkai_left;}}
else if(SENSOR_1<=left_sen){
if(SENSOR_3<=right_kuro){
senkai_right;}
else if(SENSOR_3<=right_sen){
go_forward;}
else{senkai_left;}}
else{
if(SENSOR_3<=right_kuro){
senkai_right;}
else if(SENSOR_3<=right_sen){
senkai_right;}
else{go_forward;}}Wait(STEP);
}
sub before_cross_line_1() //T字路付近の黒...
{
int nOnline=0;
while (nOnline < SAIDAI){
if(SENSOR_3<=right_kuro){
if(SENSOR_1<=left_kuro){
go_forward;}
else if(SENSOR_1<=left_sen){
senkai_right;}
else{senkai_right;}
nOnline++;
}else{
if(SENSOR_3<=right_sen){
if(SENSOR_1<=left_kuro){
senkai_left;}
else if(SENSOR_1<=left_sen){
go_forward;}
else{senkai_right;}}
else{
if(SENSOR_1<=left_kuro){
senkai_left}
else if(SENSOR_1<=left_sen){
senkai_left;}
else{go_forward;}}
nOnline=0;}
Wait(STEP);
} //while(<s...
}
sub before_cross_line_2() //T字路付近の...
{
int nOnline=0;
while (nOnline < SAIDAI){
if(SENSOR_1<=left_kuro){
if(SENSOR_3<=right_kuro){
go_forward;}
else if(SENSOR_3<=right_sen){
senkai_left;}
else{senkai_left;}
nOnline++;
}else{
if(SENSOR_1<=left_sen){
if(SENSOR_3<=right_kuro){
senkai_right;}
else if(SENSOR_3<=right_sen){
go_forward;}
else{senkai_left;}}
else{
if(SENSOR_3<=right_kuro){
senkai_right;}
else if(SENSOR_3<=right_sen){
senkai_right;}
else{go_forward;}}
nOnline=0;}
Wait(STEP);
} //while(<s...
}
sub before_cross_line_3() //T字路or十字路付近の...
{
int nOnline=0;
while (nOnline < SAIDAI){
if(SENSOR_1<=left_kuro&&SENSOR_3<=right_kuro){
go_forward;nOnline++;}
else if(SENSOR_1<=left_sen&&SENSOR_3<=right_sen){
go_forward;nOnline++;}
else if(SENSOR_1<=left_kuro){
if(SENSOR_3<=right_sen){
senkai_left;}
else{senkai_left;}nOnline==0;}
else if(SENSOR_1<=left_sen){
if(SENSOR_3<=right_kuro){
senkai_right;}
else{senkai_left;}nOnline==0;}
else{
if(SENSOR_3<=right_kuro){
senkai_right;}
else if(SENSOR_3<=right_sen){
senkai_right;}
else{go_forward;}nOnline==0;}
Wait(STEP);
} //while(...
}
task main(){
SetSensor(SENSOR_1,SENSOR_LIGHT);//左側の光センサー
SetSensor(SENSOR_2,SENSOR_LIGHT);//缶の判断用
SetSensor(SENSOR_3,SENSOR_LIGHT);//右側の光センサー
int nCross=0;
while(nCross<=8){
if(nCross==0){
senkai_right;Wait(50);
go_forward;
until(SENSOR_3<=left_sen);
senkai_left;Wait(60); ...
while(SENSOR_2>=sekkin){
line_race();}
Off(OUT_AC);
while(Message() != GO){SendMessage(HOLD);Wait(40);} ...
senkai_left;Wait(410);
nCross++;
}
else if(nCross==1){
while(SENSOR_2>=sekkin){
line_race();}
Off(OUT_AC);
while(Message() != GO){SendMessage(TUMU_UP);Wait(40)...
ClearTimer(0);
while(FastTimer(0)<300){
line_race();}
before_cross_line_1();
CROSS(50,0,0);
nCross++;
}
else if(nCross==2){
while(SENSOR_2>=sekkin){
line_race();}
Off(OUT_AC);
while(Message() != GO){SendMessage(TUMU);Wait(40);} ...
ClearTimer(0);
while(FastTimer(0)<830){
line_race();}
before_cross_line_3();
CROSS(150,0,0);
senkai_right;Wait(130);
Off(OUT_AC);
while(Message() != GO){SendMessage(HASAMI);Wait(40);...
back;Wait(100);
senkai_right;Wait(235);
go_forward;Wait(150);
nCross++;
}
else if(nCross==3){
ClearTimer(0);
while(FastTimer(0)<1000){
line_race();}
before_cross_line_2();
CROSS(50,150,0);
nCross++;
}
else if(nCross==4){
ClearTimer(0);
while(FastTimer(0)<200){
line_race();}
before_cross_line_3();
CROSS(50,0,150);
nCross++;
}
else if(nCross==5){
while(SENSOR_2>=sekkin){
line_race();}
Off(OUT_AC);
while(Message() != GO){SendMessage(HOLD);Wait(40);} ...
ClearTimer(0);
while(FastTimer(0)<1600){
line_race();}
before_cross_line_3();
go_forward;Wait(50);
CROSS(50,0,0);
nCross++;
}
else if(nCross==6){
while(SENSOR_2>=sekkin){
line_race();}
Off(OUT_AC);
while(Message() != GO){SendMessage(TUMU_UP);Wait(40)...
while(SENSOR_2>=sekkin){
line_race();}
Off(OUT_AC);
while(Message() != GO){SendMessage(TUMU);Wait(40);} ...
ClearTimer(0);
while(FastTimer(0)<300){
line_race();}
before_cross_line_1();
go_forward;Wait(50);
senkai_right;Wait(150);
CROSS(50,0,150);
nCross++;
}
else if(nCross==7){
ClearTimer(0);
while(FastTimer(0)<200){
line_race();}
before_cross_line_3();
go_forward;Wait(50);
senkai_right;Wait(150);
CROSS(50,0,150);
nCross++;
}
else if(nCross==8){
ClearTimer(0);
while(FastTimer(0)<1000){
line_race();}
before_cross_line_3();
CROSS(50,0,0);
senkai_right;Wait(100);
Off(OUT_AC);
while(Message() != GO){SendMessage(HASAMI);Wait(40);...
back;Wait(500);
nCross++;
}
} ...
stop main; ...
}
-ハサミ&エレベータのプログラム
#define GO 1//このメッセージを送るともう一つのRCXが再始動...
#define HOLD 2//もう一つのRCXからこのメッセージが送られる...
#define TUMU_UP 3//もう一つのRCXからこのメッセージが送ら...
#define TUMU 4//もう一つのRCXからこのメッセージが送られる...
#define HASAMI 5//もう一つのRCXからこのメッセージが送られ...
#define hasamu OnRev(OUT_A);Wait(50);Off(OUT_A);//ハサミ...
#define hirogeru OnFwd(OUT_A);Wait(50);//ハサミを広げる
#define up OnRev(OUT_C);Wait(150);Off(OUT_C);//エレベータ...
#define down(t) OnFwd(OUT_C);Wait(t);Off(OUT_C);//エレベ...
#define go_sin PlaySound(SOUND_UP);//goというサインを出し...
sub send_go(){ //goというサ...
ClearTimer(0);
while(FastTimer(0)<=200){SendMessage(GO);Wait(5);}
}
task main(){
int n=1;
while(true){
ClearMessage();
SetPower(OUT_A,4);
SetPower(OUT_C,5);
if(Message() == HOLD){ //1つ目の缶を持ち...
n=0;
hasamu;
up;
go_sin;
send_go();
}
else if(Message() == TUMU_UP){ //1つ目の缶を2つ目...
n=0;
down(20);
hirogeru;
down(130);
hasamu;
up;
go_sin;
send_go();
}
else if(Message() == TUMU){ //1,2目の缶を3...
down(20);
hirogeru;
down(130);
hasamu;
go_sin;
send_go();
n=1;
}
else if(Message() == HASAMI){ //ハサミを広げる
hirogeru;
go_sin;
send_go();
n=1;
}
if(n==0){SetPower(OUT_C,1);OnRev(OUT_C);Wait(100);Off(OU...
}
}
↑
*この講義の反省と感想 [#z1fb2aca]
ロボットを作る過程はみんな一緒に協力する、自分自身に対し...
終了行:
目次
#contents
*ロボットの説明 [#x0902b6e]
#ls2
-ロボットは安定するためにロボットのタイヤにはキャタピラに...
-写真
&ref(./C:\Users\wangsang\Desktop\IMG_2911.JPG,100%,robotto)
-缶を上に持つために垂直であるエレベータをした、またエレベ...
-ライントレスについて、光センサーを二つでライントレースを...
*コース攻略 [#h543b21e]
-ロボットが走る順番は(細線)赤→水色→ピンク→(太線)緑→紫→黄...
-1〜6までの数字はこのロボットが取ろうとしている缶の位置...
*プログラム [#s2c3add9]
-車体の説明
#define left_kuro 28//黒とみなす最大の値
#define right_kuro 34//黒とみなす最大の値
#define left_sen 38//線上とみなす
#define right_sen 43//線上とみなす
#define sekkin 40//缶が接近したときの値
#define HIPOWER 7//強い力
#define LOWPOWER 5//弱い力
#define set_power_H SetPower(OUT_AC,HIPOWER);//モーターを...
#define set_power_L SetPower(OUT_AC,LOWPOWER);//モーター...
#define senkai_left set_power_L;OnRev(OUT_A);OnFwd(OUT_C)...
#define senkai_right set_power_L;OnRev(OUT_C);OnFwd(OUT_A...
#define go_forward set_power_H;OnFwd(OUT_AC);//前進
#define back set_power_L;OnRev(OUT_AC);//後退
#define CROSS(t,p,q) set_power_L;go_forward;Wait(t);senk...
#define STEP 1 //ライントレースで判断された動作を0.01...
#define SAIDAI 3 //T字路や交差点付近である条件に3連続で...
#define short_break Off(OUT_AC);Wait(80);//小休憩
#define counter3 PlaySound(SOUND_CLICK);//3回鳴ると交差点...
#define GO 1//もうひとつのRCXからこのメッセージが送られて...
#define HOLD 2//1つ目の缶を持ち上げる動作をもうひとつのR...
#define TUMU_UP 3//1つ目の缶を2つ目の缶に積んで2つ目の...
#define TUMU 4//1,2目の缶を3つ目の缶に積んで3つ目の缶...
#define HASAMI 5//ハサミを広げる動作をもうひとつのRCXに送...
sub line_race() //普通の...
{
if(SENSOR_1<=left_kuro){
if(SENSOR_3<=right_kuro){
go_forward;}
else if(SENSOR_3<=right_sen){
senkai_left;}
else{senkai_left;}}
else if(SENSOR_1<=left_sen){
if(SENSOR_3<=right_kuro){
senkai_right;}
else if(SENSOR_3<=right_sen){
go_forward;}
else{senkai_left;}}
else{
if(SENSOR_3<=right_kuro){
senkai_right;}
else if(SENSOR_3<=right_sen){
senkai_right;}
else{go_forward;}}Wait(STEP);
}
sub before_cross_line_1() //T字路付近の黒...
{
int nOnline=0;
while (nOnline < SAIDAI){
if(SENSOR_3<=right_kuro){
if(SENSOR_1<=left_kuro){
go_forward;}
else if(SENSOR_1<=left_sen){
senkai_right;}
else{senkai_right;}
nOnline++;
}else{
if(SENSOR_3<=right_sen){
if(SENSOR_1<=left_kuro){
senkai_left;}
else if(SENSOR_1<=left_sen){
go_forward;}
else{senkai_right;}}
else{
if(SENSOR_1<=left_kuro){
senkai_left}
else if(SENSOR_1<=left_sen){
senkai_left;}
else{go_forward;}}
nOnline=0;}
Wait(STEP);
} //while(<s...
}
sub before_cross_line_2() //T字路付近の...
{
int nOnline=0;
while (nOnline < SAIDAI){
if(SENSOR_1<=left_kuro){
if(SENSOR_3<=right_kuro){
go_forward;}
else if(SENSOR_3<=right_sen){
senkai_left;}
else{senkai_left;}
nOnline++;
}else{
if(SENSOR_1<=left_sen){
if(SENSOR_3<=right_kuro){
senkai_right;}
else if(SENSOR_3<=right_sen){
go_forward;}
else{senkai_left;}}
else{
if(SENSOR_3<=right_kuro){
senkai_right;}
else if(SENSOR_3<=right_sen){
senkai_right;}
else{go_forward;}}
nOnline=0;}
Wait(STEP);
} //while(<s...
}
sub before_cross_line_3() //T字路or十字路付近の...
{
int nOnline=0;
while (nOnline < SAIDAI){
if(SENSOR_1<=left_kuro&&SENSOR_3<=right_kuro){
go_forward;nOnline++;}
else if(SENSOR_1<=left_sen&&SENSOR_3<=right_sen){
go_forward;nOnline++;}
else if(SENSOR_1<=left_kuro){
if(SENSOR_3<=right_sen){
senkai_left;}
else{senkai_left;}nOnline==0;}
else if(SENSOR_1<=left_sen){
if(SENSOR_3<=right_kuro){
senkai_right;}
else{senkai_left;}nOnline==0;}
else{
if(SENSOR_3<=right_kuro){
senkai_right;}
else if(SENSOR_3<=right_sen){
senkai_right;}
else{go_forward;}nOnline==0;}
Wait(STEP);
} //while(...
}
task main(){
SetSensor(SENSOR_1,SENSOR_LIGHT);//左側の光センサー
SetSensor(SENSOR_2,SENSOR_LIGHT);//缶の判断用
SetSensor(SENSOR_3,SENSOR_LIGHT);//右側の光センサー
int nCross=0;
while(nCross<=8){
if(nCross==0){
senkai_right;Wait(50);
go_forward;
until(SENSOR_3<=left_sen);
senkai_left;Wait(60); ...
while(SENSOR_2>=sekkin){
line_race();}
Off(OUT_AC);
while(Message() != GO){SendMessage(HOLD);Wait(40);} ...
senkai_left;Wait(410);
nCross++;
}
else if(nCross==1){
while(SENSOR_2>=sekkin){
line_race();}
Off(OUT_AC);
while(Message() != GO){SendMessage(TUMU_UP);Wait(40)...
ClearTimer(0);
while(FastTimer(0)<300){
line_race();}
before_cross_line_1();
CROSS(50,0,0);
nCross++;
}
else if(nCross==2){
while(SENSOR_2>=sekkin){
line_race();}
Off(OUT_AC);
while(Message() != GO){SendMessage(TUMU);Wait(40);} ...
ClearTimer(0);
while(FastTimer(0)<830){
line_race();}
before_cross_line_3();
CROSS(150,0,0);
senkai_right;Wait(130);
Off(OUT_AC);
while(Message() != GO){SendMessage(HASAMI);Wait(40);...
back;Wait(100);
senkai_right;Wait(235);
go_forward;Wait(150);
nCross++;
}
else if(nCross==3){
ClearTimer(0);
while(FastTimer(0)<1000){
line_race();}
before_cross_line_2();
CROSS(50,150,0);
nCross++;
}
else if(nCross==4){
ClearTimer(0);
while(FastTimer(0)<200){
line_race();}
before_cross_line_3();
CROSS(50,0,150);
nCross++;
}
else if(nCross==5){
while(SENSOR_2>=sekkin){
line_race();}
Off(OUT_AC);
while(Message() != GO){SendMessage(HOLD);Wait(40);} ...
ClearTimer(0);
while(FastTimer(0)<1600){
line_race();}
before_cross_line_3();
go_forward;Wait(50);
CROSS(50,0,0);
nCross++;
}
else if(nCross==6){
while(SENSOR_2>=sekkin){
line_race();}
Off(OUT_AC);
while(Message() != GO){SendMessage(TUMU_UP);Wait(40)...
while(SENSOR_2>=sekkin){
line_race();}
Off(OUT_AC);
while(Message() != GO){SendMessage(TUMU);Wait(40);} ...
ClearTimer(0);
while(FastTimer(0)<300){
line_race();}
before_cross_line_1();
go_forward;Wait(50);
senkai_right;Wait(150);
CROSS(50,0,150);
nCross++;
}
else if(nCross==7){
ClearTimer(0);
while(FastTimer(0)<200){
line_race();}
before_cross_line_3();
go_forward;Wait(50);
senkai_right;Wait(150);
CROSS(50,0,150);
nCross++;
}
else if(nCross==8){
ClearTimer(0);
while(FastTimer(0)<1000){
line_race();}
before_cross_line_3();
CROSS(50,0,0);
senkai_right;Wait(100);
Off(OUT_AC);
while(Message() != GO){SendMessage(HASAMI);Wait(40);...
back;Wait(500);
nCross++;
}
} ...
stop main; ...
}
-ハサミ&エレベータのプログラム
#define GO 1//このメッセージを送るともう一つのRCXが再始動...
#define HOLD 2//もう一つのRCXからこのメッセージが送られる...
#define TUMU_UP 3//もう一つのRCXからこのメッセージが送ら...
#define TUMU 4//もう一つのRCXからこのメッセージが送られる...
#define HASAMI 5//もう一つのRCXからこのメッセージが送られ...
#define hasamu OnRev(OUT_A);Wait(50);Off(OUT_A);//ハサミ...
#define hirogeru OnFwd(OUT_A);Wait(50);//ハサミを広げる
#define up OnRev(OUT_C);Wait(150);Off(OUT_C);//エレベータ...
#define down(t) OnFwd(OUT_C);Wait(t);Off(OUT_C);//エレベ...
#define go_sin PlaySound(SOUND_UP);//goというサインを出し...
sub send_go(){ //goというサ...
ClearTimer(0);
while(FastTimer(0)<=200){SendMessage(GO);Wait(5);}
}
task main(){
int n=1;
while(true){
ClearMessage();
SetPower(OUT_A,4);
SetPower(OUT_C,5);
if(Message() == HOLD){ //1つ目の缶を持ち...
n=0;
hasamu;
up;
go_sin;
send_go();
}
else if(Message() == TUMU_UP){ //1つ目の缶を2つ目...
n=0;
down(20);
hirogeru;
down(130);
hasamu;
up;
go_sin;
send_go();
}
else if(Message() == TUMU){ //1,2目の缶を3...
down(20);
hirogeru;
down(130);
hasamu;
go_sin;
send_go();
n=1;
}
else if(Message() == HASAMI){ //ハサミを広げる
hirogeru;
go_sin;
send_go();
n=1;
}
if(n==0){SetPower(OUT_C,1);OnRev(OUT_C);Wait(100);Off(OU...
}
}
↑
*この講義の反省と感想 [#z1fb2aca]
ロボットを作る過程はみんな一緒に協力する、自分自身に対し...
ページ名: