[[2015a/MemberOnly]]
*課題2 [#fced38df]
#contents
*課題 [#b68c7c14]
ライントレースをして途中のボールをゴールまで持っていく(A→B)下の図を参照
#ref(./2015a-mission2.png)
*製作するにあたって [#vfd57e14]
前回作った達筆ロボの経験を生かして今回は1から考えてやりました。
*工夫した点 [#pdf83222]
**重りを付けて機体を安定させる [#j630acad]
私たちのチームで作ったのはタイヤを回転させてボールをとる仕組みになっていて、タイヤをたくさん使う分そっち側に重心がよって機体が安定しなかったので安定させるために反対側に大きなタイヤを付けてみるとしっかりライントレースをして最後まで安定して進めたのでこの様な形にしました。(一応タイヤを何個か付けれるようにした。)下の図参照
#ref(./IMG_2581.JPG,30%)
**球をとらえる [#z488f35e]
私たちのチームではボールをとらえるのにタイヤの回転を利用した。タイヤは二段にしてボール全体に回転したタイヤを当てるようにした。上のモーターに対して歯車を4つにすることでタイヤを内側に回転させるようした。モーターが回転したときモーターの振動でモーターが落ちないようにブロックをなるべく多くつけてモーターを安定させた。下の図参照
#ref(./IMG_2584.JPG,30%)
**プログラム [#qe6cb40b]
while文とif文でライントレースをした。まずライントレースをするには黒か白かを感知しないといけないのでセンサーを使い光の返ってくる量を測ってその数でif文を使いジグザグを利用しライントレースをした。他にもタイマーと変数を使って急な曲がり角や交差点に対応できるようにした。
*打ち込んだプログラム [#j9794b8b]
#define THRESHOLD 48
int t = 0;//戻す時の時間を入れる変数t
int n = 0;//交差点を認識するために変数nを用意する
task main(){
OnFwd(OUT_C);
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0); //0番目のタイマーをリセット
while (n<10){// 黒の線上にいすぎるとwhile文を抜ける
if (SENSOR_2<THRESHOLD-11){ //黒い時右に曲がる
OnFwd(OUT_A);Off(OUT_B);
n=n+1; //黒の時nをふやす
}else{
OnFwd(OUT_B);OnRev(OUT_A);//白の時左に曲がる
ClearTimer(0);
}
}
t=FastTimer(0);//黒いときにいる時間を変数にいれる
OnRev(OUT_A);Off(OUT_B);
Wait(t);
OnFwd(OUT_AB);//線を無視して進む
Wait(100);
n = 0;//nの値は次のために0にする
while (n<10){// 今度は白の時に戻るようにする
if (SENSOR_2<THRESHOLD-11){ //黒い時右に曲がる
OnFwd(OUT_A);OnRev(OUT_B);
ClearTimer(0);
}else{
OnFwd(OUT_B);Off(OUT_A);//白の時左に曲がる
n=n+1; //白の時nをふやす
}
}
t=FastTimer(0);//白いときにいる時間を変数にいれる
OnRev(OUT_B);Off(OUT_A);
Wait(t);
Off(OUT_AB);
OnRev(OUT_C);
}
*問題点 [#a1fca077]
上記にも書いたがタイヤが重たすぎて時々タイヤが落ちてしまった。
*まとめ [#icef73d2]
自分たちで考えて実際に作ってみると時間がたくさん掛かってしまって作るのが時間ぎりぎりになってしまった。今度は時間に余裕が持てるようにしたい。プログラムを作る時最初の方はいろんな文を使い分けるのが難しかったがだんだん慣れていき何とか時間までに間に合った。