- 追加された行はこの色です。
- 削除された行はこの色です。
[[2018a/Member]]
*課題2(ライントレース) [#t6718c46]
**課題条件 [#kbf0aba9]
画像
Aをスタート→B→Cで一時停止→Dで一時停止、Xの空き缶をキャッチして再びDに戻る→Eを直進→Fを左折→Gで一時停止→左折→Hで一時停止→右折→Iで一時停止→右折→Lを直進→Kを直進→Jで一時停止→空き缶をYに置きてJに戻る→Bで一時停止→左折→Aで停止
各交差点では、1秒間の一時停止が求められる。
*ロボット紹介 [#g7a2b87e]
**車体について [#deb49ede]
下の画像はロボットの全体写真である.
画像
前輪にはモーター2つ,後輪にはキャスターを取り付けた.
缶をつかむ機構はモーターとゴムを用いた.
**車体について [#w307979d]
前輪の車輪は最初,大きいものを使用していたが,細かいプログラミングの動作により車体が跳ねる事態が多く発生したため,小さいものに付け替えた. [#vca1f254]
前輪の車輪は最初,大きいものを使用していたが,細かいプログラミングの動作により車体が跳ねる事態が多く発生したため,小さいものに付け替えることで重心を低くし、車体の跳ねを抑えた. [#vca1f254]
画像
今回用いたギア比は,~
+モーター(1)に歯数8の歯車をつけ、2本目の棒(2)の歯数40の歯車に噛ませる。(ギア比8:40なので速度1/5)~
+2本目の棒には歯数40の歯車と歯数24の歯車がついている。(ギア比は40:24なので速度3/5)~
+歯数24の歯車と、3本目の棒(3)の歯数40の歯車に噛ませる。(ギア比は24:40なので速度3/5)~
3本目の棒にアームがついている。
よって、ギア比は(1/5)*(3/5)*(3/5)=(9/125)となる。モーターが14回転すると、アームのついている棒が1回転する。つまり、モーターが4回転するとアームが約100°(アームが上下する幅)回転することになる。
画像
*プログラム紹介 [#v036d419]
**プログラムについて [#sd5389e8]
#define turn_right Off(OUT_AC);OnFwd(OUT_A);OnRev(OUT_C);Wait(2);Off(OUT_AC);
#define turn_left Off(OUT_AC);OnFwd(OUT_C);OnRev(OUT_A);Wait(2);Off(OUT_AC);
#define run_right Off(OUT_AC);OnFwd(OUT_A);Wait(2);Off(OUT_AC);
#define run_left Off(OUT_AC);OnFwd(OUT_C);Wait(2);Off(OUT_AC);
#define arm_down Off(OUT_AC);OnRev(OUT_B);Wait(300);Off(OUT_B);
#define arm_up Off(OUT_AC);OnFwd(OUT_B);Wait(300);Off(OUT_B);
sub follow_line1(){ClearTimer(0);
while(FastTimer(0)<20)
if(SENSOR_2<37){
run_left;
}else if(SENSOR_2<42){
turn_left;ClearTimer(0);
}else if(SENSOR_2<47){
OnFwd(OUT_AC);ClearTimer(0);
}else if(SENSOR_2<50){
turn_right;ClearTimer(0);
}else if(SENSOR_2<55){
run_right;ClearTimer(0);
}}
sub follow_line2(){ClearTimer(0);
while(FastTimer(0)<20)
if(SENSOR_2<37){
run_right;
}else if(SENSOR_2<42){
turn_right;ClearTimer(0);
}else if(SENSOR_2<47){
OnFwd(OUT_AC);ClearTimer(0);
}else if(SENSOR_2<50){
turn_left;ClearTimer(0);
}else if(SENSOR_2<55){
run_left;ClearTimer(0);
}}
task main()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
OnFwd(OUT_AC);
Wait(100); //
ClearTimer(1);
while(FastTimer(1)<300)
if(SENSOR_2<37){
turn_left;
}else if(SENSOR_2<47){
OnFwd(OUT_AC);
}else if(SENSOR_2<55){
turn_right;
} //
follow_line1();
Wait(100);
OnFwd(OUT_AC);
Wait(70); //C終了
follow_line1();
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(140);
follow_line1();
Wait(100);
Off(OUT_AC); //D終了
OnFwd(OUT_AC);
Wait(100);
arm_down;
until(SENSOR_2<37){
OnRev(OUT_AC);
}
OnRev(OUT_AC);
Wait(40); //空き缶を持ち、元の位置に戻る。
ClearTimer(1);
while(FastTimer(1)<300)
if(SENSOR_2<37){
turn_left;
}else if(SENSOR_2<47){
OnFwd(OUT_AC);
}else if(SENSOR_2<55){
turn_right;
}
follow_line1();
OnFwd(OUT_A);
Wait(50); //Eを直進
ClearTimer(1);
while(FastTimer(1)<1450)
if(SENSOR_2<37){
turn_left;
}else if(SENSOR_2<47){
OnFwd(OUT_AC);
}else if(SENSOR_2<55){
turn_right;
}
follow_line1();
Wait(100); //G終了
ClearTimer(1);
while(FastTimer(1)<3400)
if(SENSOR_2<37){
turn_left;
}else if(SENSOR_2<47){
OnFwd(OUT_AC);
}else if(SENSOR_2<55){
turn_right;
}
follow_line1();
Wait(100); //Hで一時停止
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(190);
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(40);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(23);
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(3);
OnFwd(OUT_AC);
Wait(60);
ClearTimer(1);
while(FastTimer(1)<320)
if(SENSOR_2<37){
turn_right;
}else if(SENSOR_2<47){
OnFwd(OUT_AC);
}else if(SENSOR_2<55){
turn_left;
}
follow_line1();
Wait(100); //I終了
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(60);
ClearTimer(1);
while(FastTimer(1)<200)
if(SENSOR_2<37){
turn_right;
}else if(SENSOR_2<47){
OnFwd(OUT_AC);
}else if(SENSOR_2<55){
turn_left;
}
follow_line2();
OnFwd(OUT_C); //Lを通過
Wait(50);
follow_line2();
OnFwd(OUT_C); //Kを通過
Wait(50);
follow_line2();
Wait(100);
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(200);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(40);
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(20);
OnFwd(OUT_AC);
Wait(100);
arm_up;
until(SENSOR_2<37){
OnRev(OUT_AC);
}
OnRev(OUT_AC);
Wait(40); //缶置き終了
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(500);
until(SENSOR_2<45){
OnFwd(OUT_AC);
}
ClearTimer(1);
while(FastTimer(1)<350)
if(SENSOR_2<37){
turn_right;
}else if(SENSOR_2<47){
OnFwd(OUT_AC);
}else if(SENSOR_2<55){
turn_left;
}
follow_line2();
Wait(100);
OnFwd(OUT_AC);
Wait(40);
ClearTimer(1);
while(FastTimer(1)<800)
if(SENSOR_2<37){
turn_right;
}else if(SENSOR_2<47){
OnFwd(OUT_AC);
}else if(SENSOR_2<55){
turn_left;
}
OnFwd(OUT_AC);
Wait(400);
Off(OUT_AC);
}
**交差点判断について [#ie66efc6]
** [#b57c587e]
*感想・考察 [#u12c3c89]