2015b/Member/cst321/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#contents
* 課題2 [#n5b84371]
#ref(2015b/Member/cst321/Mission2/2015b-mission2.png,100%...
次の経路を黒い線にそって動くロボットを作成する (他のメン...
B地点からA地点へ
B地点 → P右折 → Q右折 → P左折 → Q左折 → Q直進 → P直進 → A...
* ロボット本体 [#y406f53e]
今回のロボットと前回の一番大きな違いはセンサーがついてい...
そして、少し調整して、本体を小さくし、センサーをより近く...
&ref(2015b/Member/cst321/Mission2/IMG_1023.JPG,10%,本体);
&ref(2015b/Member/cst321/Mission2/IMG_1025.JPG,10%,センサ...
そうすると、ロボットの本体が、よりきれいに線に沿って動け...
* プログラム [#ce0c7a74]
今回のプルグラムは前の課題より複雑で長い。今回の課題の中...
特徴としては、このプログラムは路線図に従って、細かくプロ...
たとえば、BからP交差点までのプログラムとP交差点を渡るプロ...
これが全体のプログラムだ!長いと思うので飛ばして、次の目...
#define THRE 39
#define WHRE 48
#define HBHRE 37
#define HWHRE 46
#define start1 SetPower(OUT_A,7);SetPower(OUT_C,7);OnFwd...
#define TR SetPower(OUT_A,5);SetPower(OUT_C,6);Off(OUT_A...
#define TL SetPower(OUT_A,6);SetPower(OUT_C,5);Off(OUT_A...
#define TRL SetPower(OUT_A,4);SetPower(OUT_C,1);Off(OUT_...
#define TLL SetPower(OUT_A,1);SetPower(OUT_C,4);Off(OUT_...
#define ST SetPower(OUT_A,4);SetPower(OUT_C,4);Off(OUT_A...
#define Do 1047
#define LaF 831
#define SiF 932
#define Si 988
int x;
sub music()
{
PlayTone(Do,20);
Wait(30);
PlayTone(Do,20);
Wait(30);
PlayTone(Do,20);
Wait(30);
PlayTone(Do,60);
Wait(62);
PlayTone(LaF,60);
Wait(62);
PlayTone(SiF,60);
Wait(62);
PlayTone(Do,20);
Wait(42);
PlayTone(Si,20);
Wait(22);
PlayTone(Do,90);
Wait(92);
}
sub trace_1(){
if(SENSOR_2>WHRE)
{TR;ClearTimer(0);
}
else if(SENSOR_2>HWHRE)
{TRL;
ClearTimer(0);
}
else if(SENSOR_2>THRE)
{ST;
ClearTimer(0);
}
else if(SENSOR_2>HBHRE)
{TLL;ClearTimer(0);
}
else {TL;
}
}
task main ()
{ start1;
Wait(120);
SetSensor(SENSOR_2,SENSOR_LIGHT);
x=0;
ClearTimer(0);
while (true)
{
while(FastTimer(0)<30&&x==0)
{
trace_1()
}
while(x==1)
{TR;Wait(15);Off(OUT_AC);ClearTimer(0);x=x+1;}
while(FastTimer(0)<22&&x==2)
{
trace_1()
}
while(FastTimer(0)<28&&x==3)
{
trace_1()
}
while(x==4)
{TL;Wait(60);Off(OUT_AC);ClearTimer(0);x=x+1;}
while(FastTimer(0)<27&&x==5)
{
trace_1()
}
while(x==6)
{TL;Wait(60);Off(OUT_AC);x=x+1;ClearTimer(0);}
while(FastTimer(0)<27&&x==7) // route Q to Q
{
trace_1()
}
while(x==8)
{ST;Wait(30);Off(OUT_AC);ClearTimer(0);x=x+1;}
while(FastTimer(0)<27&&x==9) // route Q to P
{
trace_1()
}
while(x==10)
{ST;Wait(30);Off(OUT_AC);ClearTimer(0);x=x+1;} // P c...
while(FastTimer(0)<27&&x==11) // route P to end
{
trace_1()
}
while(x==12)
{TR;Wait(20);ST;Wait(100);Off(OUT_AC);Wait(100);music()...
Off(OUT_AC);Wait(100);x+=1;ClearTimer(0);
}
Off(OUT_AC);
}
** Defineの応用 [#f1ee28b3]
まず、自分が書いた路線の意色の閾値を設定した。
より綺麗に動いてもらえるため、単に白、黒、と真ん中の閾値...
THREとは真ん中で、WHREとは白
#define THRE 39
#define WHRE 48
#define HBHRE 37
#define HWHRE 46
次に、
今回のロボットは小さいため、普通のパワーの出力で動かすと...
そして、大回りするとき、一つの車輪を動かすだけではなく、
もう一個の車輪がやや逆の方向へ回すように設定されている。
#define start1 SetPower(OUT_A,7);SetPower(OUT_C,7);OnFwd...
#define TR SetPower(OUT_A,5);SetPower(OUT_C,6);Off(OUT_A...
#define TL SetPower(OUT_A,6);SetPower(OUT_C,5);Off(OUT_A...
#define TRL SetPower(OUT_A,4);SetPower(OUT_C,1);Off(OUT_...
#define TLL SetPower(OUT_A,1);SetPower(OUT_C,4);Off(OUT_...
#define ST SetPower(OUT_A,4);SetPower(OUT_C,4);Off(OUT_A...
start1は最初の出発するところで使うのだ。
TRとは turn rightで、TLとはturn leftで、
加えて、
TRLとは Turn right little,TLLとはTurn left little,
STとは straightだ。
** Fasttimerの応用 [#jf9c7087]
道に沿って行くようにするプログラムの一部だ。
これはBからP交差点までのプログラムだ。
ここで、ロボットを道の右側に置くと道に沿っていけます。
while (true)
{
while(FastTimer(0)<30&&x==0)
{
if(SENSOR_2>WHRE)
{TL;ClearTimer(0);
}
else if(SENSOR_2>HWHRE)
{TLL;
ClearTimer(0);
}
else if(SENSOR_2>THRE)
{ST;
ClearTimer(0);
}
else if(SENSOR_2>HBHRE)
{TRL;ClearTimer(0);
}
else
{TR;
}
ここではFasttimerとCleartimerを使う。つまり、Fasttimer<30...
このプログラムを飛ばして、次のプログラムに移る。
そして0.3秒以下だと、
センサーが白に触れると左回る、そしてCleartimerをする。
センサーが黒に触れると右回る、またCleartimerをする。
交差点に到着しなければ、次のプログラムには移らない。
** subの応用 [#f995041a]
ここで何回もラインライントレースをするので、その長いプロ...
sub trace_1(){
if(SENSOR_2>WHRE)
{TR;ClearTimer(0);
}
else if(SENSOR_2>HWHRE)
{TRL;
ClearTimer(0);
}
else if(SENSOR_2>THRE)
{ST;
ClearTimer(0);
}
else if(SENSOR_2>HBHRE)
{TLL;ClearTimer(0);
}
else {TL;
}
}
** カウントの応用 [#q9a03612]
ロボットが多くのプログラムに混乱されないため、カウントを...
Fastimerが各自の時間を超えた後、
Off(OUT_AC);Wait(100);x+=1;ClearTimer(0);
というプログラムに移る、つまり、Cleartimerをして、カウン...
そうすると、また上の新しい while(x==1)のところへ行く、
それが終わった後、またカウントが一個増えて、
while(x==2)のところへ行く。
カウントを使って、路線のすべての道と交差点で、ロボットを...
** 二つの組み合わせ [#j9659a43]
この二つの応用の組み合わせで、違う道で、違うFasttimerの上...
例えば、Q交差点で右を回るのが異常に難しく、Fasttimerの上...
そのため、Fasttimerの上限を22に設置しなければ成功率が低い。
結果、
while(FastTimer(0)<22&&x==2)というプログラムを使った。xが...
* 問題 [#f19136e8]
プログラムが長すぎて、ロボットへアップロードするのが時間...
なるべく短いプログラムがいいと思われる。
ロボット自体が小さく、早いので、どこでどのぐらいパワーが...
* 結果 [#xdf11e3d]
失敗するのが少なく、
道にそって綺麗に動いて、BからAまでに到着し、歌もきちんと...
* ボーナス、成功の歌 [#r6c9fa55]
この歌はFinal Fantasy の Victory Fanfareの前半だ。ロボッ...
#define Do 1047
#define LaF 831
#define SiF 932
#define Si 988
sub music()
{
PlayTone(Do,20);
Wait(30);
PlayTone(Do,20);
Wait(30);
PlayTone(Do,20);
Wait(30);
PlayTone(Do,60);
Wait(62);
PlayTone(LaF,60);
Wait(62);
PlayTone(SiF,60);
Wait(62);
PlayTone(Do,20);
Wait(42);
PlayTone(Si,20);
Wait(22);
PlayTone(Do,90);
Wait(92);
}
* 感想 [#ce4e7597]
今回すべてのプログラムが私一人で、書いたのではなく、同じ...
友達が路線を書くから、プログラムまで、すべてをきちんとと...
私は逆におおざっぱですべてをやりたかったと思った。
結局
やはり、センサーが色を探知するには、路線をきちんと書かな...
そして、ロボットが綺麗に動くようにするためのプログラムは...
二人で夜遅くまで10番教室で一緒に課題をやるのは、楽しかっ...
今回の課題でいろいろなことが学んでいて、友達からも学んだ...
終了行:
#contents
* 課題2 [#n5b84371]
#ref(2015b/Member/cst321/Mission2/2015b-mission2.png,100%...
次の経路を黒い線にそって動くロボットを作成する (他のメン...
B地点からA地点へ
B地点 → P右折 → Q右折 → P左折 → Q左折 → Q直進 → P直進 → A...
* ロボット本体 [#y406f53e]
今回のロボットと前回の一番大きな違いはセンサーがついてい...
そして、少し調整して、本体を小さくし、センサーをより近く...
&ref(2015b/Member/cst321/Mission2/IMG_1023.JPG,10%,本体);
&ref(2015b/Member/cst321/Mission2/IMG_1025.JPG,10%,センサ...
そうすると、ロボットの本体が、よりきれいに線に沿って動け...
* プログラム [#ce0c7a74]
今回のプルグラムは前の課題より複雑で長い。今回の課題の中...
特徴としては、このプログラムは路線図に従って、細かくプロ...
たとえば、BからP交差点までのプログラムとP交差点を渡るプロ...
これが全体のプログラムだ!長いと思うので飛ばして、次の目...
#define THRE 39
#define WHRE 48
#define HBHRE 37
#define HWHRE 46
#define start1 SetPower(OUT_A,7);SetPower(OUT_C,7);OnFwd...
#define TR SetPower(OUT_A,5);SetPower(OUT_C,6);Off(OUT_A...
#define TL SetPower(OUT_A,6);SetPower(OUT_C,5);Off(OUT_A...
#define TRL SetPower(OUT_A,4);SetPower(OUT_C,1);Off(OUT_...
#define TLL SetPower(OUT_A,1);SetPower(OUT_C,4);Off(OUT_...
#define ST SetPower(OUT_A,4);SetPower(OUT_C,4);Off(OUT_A...
#define Do 1047
#define LaF 831
#define SiF 932
#define Si 988
int x;
sub music()
{
PlayTone(Do,20);
Wait(30);
PlayTone(Do,20);
Wait(30);
PlayTone(Do,20);
Wait(30);
PlayTone(Do,60);
Wait(62);
PlayTone(LaF,60);
Wait(62);
PlayTone(SiF,60);
Wait(62);
PlayTone(Do,20);
Wait(42);
PlayTone(Si,20);
Wait(22);
PlayTone(Do,90);
Wait(92);
}
sub trace_1(){
if(SENSOR_2>WHRE)
{TR;ClearTimer(0);
}
else if(SENSOR_2>HWHRE)
{TRL;
ClearTimer(0);
}
else if(SENSOR_2>THRE)
{ST;
ClearTimer(0);
}
else if(SENSOR_2>HBHRE)
{TLL;ClearTimer(0);
}
else {TL;
}
}
task main ()
{ start1;
Wait(120);
SetSensor(SENSOR_2,SENSOR_LIGHT);
x=0;
ClearTimer(0);
while (true)
{
while(FastTimer(0)<30&&x==0)
{
trace_1()
}
while(x==1)
{TR;Wait(15);Off(OUT_AC);ClearTimer(0);x=x+1;}
while(FastTimer(0)<22&&x==2)
{
trace_1()
}
while(FastTimer(0)<28&&x==3)
{
trace_1()
}
while(x==4)
{TL;Wait(60);Off(OUT_AC);ClearTimer(0);x=x+1;}
while(FastTimer(0)<27&&x==5)
{
trace_1()
}
while(x==6)
{TL;Wait(60);Off(OUT_AC);x=x+1;ClearTimer(0);}
while(FastTimer(0)<27&&x==7) // route Q to Q
{
trace_1()
}
while(x==8)
{ST;Wait(30);Off(OUT_AC);ClearTimer(0);x=x+1;}
while(FastTimer(0)<27&&x==9) // route Q to P
{
trace_1()
}
while(x==10)
{ST;Wait(30);Off(OUT_AC);ClearTimer(0);x=x+1;} // P c...
while(FastTimer(0)<27&&x==11) // route P to end
{
trace_1()
}
while(x==12)
{TR;Wait(20);ST;Wait(100);Off(OUT_AC);Wait(100);music()...
Off(OUT_AC);Wait(100);x+=1;ClearTimer(0);
}
Off(OUT_AC);
}
** Defineの応用 [#f1ee28b3]
まず、自分が書いた路線の意色の閾値を設定した。
より綺麗に動いてもらえるため、単に白、黒、と真ん中の閾値...
THREとは真ん中で、WHREとは白
#define THRE 39
#define WHRE 48
#define HBHRE 37
#define HWHRE 46
次に、
今回のロボットは小さいため、普通のパワーの出力で動かすと...
そして、大回りするとき、一つの車輪を動かすだけではなく、
もう一個の車輪がやや逆の方向へ回すように設定されている。
#define start1 SetPower(OUT_A,7);SetPower(OUT_C,7);OnFwd...
#define TR SetPower(OUT_A,5);SetPower(OUT_C,6);Off(OUT_A...
#define TL SetPower(OUT_A,6);SetPower(OUT_C,5);Off(OUT_A...
#define TRL SetPower(OUT_A,4);SetPower(OUT_C,1);Off(OUT_...
#define TLL SetPower(OUT_A,1);SetPower(OUT_C,4);Off(OUT_...
#define ST SetPower(OUT_A,4);SetPower(OUT_C,4);Off(OUT_A...
start1は最初の出発するところで使うのだ。
TRとは turn rightで、TLとはturn leftで、
加えて、
TRLとは Turn right little,TLLとはTurn left little,
STとは straightだ。
** Fasttimerの応用 [#jf9c7087]
道に沿って行くようにするプログラムの一部だ。
これはBからP交差点までのプログラムだ。
ここで、ロボットを道の右側に置くと道に沿っていけます。
while (true)
{
while(FastTimer(0)<30&&x==0)
{
if(SENSOR_2>WHRE)
{TL;ClearTimer(0);
}
else if(SENSOR_2>HWHRE)
{TLL;
ClearTimer(0);
}
else if(SENSOR_2>THRE)
{ST;
ClearTimer(0);
}
else if(SENSOR_2>HBHRE)
{TRL;ClearTimer(0);
}
else
{TR;
}
ここではFasttimerとCleartimerを使う。つまり、Fasttimer<30...
このプログラムを飛ばして、次のプログラムに移る。
そして0.3秒以下だと、
センサーが白に触れると左回る、そしてCleartimerをする。
センサーが黒に触れると右回る、またCleartimerをする。
交差点に到着しなければ、次のプログラムには移らない。
** subの応用 [#f995041a]
ここで何回もラインライントレースをするので、その長いプロ...
sub trace_1(){
if(SENSOR_2>WHRE)
{TR;ClearTimer(0);
}
else if(SENSOR_2>HWHRE)
{TRL;
ClearTimer(0);
}
else if(SENSOR_2>THRE)
{ST;
ClearTimer(0);
}
else if(SENSOR_2>HBHRE)
{TLL;ClearTimer(0);
}
else {TL;
}
}
** カウントの応用 [#q9a03612]
ロボットが多くのプログラムに混乱されないため、カウントを...
Fastimerが各自の時間を超えた後、
Off(OUT_AC);Wait(100);x+=1;ClearTimer(0);
というプログラムに移る、つまり、Cleartimerをして、カウン...
そうすると、また上の新しい while(x==1)のところへ行く、
それが終わった後、またカウントが一個増えて、
while(x==2)のところへ行く。
カウントを使って、路線のすべての道と交差点で、ロボットを...
** 二つの組み合わせ [#j9659a43]
この二つの応用の組み合わせで、違う道で、違うFasttimerの上...
例えば、Q交差点で右を回るのが異常に難しく、Fasttimerの上...
そのため、Fasttimerの上限を22に設置しなければ成功率が低い。
結果、
while(FastTimer(0)<22&&x==2)というプログラムを使った。xが...
* 問題 [#f19136e8]
プログラムが長すぎて、ロボットへアップロードするのが時間...
なるべく短いプログラムがいいと思われる。
ロボット自体が小さく、早いので、どこでどのぐらいパワーが...
* 結果 [#xdf11e3d]
失敗するのが少なく、
道にそって綺麗に動いて、BからAまでに到着し、歌もきちんと...
* ボーナス、成功の歌 [#r6c9fa55]
この歌はFinal Fantasy の Victory Fanfareの前半だ。ロボッ...
#define Do 1047
#define LaF 831
#define SiF 932
#define Si 988
sub music()
{
PlayTone(Do,20);
Wait(30);
PlayTone(Do,20);
Wait(30);
PlayTone(Do,20);
Wait(30);
PlayTone(Do,60);
Wait(62);
PlayTone(LaF,60);
Wait(62);
PlayTone(SiF,60);
Wait(62);
PlayTone(Do,20);
Wait(42);
PlayTone(Si,20);
Wait(22);
PlayTone(Do,90);
Wait(92);
}
* 感想 [#ce4e7597]
今回すべてのプログラムが私一人で、書いたのではなく、同じ...
友達が路線を書くから、プログラムまで、すべてをきちんとと...
私は逆におおざっぱですべてをやりたかったと思った。
結局
やはり、センサーが色を探知するには、路線をきちんと書かな...
そして、ロボットが綺麗に動くようにするためのプログラムは...
二人で夜遅くまで10番教室で一緒に課題をやるのは、楽しかっ...
今回の課題でいろいろなことが学んでいて、友達からも学んだ...
ページ名: