- 追加された行はこの色です。
- 削除された行はこの色です。
[[2019a/Member]]
*課題について [#b7ba7c24]
#ref(./image4.png,課題)
A地点から出発 → M → K(直進) → L(ピンポン玉をつかむ) → K(右折) → J(一時停止の後、左折) → I(直進) → H(直進) → G(左折) → F → E → D(一時停止の後、直進) → C(直進) → B(一時停止) → シュート→ A地点に入る(ゴール)
交差点では1秒間停止し、丁字路では直角方向に進入する時のみ一時停止すること。
*ロボットについて [#w76e15bd]
#ref(./image1.jpeg,全体の写真)
#ref(./image2.jpeg,アーム部分)
↑全体のバランスを保つため,できるだけ部品を少なく,軽くした.一つのモーターで二つのアームが開閉するように作った.
#ref(./image3.jpeg,裏側)
↑急カーブでも小回りがきくように横幅を小さくした.後ろ側のタイヤは摩擦を減らすためだけなので一つだけつけるようにした.
*プログラムについて [#g4b8f002]
光センサーの値が36から47の間で得られたので、これを5分割して、~
47〜…白~
43〜47…白灰~
39〜43…灰~
36〜39…黒灰~
〜36…黒~
とした。
**定義 [#ncc5009d]
プログラムを簡略化するため、defineを用いた。
int black_time=30; //黒色を判別している時間の設定
#define migisenkai OnFwd(OUT_A); OnFwd(OUT_C); //右に旋回
#define usetsu OnFwd(OUT_A); Off(OUT_C); //右折
#define chokushin OnFwd(OUT_A); OnRev(OUT_C); //直進
#define sasetsu Off(OUT_A); OnRev(OUT_C); //左折
#define hidarisenkai OnRev(OUT_A); OnRev(OUT_C); //左に旋回
#define koutai OnRev(OUT_A); OnFwd(OUT_C); //後退
#define close OnFwd(OUT_B); Wait(20); Off(OUT_B); Wait(100); //アームを閉じる(ボールを掴む)
#define open OnRev(OUT_B); Wait(20); Off(OUT_B); Wait(100); //アームを開く
**サブルーチン [#ke58e0df]
-follow_line…交差点まで黒線の左側でライントレースするサブルーチン。
sub follow_line()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
while(FastTimer(0)<black_time){ //black_time=30になるまでまでの間繰り返す
if(SENSOR_2>=47){ //光センサーが47以上の時
migisenkai ClearTimer(0); //右に旋回、タイマー0をセット
}else if((SENSOR_2>=43)&&(SENSOR_2<47)){ //光センサーが43以上47未満の時
usetsu ClearTimer(0); //右折、タイマー0をセット
}else if((SENSOR_2>=39)&&(SENSOR_2<43)){ //光センサーが39以上43未満の時
chokushin ClearTimer(0); //直進、タイマー0をセット
}else if((SENSOR_2>=36)&&(SENSOR_2<39)){ //光センサーが36以上39未満の時
sasetsu ClearTimer(0); //左折、タイマー0をセット
}else if(SENSOR_2<36){ //光センサーが36未満の時
hidarisenkai } //左に旋回
}
Off(OUT_AC);
Wait(100);
ClearTimer(0);
}
-follow_line2…交差点まで黒線の右側をライントレースするサブルーチン。
sub follow_line2()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
while(FastTimer(0)<black_time){
if(SENSOR_2<36){
}else if((SENSOR_2>=36)&&(SENSOR_2<39)){
usetsu ClearTimer(0);
}else if((SENSOR_2>=39)&&(SENSOR_2<43)){
chokushin ClearTimer(0);
}else if((SENSOR_2>=43)&&(SENSOR_2<47)){
sasetsu ClearTimer(0);
}else if(SENSOR_2>=47){
hidarisenkai ClearTimer(0);
}
}
Off(OUT_AC);
Wait(100);
ClearTimer(0);
}
-cross_line…交差点を渡るサブルーチン。
sub cross_line()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
while(SENSOR_2<47){
chokushin }
while(SENSOR_2>36){
usetu }
Off(OUT_AC);
Wait(100);
ClearTimer(0);
}
**メインプログラム [#j16ef405]