2013b/Member/dtb/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
index
#contents
*ロボットの説明 [#l0ebd109]
-ロボットのタイヤにはキャタピラを使用することで頑丈にしよ...
&ref(2013b/Member/dtb/Mission2/zentai.jpg,100%,ロボットの...
&ref(2013b/Member/dtb/Mission2/hasami.jpg,100%,ハサミ);
-缶を上に持ち上げるため、地面に垂直な方向に動く動作をする...
&ref(2013b/Member/dtb/Mission2/erebe.jpg,100%,エレベータ);
-地面の方に向いている光センサー2つがライントレース用であ...
&ref(2013b/Member/dtb/Mission2/hikari.jpg,100%,光センサー);
*コース説明 [#z4af8016]
&ref(2013b/Member/dtb/Mission2/VAN.gif,100%,地図);
-ロボットが走る順番は(細線)赤→水色→ピンク→(太線)緑→紫→黄...
-1〜6までの数字はこのロボットが取ろうとしている缶の位置...
**ライントレース [#sc5ea1e0]
-光センサーを二つでライントレースをする。
({左の光センサーが判断した色,右の光センサーが判断した色}→...
**缶の持ち運び [#w8cffb3e]
&ref(2013b/Member/dtb/Mission2/kan_14.jpg,100%,缶の動き);
-この間はエレベータが1秒上がり、1秒エレベータのモーター...
&ref(2013b/Member/dtb/Mission2/kan_25.jpg,100%,缶の動き);
-この間もエレベータが1秒上がり、1秒エレベータのモーター...
&ref(2013b/Member/dtb/Mission2/kan_36.jpg,100%,缶の動き);
-後は3つ重なった缶を引きずりながらゴールまで運ぶだけ。
*メッセージの送受信のやり方 [#tc1f7016]
-(車体の方のRCXをRCX_1、ハサミ&エレベータの方のRCXをRCX_...
*プログラム [#n881418c]
**車体用のプログラム [#s2578c0f]
#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_...
#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);sen...
#define STEP 1 //ライントレースで判断された動作を0.0...
#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つ目の缶を持ち上げる動作をもうひとつの...
#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(<...
}
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(<...
}
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; ...
}
**ハサミ&エレベータのプログラム [#tfe7baf2]
#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目の缶を...
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(O...
}
}
**プログラムの補強説明 [#f1410628]
-車体用のプログラム
--nCrossという関数はロボットが走るコースを複数に分けプロ...
--CROSS(t,p,q)のtは前進する時間、pは左旋回する時間、q...
-ハサミ&エレベータ用のプログラム
--nという関数はHOLD or TUMU_UPというメッセージが送られた...
--エレベータが1秒上がり、1秒エレベータのモーターを止める...
*この講義の反省と感想 [#s6884e1e]
-ロボットの製作に時間をかけすぎたのが一番の反省点です。前...
終了行:
index
#contents
*ロボットの説明 [#l0ebd109]
-ロボットのタイヤにはキャタピラを使用することで頑丈にしよ...
&ref(2013b/Member/dtb/Mission2/zentai.jpg,100%,ロボットの...
&ref(2013b/Member/dtb/Mission2/hasami.jpg,100%,ハサミ);
-缶を上に持ち上げるため、地面に垂直な方向に動く動作をする...
&ref(2013b/Member/dtb/Mission2/erebe.jpg,100%,エレベータ);
-地面の方に向いている光センサー2つがライントレース用であ...
&ref(2013b/Member/dtb/Mission2/hikari.jpg,100%,光センサー);
*コース説明 [#z4af8016]
&ref(2013b/Member/dtb/Mission2/VAN.gif,100%,地図);
-ロボットが走る順番は(細線)赤→水色→ピンク→(太線)緑→紫→黄...
-1〜6までの数字はこのロボットが取ろうとしている缶の位置...
**ライントレース [#sc5ea1e0]
-光センサーを二つでライントレースをする。
({左の光センサーが判断した色,右の光センサーが判断した色}→...
**缶の持ち運び [#w8cffb3e]
&ref(2013b/Member/dtb/Mission2/kan_14.jpg,100%,缶の動き);
-この間はエレベータが1秒上がり、1秒エレベータのモーター...
&ref(2013b/Member/dtb/Mission2/kan_25.jpg,100%,缶の動き);
-この間もエレベータが1秒上がり、1秒エレベータのモーター...
&ref(2013b/Member/dtb/Mission2/kan_36.jpg,100%,缶の動き);
-後は3つ重なった缶を引きずりながらゴールまで運ぶだけ。
*メッセージの送受信のやり方 [#tc1f7016]
-(車体の方のRCXをRCX_1、ハサミ&エレベータの方のRCXをRCX_...
*プログラム [#n881418c]
**車体用のプログラム [#s2578c0f]
#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_...
#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);sen...
#define STEP 1 //ライントレースで判断された動作を0.0...
#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つ目の缶を持ち上げる動作をもうひとつの...
#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(<...
}
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(<...
}
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; ...
}
**ハサミ&エレベータのプログラム [#tfe7baf2]
#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目の缶を...
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(O...
}
}
**プログラムの補強説明 [#f1410628]
-車体用のプログラム
--nCrossという関数はロボットが走るコースを複数に分けプロ...
--CROSS(t,p,q)のtは前進する時間、pは左旋回する時間、q...
-ハサミ&エレベータ用のプログラム
--nという関数はHOLD or TUMU_UPというメッセージが送られた...
--エレベータが1秒上がり、1秒エレベータのモーターを止める...
*この講義の反省と感想 [#s6884e1e]
-ロボットの製作に時間をかけすぎたのが一番の反省点です。前...
ページ名: