- 追加された行はこの色です。
- 削除された行はこの色です。
[[2017a/Member]]
#課題について
#contents
*課題について [#i4ad9c50]
決められたレールの上をライントレースして走るロボットの作成である。光センサーを利用してレールの閾値を読み取りながら進む。
*目標 [#x8e24986]
#ref(2017a-mission2.png);
ルートはA→E→F→Q→T→G→S→E→A。EF間の急カーブを通り、交差点Q・T・S・P・Eに差し掛かる時点で一度停止し、音を鳴らしたら、方向転換を行うプログラムを作る。
*プログラム [#j18737fa]
**定義 [#ae4283d3]
task_mainの簡略化のためにline_traceをここで定義した。
#define TR1 OnFwd(OUT_A);OnRev(OUT_C);
#define TR0 OnFwd(OUT_A);Off(OUT_C);
#define TL0 OnFwd(OUT_C);Off(OUT_A);
#define TL1 OnFwd(OUT_C);OnRev(OUT_A);
#define stop(t) Off(OUT_AC);Wait(t);
#define sound_up PlaySound(SOUND_UP);
#define line_trase while(FastTimer(0)<tmax){if(SENSOR_2 >senter +13){TR1;ClearTimer(0);}else if(SENSOR_2 >senter +7){TL0;ClearTimer(0);}\
else if(SENSOR_2 >senter +0){OnFwd(OUT_AC);ClearTimer(0);}else if(SENSOR_2 >senter -2){TL; ClearTimer(0);}\
else{SetPower(OUT_C,0);TL1;}if(FastTimer(0)>tmax){ClearTimer(0);}}n++;SetPower(OUT_C,7);
#define line_trase_curve while(FastTimer(0)<tmid){if(SENSOR_2 >senter +13){TR1;ClearTimer(0);}else if(SENSOR_2 >senter +7){right;ClearTimer(0);}\
else if(SENSOR_2 >senter +0){OnFwd(OUT_AC);ClearTimer(0);}else if(SENSOR_2 >senter -1){left; ClearTimer(0);}\
else{TL1;}if(FastTimer(0)>tmid){ClearTimer(0);}}n++;
**交差点判断 [#z6a2ebb0]
メンバーのプログラムを参考にした。line_A,B,C,D,Eで交差点を判断する。
sub line_A()
{
ClearTimer(0);
line_trase;
if((n==1)||(n==4)||(n==5)||(n==11)){
sound_up;
}
Off(OUT_AC);
}
sub line_B()
{
ClearTimer(0);
line_trase_curve;
if((n==2)||(n==9)||(n==12)){
sound_up;
stop(100);
}
Off(OUT_AC);
}
sub line_C()
{
ClearTimer(0);
line_trase;
if((n==7)||(n==8)){
sound_up;
stop(100);
TR1;Wait(45);
OnFwd(OUT_AC);Wait(20);
}
Off(OUT_AC);
}
sub line_D()
{
ClearTimer(0);
line_trase_curve;
if(n==6){
sound_up;
}
Off(OUT_AC);
}
sub line_E()
{
ClearTimer(0);
line_trase;
if(n==13){
sound_up;
}
Off(OUT_AC);
}
task main()
{
SetSensor(SENSOR_2, SENSOR_LIGHT);
line_A();
line_B();
line_C();
line_A();
line_A();
line_A();
line_D();
line_D();
line_B();
line_C();
line_A();
line_B();
line_E();
}
*反省 [#nc5b36ba]
今回は単純にライントレースをするプログラムは作れたのだが、交差点を判断するところが全くわからずメンバーに教えてもらいながらも結局最後までできなかった。原因はF地点での直角ラインに差し掛かった時、自分の書いたプログラムでは音を出して後進し、そこから再びライントレースを開始することで直角ラインに差し掛かるタイミングを改善するものであったが、うまく直角ラインを判断できずに何度も失敗したからだ。
*感想 [#a8bc795b]
今回で光センサーが一気に嫌いになった。もうあんな不安定なパーツは使いたくないと思ったが、課題3でも使うのでそれまでは我慢しよう。しかし今回苦しんだおかげでいろいろ学ぶことがあったのでそれを課題3に役立てたいと思う。