2017b/Member/ryok/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*1.作ったロボット [#q79c0cde]
#ref(2017b/Member/ryok/Mission2/20171227_180018882.jpg,20...
後ろ。青い部分の下に丸いブロックがあることでタイヤを2個に...
#ref(2017b/Member/ryok/Mission2/20171227_180027716.jpg,15...
正面。手前に進む。センサは進行方向に向かって右側に。四角...
#ref(2017b/Member/ryok/Mission2/20171227_180036039.jpg,20...
横。ギアの部分で四角い枠を上げ下げする。
4輪でのS字カーブがなかなか上手くいかなかったので、小回り...
センサはロボットの正面右側に付けた。(写真「正面」)
また、四角い枠を動かしてコップを運ぶ。(写真「横」「正面」)
*2.書いたプログラム [#tc5ff7de]
#define THRESHOLD 45
#define HIPOWER 7 //直線用のパワー
#define LOWPOWER 2 //カーブのパワー
#define set_power_H SetPower(OUT_AC,HIPOWER); //パワ...
#define set_power_L SetPower(OUT_AC,LOWPOWER); //パ...
#define go_forward_H set_power_H;OnFwd(OUT_AC); //速...
#define go_forward_L set_power_L;OnFwd(OUT_AC); //遅...
#define turn_left set_power_L;OnFwd(OUT_C);Off(OUT_A)...
#define left_senkai set_power_L;OnFwd(OUT_C);OnRev(OU...
#define turn_right set_power_L;OnFwd(OUT_A);Off(OUT_C...
#define right_senkai set_power_L;OnFwd(OUT_A);OnRev(O...
#define Break Off(OUT_AC);Wait(100); //小休憩
#define Cross_right set_power_L;OnFwd(OUT_C);Wait(50)...
#define Cross_left set_power_L;OnFwd(OUT_A);Wait(50);...
#define Step 1 //ラインの検知間隔
sub cross_go_forward_right() //「交差点直進(ライン...
{
int Online=0; //右旋回(最も暗い)の回数
int Cross_count=0; //交差点を通過した回数
while(Cross_count < 1) { //交差点通過後まで
while(Online < 5) { //5回連続で右旋回する(最も...
if(SENSOR_2 < THRESHOLD-5) {right_senkai;Play...
else if(SENSOR_2 < THRESHOLD-2){turn_right;On...
else if(SENSOR_2 < THRESHOLD+5){tur...
else {left_senkai;} Online=0; //...
}
Wait(Step); //0.01秒ごとに線を検知 } ...
Break; //小休憩
Cross_right; //Onlineが5以上で交差点識別、小休憩の後...
Cross_count++; //Cross_countに1代入、サブルーチン終了
}
}
sub cross_turn_right_right() //「交差点右折(ライン...
{
int Online=0; //右旋回(最も暗い)の回数
int Cross_count=0; //交差点を通過した回数
while(Cross_count < 1) { //交差点通過後まで
while(Online < 5) { //5回連続で右旋回する(最も...
if(SENSOR_2 < THRESHOLD-5) {right_senkai;Play...
else if(SENSOR_2 < THRESHOLD-2){turn_right;On...
else{if(SENSOR_2 < THRESHOLD+2){go_forwa...
else if(SENSOR_2 < THRESHOLD+2){tur...
else{left_senkai;} Online=0;
}
Wait(Step); //0.01秒ごとに線を検知 } ...
Break; //小休憩
right_senkai;Break;go_forward_L;Wait(45); //交差点右...
Cross_count++; //Cross_countに1代入、サブルーチン終了
}
}
sub cross_turn_left_at_R() //「Rで交差点左折(交差...
{
int Online=0; //右旋回(最も暗い)の回数
int Cross_count=0; //交差点を通過した回数
while(Cross_count < 1) { //交差点通過後まで
while(Online < 2) { //2回連続で右旋回する(最も...
if(SENSOR_2 < THRESHOLD-5) {right_senkai;Play...
else if(SENSOR_2 < THRESHOLD-2){turn_right;On...
else{if(SENSOR_2 < THRESHOLD+5){go_forwa...
else if(SENSOR_2 < THRESHOLD+2){tur...
else{left_senkai;} Online=0;
}
Wait(Step); //0.01秒ごとに線を検知 } ...
Break; //小休憩
OnRev(OUT_AC);Wait(20);Off(OUT_AC);left_senkai;Wait(1...
Cross_count++; //Cross_countに1代入、サブルーチン終了
}
}
sub cross_go_forward_left() //「交差点直進(ライン...
{
int Online=0; //左旋回(最も暗い)の回数
int Cross_count=0; //交差点を通過した回数
while(Cross_count < 1) { //交差点通過後まで
while(Online < 5) { //5回連続で左旋回する(最も暗い)...
if(SENSOR_2 < THRESHOLD-5) {left_senkai;PlayT...
else if(SENSOR_2 < THRESHOLD-2){turn_left;Onl...
else {if(SENSOR_2 < THRESHOLD+2){go_forw...
else if(SENSOR_2 < THRESHOLD+5){tur...
else {right_senkai;} Online=0;
}
Wait(Step); //0.01秒ごとに線を検知 } ...
Break; //小休憩
Cross_left; //交差点通過
Cross_count++; //Cross_countに1代入、サブルーチン終了
}
}
sub cross_turn_left_at_Q() //「Q左折(左折後左トレ...
{
int Online=0; //左旋回(最も暗い)の回数
int Cross_count=0; //交差点を通過した回数
while(Cross_count < 1) { //交差点通過後まで
while(Online < 5) { //5回連続で左旋回する(最も暗い)...
if(SENSOR_2 < THRESHOLD-5) {left_senkai;PlayT...
else if(SENSOR_2 < THRESHOLD-2){turn_left;Onl...
else {if(SENSOR_2 < THRESHOLD+2){go_forw...
else if(SENSOR_2 < THRESHOLD+5){tur...
else {right_senkai;} Online=0;
}
Wait(Step); //0.01秒ごとに線を検知 } ...
Break; //小休憩
OnRev(OUT_AC);Wait(20);Off(OUT_AC);left_senkai;Wait(1...
Cross_count++; //Cross_countに1代入、サブルーチン終了
}
}
sub cross_turn_left_right() //「交差点左折(ライン...
{
int Online=0; //右旋回(最も暗い)の回数
int Cross_count=0; //交差点を通過した回数
while(Cross_count < 1) { //交差点通過後まで
while(Online < 5) { //5回連続で右旋回する(最も...
if(SENSOR_2 < THRESHOLD-5) {right_senkai;Play...
else if(SENSOR_2 < THRESHOLD-2){turn_right;On...
else{if(SENSOR_2 < THRESHOLD+5){go_forwa...
else if(SENSOR_2 < THRESHOLD+2){tur...
else{left_senkai;} Online=0;
}
Wait(Step); //0.01秒ごとに線を検知 } ...
Break; //小休憩
OnRev(OUT_AC);Wait(20);left_senkai;Wait(70); //左折(...
Cross_count++; //Cross_countに1代入、サブルーチン終了
}
}
sub s_curve() //「S字カーブ」明るさ5段階のうち最も...
{
ClearTimer(0); //タイマーリセット
while(FastTimer(0)<1000) //10秒でS字区間通過
{
if(SENSOR_2<THRESHOLD-5){right_senkai;}
else if(SENSOR_2<THRESHOLD-2){turn_right;}
else if(SENSOR_2<THRESHOLD+2){go_forward_H;} //...
else if(SENSOR_2<THRESHOLD+5){turn_left;}
else{left_senkai;}
}
}
task main()
{
SetSensor(SENSOR_2,SENSOR_LIGHT); //センサ2を光セン...
cross_go_forward_right(); //B通過
cross_turn_right_right(); //C右折
cross_go_forward_right(); //F通過
s_curve(); //S字カーブ
cross_turn_right_right(); //E右折
cross_turn_left_at_R(); //R左折(左折後センサ...
cross_go_forward_left(); //P直進
cross_turn_left_at_Q(); //Q左折(左折後センサ...
cross_go_forward_right(); //S通過
cross_go_forward_right(); //S通過
cross_turn_left_right(); //F左折
cross_turn_right_right(); //C右折
int Online=0; //右旋回(最も暗い)の回数
int Cross_count=0; //交差点を通過した回数
while(Cross_count < 1) { //交差点通過後まで
while(Online < 2) { //2回連続で右旋回する(最も...
if(SENSOR_2 < THRESHOLD-5) {right_senkai;Play...
else if(SENSOR_2 < THRESHOLD-2){turn_right;On...
else {if(SENSOR_2 < THRESHOLD+2){go_forw...
else if(SENSOR_2 < THRESHOLD+5){tur...
else {left_senkai;} Online=0;
}
Wait(Step); //0.01秒ごとに線を検知 } ...
Break;
OnFwd(OUT_AC);Wait(60);Off(OUT_AC); ...
Cross_count++; //Cross_countに1代入、終了
}
}
*3.感想 [#s80e56a8]
ロボットの構造上センサをロボットの正面右側に付けたので、...
コースの構造上、右端トレースから左端トレースへ、左端から...
S字カーブはロボットのタイヤを2輪にしたことで、スムーズに...
交差点の判定などに音をうまく使うことで、より効率的に進め...
終了行:
*1.作ったロボット [#q79c0cde]
#ref(2017b/Member/ryok/Mission2/20171227_180018882.jpg,20...
後ろ。青い部分の下に丸いブロックがあることでタイヤを2個に...
#ref(2017b/Member/ryok/Mission2/20171227_180027716.jpg,15...
正面。手前に進む。センサは進行方向に向かって右側に。四角...
#ref(2017b/Member/ryok/Mission2/20171227_180036039.jpg,20...
横。ギアの部分で四角い枠を上げ下げする。
4輪でのS字カーブがなかなか上手くいかなかったので、小回り...
センサはロボットの正面右側に付けた。(写真「正面」)
また、四角い枠を動かしてコップを運ぶ。(写真「横」「正面」)
*2.書いたプログラム [#tc5ff7de]
#define THRESHOLD 45
#define HIPOWER 7 //直線用のパワー
#define LOWPOWER 2 //カーブのパワー
#define set_power_H SetPower(OUT_AC,HIPOWER); //パワ...
#define set_power_L SetPower(OUT_AC,LOWPOWER); //パ...
#define go_forward_H set_power_H;OnFwd(OUT_AC); //速...
#define go_forward_L set_power_L;OnFwd(OUT_AC); //遅...
#define turn_left set_power_L;OnFwd(OUT_C);Off(OUT_A)...
#define left_senkai set_power_L;OnFwd(OUT_C);OnRev(OU...
#define turn_right set_power_L;OnFwd(OUT_A);Off(OUT_C...
#define right_senkai set_power_L;OnFwd(OUT_A);OnRev(O...
#define Break Off(OUT_AC);Wait(100); //小休憩
#define Cross_right set_power_L;OnFwd(OUT_C);Wait(50)...
#define Cross_left set_power_L;OnFwd(OUT_A);Wait(50);...
#define Step 1 //ラインの検知間隔
sub cross_go_forward_right() //「交差点直進(ライン...
{
int Online=0; //右旋回(最も暗い)の回数
int Cross_count=0; //交差点を通過した回数
while(Cross_count < 1) { //交差点通過後まで
while(Online < 5) { //5回連続で右旋回する(最も...
if(SENSOR_2 < THRESHOLD-5) {right_senkai;Play...
else if(SENSOR_2 < THRESHOLD-2){turn_right;On...
else if(SENSOR_2 < THRESHOLD+5){tur...
else {left_senkai;} Online=0; //...
}
Wait(Step); //0.01秒ごとに線を検知 } ...
Break; //小休憩
Cross_right; //Onlineが5以上で交差点識別、小休憩の後...
Cross_count++; //Cross_countに1代入、サブルーチン終了
}
}
sub cross_turn_right_right() //「交差点右折(ライン...
{
int Online=0; //右旋回(最も暗い)の回数
int Cross_count=0; //交差点を通過した回数
while(Cross_count < 1) { //交差点通過後まで
while(Online < 5) { //5回連続で右旋回する(最も...
if(SENSOR_2 < THRESHOLD-5) {right_senkai;Play...
else if(SENSOR_2 < THRESHOLD-2){turn_right;On...
else{if(SENSOR_2 < THRESHOLD+2){go_forwa...
else if(SENSOR_2 < THRESHOLD+2){tur...
else{left_senkai;} Online=0;
}
Wait(Step); //0.01秒ごとに線を検知 } ...
Break; //小休憩
right_senkai;Break;go_forward_L;Wait(45); //交差点右...
Cross_count++; //Cross_countに1代入、サブルーチン終了
}
}
sub cross_turn_left_at_R() //「Rで交差点左折(交差...
{
int Online=0; //右旋回(最も暗い)の回数
int Cross_count=0; //交差点を通過した回数
while(Cross_count < 1) { //交差点通過後まで
while(Online < 2) { //2回連続で右旋回する(最も...
if(SENSOR_2 < THRESHOLD-5) {right_senkai;Play...
else if(SENSOR_2 < THRESHOLD-2){turn_right;On...
else{if(SENSOR_2 < THRESHOLD+5){go_forwa...
else if(SENSOR_2 < THRESHOLD+2){tur...
else{left_senkai;} Online=0;
}
Wait(Step); //0.01秒ごとに線を検知 } ...
Break; //小休憩
OnRev(OUT_AC);Wait(20);Off(OUT_AC);left_senkai;Wait(1...
Cross_count++; //Cross_countに1代入、サブルーチン終了
}
}
sub cross_go_forward_left() //「交差点直進(ライン...
{
int Online=0; //左旋回(最も暗い)の回数
int Cross_count=0; //交差点を通過した回数
while(Cross_count < 1) { //交差点通過後まで
while(Online < 5) { //5回連続で左旋回する(最も暗い)...
if(SENSOR_2 < THRESHOLD-5) {left_senkai;PlayT...
else if(SENSOR_2 < THRESHOLD-2){turn_left;Onl...
else {if(SENSOR_2 < THRESHOLD+2){go_forw...
else if(SENSOR_2 < THRESHOLD+5){tur...
else {right_senkai;} Online=0;
}
Wait(Step); //0.01秒ごとに線を検知 } ...
Break; //小休憩
Cross_left; //交差点通過
Cross_count++; //Cross_countに1代入、サブルーチン終了
}
}
sub cross_turn_left_at_Q() //「Q左折(左折後左トレ...
{
int Online=0; //左旋回(最も暗い)の回数
int Cross_count=0; //交差点を通過した回数
while(Cross_count < 1) { //交差点通過後まで
while(Online < 5) { //5回連続で左旋回する(最も暗い)...
if(SENSOR_2 < THRESHOLD-5) {left_senkai;PlayT...
else if(SENSOR_2 < THRESHOLD-2){turn_left;Onl...
else {if(SENSOR_2 < THRESHOLD+2){go_forw...
else if(SENSOR_2 < THRESHOLD+5){tur...
else {right_senkai;} Online=0;
}
Wait(Step); //0.01秒ごとに線を検知 } ...
Break; //小休憩
OnRev(OUT_AC);Wait(20);Off(OUT_AC);left_senkai;Wait(1...
Cross_count++; //Cross_countに1代入、サブルーチン終了
}
}
sub cross_turn_left_right() //「交差点左折(ライン...
{
int Online=0; //右旋回(最も暗い)の回数
int Cross_count=0; //交差点を通過した回数
while(Cross_count < 1) { //交差点通過後まで
while(Online < 5) { //5回連続で右旋回する(最も...
if(SENSOR_2 < THRESHOLD-5) {right_senkai;Play...
else if(SENSOR_2 < THRESHOLD-2){turn_right;On...
else{if(SENSOR_2 < THRESHOLD+5){go_forwa...
else if(SENSOR_2 < THRESHOLD+2){tur...
else{left_senkai;} Online=0;
}
Wait(Step); //0.01秒ごとに線を検知 } ...
Break; //小休憩
OnRev(OUT_AC);Wait(20);left_senkai;Wait(70); //左折(...
Cross_count++; //Cross_countに1代入、サブルーチン終了
}
}
sub s_curve() //「S字カーブ」明るさ5段階のうち最も...
{
ClearTimer(0); //タイマーリセット
while(FastTimer(0)<1000) //10秒でS字区間通過
{
if(SENSOR_2<THRESHOLD-5){right_senkai;}
else if(SENSOR_2<THRESHOLD-2){turn_right;}
else if(SENSOR_2<THRESHOLD+2){go_forward_H;} //...
else if(SENSOR_2<THRESHOLD+5){turn_left;}
else{left_senkai;}
}
}
task main()
{
SetSensor(SENSOR_2,SENSOR_LIGHT); //センサ2を光セン...
cross_go_forward_right(); //B通過
cross_turn_right_right(); //C右折
cross_go_forward_right(); //F通過
s_curve(); //S字カーブ
cross_turn_right_right(); //E右折
cross_turn_left_at_R(); //R左折(左折後センサ...
cross_go_forward_left(); //P直進
cross_turn_left_at_Q(); //Q左折(左折後センサ...
cross_go_forward_right(); //S通過
cross_go_forward_right(); //S通過
cross_turn_left_right(); //F左折
cross_turn_right_right(); //C右折
int Online=0; //右旋回(最も暗い)の回数
int Cross_count=0; //交差点を通過した回数
while(Cross_count < 1) { //交差点通過後まで
while(Online < 2) { //2回連続で右旋回する(最も...
if(SENSOR_2 < THRESHOLD-5) {right_senkai;Play...
else if(SENSOR_2 < THRESHOLD-2){turn_right;On...
else {if(SENSOR_2 < THRESHOLD+2){go_forw...
else if(SENSOR_2 < THRESHOLD+5){tur...
else {left_senkai;} Online=0;
}
Wait(Step); //0.01秒ごとに線を検知 } ...
Break;
OnFwd(OUT_AC);Wait(60);Off(OUT_AC); ...
Cross_count++; //Cross_countに1代入、終了
}
}
*3.感想 [#s80e56a8]
ロボットの構造上センサをロボットの正面右側に付けたので、...
コースの構造上、右端トレースから左端トレースへ、左端から...
S字カーブはロボットのタイヤを2輪にしたことで、スムーズに...
交差点の判定などに音をうまく使うことで、より効率的に進め...
ページ名: