2013a/Member/wani/Mission1
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2013a/Member]]
*作品の説明 [#w2547922]
**機体について [#z0077bd3]
クワガタのような大きなアームを装備している。&br;
&ref(20130710_204817.jpg);&br;&br;&br;
ライントレースの様子&br;
&ref(20130710_204754.jpg);&br;
**プログラム概要 [#u820f1b7]
半時計周りの空き缶運び。&br;
ラインの右側をトレースしながら8.5秒間(空き缶を掴むまで)...
↓&br;
空き缶を掴む。&br;
↓&br;
ラインの左側を前進。&br;
↓&br;
十字路通過。&br;
↓&br;
ラインの左側を前進しながら3回十字路を通過する。&br;
↓&br;
20.5秒間ラインの左側を前進する。&br;
↓&br;
右旋回をして、180°機体の向きを回転させる。&br;
↓&br;
空き缶を置く。&br;
↓&br;
少しバックして、向きを前進方向に戻す。&br;
↓&br;
ラインの右側を前進して、ゴールに向かう。&br;
↓&br;
ゴール(終了)。&br;&br;
*基本動作原理 [#xe8b782d]
**プログラムの説明 [#mbb67ccf]
基本的な動作は至って簡単で、黒ラインの縁をトレースするも...
これがこのプログラムの前進部の動作原理である。&br;
次に十字路について解説する。十字路では前進するプログラム...
この前進と十字路のプログラムを合わせることによってコース...
**マクロの説明 [#p61f65e3]
#define CENTER 45
赤外線センサーのラインを読み取った時の値。&br;
この値は中央よりやや外側の値になっている。&br;
#define CCC 20500
この値は走行中に4回目に通過した交差点から空き缶を離すま...
#define SPEED_H 52
#define SPEED_L 32
この値は走行中のモーターの強度を示している。SPEED_Hは直線...
#define turn_R Off(OUT_B); OnFwd(OUT_C,SPEED_L);
#define turn_L Off(OUT_C); OnFwd(OUT_B,SPEED_L);
これは片輪を軸とした回転運動のときに使用するもの。Rが右回...
#define turn_SR OnRev(OUT_B,SPEED_L); OnFwd(OUT_C,SPEED_...
#define turn_SL OnRev(OUT_C,SPEED_L); OnFwd(OUT_B,SPEED_...
これは車体の中心を軸とした小回り重視の回転をするときに用...
#define go_F OnFwd(OUT_BC,SPEED_H);
#define go_b OnFwd(OUT_B,-50);OnFwd(OUT_C,-50);
直進運動に用いるものである。Fが前進、bが後進である。&br;
#define STEP 1
#define nMAX 300
交差点を走行時に使用するものである。交差点を判断するルー...
#define short_break Off(OUT_BC);Wait(300);
交差点を判断しているループから抜けたあとの処理に問題が起...
#define CROSS_TIME 600
#define cross OnFwd(OUT_C,SPEED_L);OnFwd(OUT_B,SPEED_L);...
これは交差点での走行の仕方を定義したものである。ここでもs...
*工夫・苦労した点 [#lf415756]
**機体について [#z1270d58]
機体は初め使っていたライントレース専門の機体を空き缶を掴...
**プログラムについて [#g42b3626]
十字路の進入角度が鈍角のものと鋭角のものがあり、鈍角のと...
*反省・感想 [#ea95419d]
初めてプログラムを書いて動かしたときは課題をうまくこな...
今回のプログラミングを通してアルゴリズムを考えることも...
今回経験を生かしたプログラミングができるよう、残りの授...
*動作プログラム添付 [#h53f41e6]
#define CENTER 45
#define CCC 20500
#define SPEED_H 52
#define SPEED_L 32
#define turn_R Off(OUT_B); OnFwd(OUT_C,SPEED_L);
#define turn_L Off(OUT_C); OnFwd(OUT_B,SPEED_L);
#define turn_SR OnRev(OUT_B,SPEED_L); OnFwd(OUT_C,SPEED_...
#define turn_SL OnRev(OUT_C,SPEED_L); OnFwd(OUT_B,SPEED_...
#define go_F OnFwd(OUT_BC,SPEED_H);
#define STEP 1
#define nMAX 300
#define short_break Off(OUT_BC);Wait(300);
#define CROSS_TIME 600
#define cross OnFwd(OUT_C,SPEED_L);OnFwd(OUT_B,SPEED_L);...
#define go_b OnFwd(OUT_B,-50);OnFwd(OUT_C,-50);
//右側前進
sub trace_R()
{
int n;
while(true) {
while(n < nMAX) {
if(SENSOR_1 < CENTER-12) {
turn_SR;
n++;
} else {
if(SENSOR_1 < CENTER-6) {
turn_R;
} else if(SENSOR_1 < CENTER+6) {
go_F;
} else if(SENSOR_1 < CENTER+12) {
turn_L;
} else {
turn_SL;
}
n=0;
}
Wait(STEP);
}
short_break;
turn_SL;Wait(nMAX*STEP);
cross;
n=0;
break;
}
}
//左側前進
sub trace_L()
{
int n;
while(true) {
while(n < nMAX) {
if(SENSOR_1 < CENTER-12) {
turn_SL;
n++;
} else {
if(SENSOR_1 < CENTER-6) {
turn_L;
} else if(SENSOR_1 < CENTER+6) {
go_F;
} else if(SENSOR_1 < CENTER+12) {
turn_R;
} else {
turn_SR;
}
n=0;
}
Wait(STEP);
}
short_break;
turn_SR;Wait(nMAX*STEP);
cross;
n=0;
break;
}
}
task main()
{
SetSensorLight(S1);
SetSensorTouch(S3);
int n=0,count = 0;
long t = 0;
if(t >= 0){
t = CurrentTick();
//右側前進
while(true){
if(SENSOR_1 < CENTER-9){
if(SENSOR_1 < CENTER-19){
turn_R;
}else{
turn_SR;
}
}else if(SENSOR_1 < CENTER+2){
go_F;
}else{
if(SENSOR_1 < CENTER){
turn_SL;
}else{
turn_L;
}
}
Wait(STEP);
if(CurrentTick() - t > 8500){
break;
}
}
}
//空き缶を掴む
short_break;
OnFwd(OUT_A,-30);
trace_R();
trace_L();
trace_L();
trace_L();
//左側前進
t=CurrentTick();
while(true){
while(CurrentTick()-t <= CCC) {
if(SENSOR_1 < CENTER-12) {
turn_SL;
} else {
if(SENSOR_1 < CENTER-6) {
turn_L;
} else if(SENSOR_1 < CENTER+6) {
go_F;
} else if(SENSOR_1 < CENTER+12) {
turn_R;
} else {
turn_SR;
}
}
}
break;
}
//180°向きを変える
turn_SR;
Wait(2700);
//空き缶を離す
OnFwd(OUT_A,30);
Wait(300);
Off(OUT_A);
//後方へさがる
go_b;
Wait(600);
//元の向きに直る
turn_SL;
Wait(1100);
Off(OUT_BC);
//右側前進
while(true) {
while(n < nMAX) {
if(SENSOR_1 < CENTER-12) {
turn_SR;
} else {
if(SENSOR_1 < CENTER-6) {
turn_R;
} else if(SENSOR_1 < CENTER+6) {
go_F;
} else if(SENSOR_1 < CENTER+12) {
turn_L;
} else {
turn_SL;
}
n=0;
}
Wait(STEP);
}
}
//ゴール
}
終了行:
[[2013a/Member]]
*作品の説明 [#w2547922]
**機体について [#z0077bd3]
クワガタのような大きなアームを装備している。&br;
&ref(20130710_204817.jpg);&br;&br;&br;
ライントレースの様子&br;
&ref(20130710_204754.jpg);&br;
**プログラム概要 [#u820f1b7]
半時計周りの空き缶運び。&br;
ラインの右側をトレースしながら8.5秒間(空き缶を掴むまで)...
↓&br;
空き缶を掴む。&br;
↓&br;
ラインの左側を前進。&br;
↓&br;
十字路通過。&br;
↓&br;
ラインの左側を前進しながら3回十字路を通過する。&br;
↓&br;
20.5秒間ラインの左側を前進する。&br;
↓&br;
右旋回をして、180°機体の向きを回転させる。&br;
↓&br;
空き缶を置く。&br;
↓&br;
少しバックして、向きを前進方向に戻す。&br;
↓&br;
ラインの右側を前進して、ゴールに向かう。&br;
↓&br;
ゴール(終了)。&br;&br;
*基本動作原理 [#xe8b782d]
**プログラムの説明 [#mbb67ccf]
基本的な動作は至って簡単で、黒ラインの縁をトレースするも...
これがこのプログラムの前進部の動作原理である。&br;
次に十字路について解説する。十字路では前進するプログラム...
この前進と十字路のプログラムを合わせることによってコース...
**マクロの説明 [#p61f65e3]
#define CENTER 45
赤外線センサーのラインを読み取った時の値。&br;
この値は中央よりやや外側の値になっている。&br;
#define CCC 20500
この値は走行中に4回目に通過した交差点から空き缶を離すま...
#define SPEED_H 52
#define SPEED_L 32
この値は走行中のモーターの強度を示している。SPEED_Hは直線...
#define turn_R Off(OUT_B); OnFwd(OUT_C,SPEED_L);
#define turn_L Off(OUT_C); OnFwd(OUT_B,SPEED_L);
これは片輪を軸とした回転運動のときに使用するもの。Rが右回...
#define turn_SR OnRev(OUT_B,SPEED_L); OnFwd(OUT_C,SPEED_...
#define turn_SL OnRev(OUT_C,SPEED_L); OnFwd(OUT_B,SPEED_...
これは車体の中心を軸とした小回り重視の回転をするときに用...
#define go_F OnFwd(OUT_BC,SPEED_H);
#define go_b OnFwd(OUT_B,-50);OnFwd(OUT_C,-50);
直進運動に用いるものである。Fが前進、bが後進である。&br;
#define STEP 1
#define nMAX 300
交差点を走行時に使用するものである。交差点を判断するルー...
#define short_break Off(OUT_BC);Wait(300);
交差点を判断しているループから抜けたあとの処理に問題が起...
#define CROSS_TIME 600
#define cross OnFwd(OUT_C,SPEED_L);OnFwd(OUT_B,SPEED_L);...
これは交差点での走行の仕方を定義したものである。ここでもs...
*工夫・苦労した点 [#lf415756]
**機体について [#z1270d58]
機体は初め使っていたライントレース専門の機体を空き缶を掴...
**プログラムについて [#g42b3626]
十字路の進入角度が鈍角のものと鋭角のものがあり、鈍角のと...
*反省・感想 [#ea95419d]
初めてプログラムを書いて動かしたときは課題をうまくこな...
今回のプログラミングを通してアルゴリズムを考えることも...
今回経験を生かしたプログラミングができるよう、残りの授...
*動作プログラム添付 [#h53f41e6]
#define CENTER 45
#define CCC 20500
#define SPEED_H 52
#define SPEED_L 32
#define turn_R Off(OUT_B); OnFwd(OUT_C,SPEED_L);
#define turn_L Off(OUT_C); OnFwd(OUT_B,SPEED_L);
#define turn_SR OnRev(OUT_B,SPEED_L); OnFwd(OUT_C,SPEED_...
#define turn_SL OnRev(OUT_C,SPEED_L); OnFwd(OUT_B,SPEED_...
#define go_F OnFwd(OUT_BC,SPEED_H);
#define STEP 1
#define nMAX 300
#define short_break Off(OUT_BC);Wait(300);
#define CROSS_TIME 600
#define cross OnFwd(OUT_C,SPEED_L);OnFwd(OUT_B,SPEED_L);...
#define go_b OnFwd(OUT_B,-50);OnFwd(OUT_C,-50);
//右側前進
sub trace_R()
{
int n;
while(true) {
while(n < nMAX) {
if(SENSOR_1 < CENTER-12) {
turn_SR;
n++;
} else {
if(SENSOR_1 < CENTER-6) {
turn_R;
} else if(SENSOR_1 < CENTER+6) {
go_F;
} else if(SENSOR_1 < CENTER+12) {
turn_L;
} else {
turn_SL;
}
n=0;
}
Wait(STEP);
}
short_break;
turn_SL;Wait(nMAX*STEP);
cross;
n=0;
break;
}
}
//左側前進
sub trace_L()
{
int n;
while(true) {
while(n < nMAX) {
if(SENSOR_1 < CENTER-12) {
turn_SL;
n++;
} else {
if(SENSOR_1 < CENTER-6) {
turn_L;
} else if(SENSOR_1 < CENTER+6) {
go_F;
} else if(SENSOR_1 < CENTER+12) {
turn_R;
} else {
turn_SR;
}
n=0;
}
Wait(STEP);
}
short_break;
turn_SR;Wait(nMAX*STEP);
cross;
n=0;
break;
}
}
task main()
{
SetSensorLight(S1);
SetSensorTouch(S3);
int n=0,count = 0;
long t = 0;
if(t >= 0){
t = CurrentTick();
//右側前進
while(true){
if(SENSOR_1 < CENTER-9){
if(SENSOR_1 < CENTER-19){
turn_R;
}else{
turn_SR;
}
}else if(SENSOR_1 < CENTER+2){
go_F;
}else{
if(SENSOR_1 < CENTER){
turn_SL;
}else{
turn_L;
}
}
Wait(STEP);
if(CurrentTick() - t > 8500){
break;
}
}
}
//空き缶を掴む
short_break;
OnFwd(OUT_A,-30);
trace_R();
trace_L();
trace_L();
trace_L();
//左側前進
t=CurrentTick();
while(true){
while(CurrentTick()-t <= CCC) {
if(SENSOR_1 < CENTER-12) {
turn_SL;
} else {
if(SENSOR_1 < CENTER-6) {
turn_L;
} else if(SENSOR_1 < CENTER+6) {
go_F;
} else if(SENSOR_1 < CENTER+12) {
turn_R;
} else {
turn_SR;
}
}
}
break;
}
//180°向きを変える
turn_SR;
Wait(2700);
//空き缶を離す
OnFwd(OUT_A,30);
Wait(300);
Off(OUT_A);
//後方へさがる
go_b;
Wait(600);
//元の向きに直る
turn_SL;
Wait(1100);
Off(OUT_BC);
//右側前進
while(true) {
while(n < nMAX) {
if(SENSOR_1 < CENTER-12) {
turn_SR;
} else {
if(SENSOR_1 < CENTER-6) {
turn_R;
} else if(SENSOR_1 < CENTER+6) {
go_F;
} else if(SENSOR_1 < CENTER+12) {
turn_L;
} else {
turn_SL;
}
n=0;
}
Wait(STEP);
}
}
//ゴール
}
ページ名: