2016b/Member/Megukyo/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*目次 [#cd6cb949]
#contents
*車体 [#nddb6384]
#ref(2016b/Member/Megukyo/Mission2/syatai.jpg,50%,車体)
#ref(2016b/Member/Megukyo/Mission2/CzKSfxoRHZFCBoz1487743255_1487743300.jpg,50%,車体)
車体の全容はこのようになっており、取り付けられた光センサーによってライントレースを、アームによってボールを捕まえたり離したりする。
#ref(2016b/Member/Megukyo/Mission2/armsystem.jpg,50%,車体)
腕の構造は写真のようになっており、先端に取り付けられた超音波センサーによってボールとの距離を測りながら腕を下すことができる。
#ref(2016b/Member/Megukyo/Mission2/armcatch.jpg,50%,車体)
ボールを捕まえると、腕、車体がそのままストッパーとなり、ボールを離さない。
接写するとこのようになっている。
#ref(2016b/Member/Megukyo/Mission2/sessyarm.jpg,50%,車体)
*プログラム [#eb4cfbf0]
#ref(2016b/Mission2/2016b-mission2.png,50%,コース)
ライントレースは、B→R→P→Q→Q→R→P→S→Cという経路をたどるようにプログラムされている。
#define BLACK 25
#define GLAY 38
#define WHITE 52
#define linetraceseigenbyousuu 400
#define leftsennkai OnRev(OUT_B,70);OnFwd(OUT_A,0);
#define rightsennkai OnRev(OUT_A,70);OnFwd(OUT_B,100); Off(OUT_AB);//右折用旋回カーブは70でOK
#define turn_left OnRev(OUT_B,80);OnFwd(OUT_A,30);
#define turn_right OnRev(OUT_A,80);OnFwd(OUT_B,30);
#define rightturnkai 2,5
#define straightkai 1,3,4,6
#define go_forward OnRev(OUT_AB,50);
task main()
{
SetSensorLight(S1);
SetSensorLowspeed(S2);
int nOnline=0;
long t0 = CurrentTick();
long t1 = CurrentTick();
while (true)
{
while (CurrentTick()-t0 <= linetraceseigenbyousuu)
{
if(SENSOR_1 < BLACK+5)
{
rightsennkai
}
else
{
if(SENSOR_1 < GLAY)
{
turn_right;
}
else
{
turn_left;
}
t0 = CurrentTick();
t1 = CurrentTick();
}
}
if(CurrentTick()-t1 <= 1500)
{
Off(OUT_AB);
}
else
{
PlaySound(SOUND_DOWN);
nOnline+=1;
leftsennkai;Wait(800);Off(OUT_AB);
if(nOnline==1)
{
go_forward;Wait(800);
}
else if(nOnline==3)
{
go_forward;Wait(800);
while(SENSOR_2 < 20)
{
go_forward;
Wait(500);
Off(OUT_AB);
}
OnFwd(OUT_C,-12);
Wait(3200);
Off(OUT_ABC);
}
else if(nOnline==4)
{
go_forward;Wait(800);
}
else if(nOnline==6)
{
go_forward;Wait(800);
}
else if(nOnline==2)
{
turn_right;Wait(2800);
}
else if(nOnline==5)
{
turn_right;Wait(2800);
}
else if(nOnline==7)
{
turn_right;Wait(1200);
}
else if(nOnline==8)
{
turn_right;Wait(1200);
OnFwd(OUT_C,30);
go_forward;Wait(800);
}
t1 = CurrentTick();
}
t0 = CurrentTick();
}
}
*結果 [#n0158824]
ライントレースのプログラムそのものは上手く動いたが、腕を上げ下ろしするプログラムを入れると交差点の判定をしなくなったり、指定した交差点の検出回数で別の行動に移らないなどの問題が発生し、結局解決することができなかった。
*感想 [#z4bb0114]
残念ながら次の課題に移るまでに完成させることができなかった。しかし、ライントレースだけでも完成できたのは収穫であったように思う。
終了行:
*目次 [#cd6cb949]
#contents
*車体 [#nddb6384]
#ref(2016b/Member/Megukyo/Mission2/syatai.jpg,50%,車体)
#ref(2016b/Member/Megukyo/Mission2/CzKSfxoRHZFCBoz1487743255_1487743300.jpg,50%,車体)
車体の全容はこのようになっており、取り付けられた光センサーによってライントレースを、アームによってボールを捕まえたり離したりする。
#ref(2016b/Member/Megukyo/Mission2/armsystem.jpg,50%,車体)
腕の構造は写真のようになっており、先端に取り付けられた超音波センサーによってボールとの距離を測りながら腕を下すことができる。
#ref(2016b/Member/Megukyo/Mission2/armcatch.jpg,50%,車体)
ボールを捕まえると、腕、車体がそのままストッパーとなり、ボールを離さない。
接写するとこのようになっている。
#ref(2016b/Member/Megukyo/Mission2/sessyarm.jpg,50%,車体)
*プログラム [#eb4cfbf0]
#ref(2016b/Mission2/2016b-mission2.png,50%,コース)
ライントレースは、B→R→P→Q→Q→R→P→S→Cという経路をたどるようにプログラムされている。
#define BLACK 25
#define GLAY 38
#define WHITE 52
#define linetraceseigenbyousuu 400
#define leftsennkai OnRev(OUT_B,70);OnFwd(OUT_A,0);
#define rightsennkai OnRev(OUT_A,70);OnFwd(OUT_B,100); Off(OUT_AB);//右折用旋回カーブは70でOK
#define turn_left OnRev(OUT_B,80);OnFwd(OUT_A,30);
#define turn_right OnRev(OUT_A,80);OnFwd(OUT_B,30);
#define rightturnkai 2,5
#define straightkai 1,3,4,6
#define go_forward OnRev(OUT_AB,50);
task main()
{
SetSensorLight(S1);
SetSensorLowspeed(S2);
int nOnline=0;
long t0 = CurrentTick();
long t1 = CurrentTick();
while (true)
{
while (CurrentTick()-t0 <= linetraceseigenbyousuu)
{
if(SENSOR_1 < BLACK+5)
{
rightsennkai
}
else
{
if(SENSOR_1 < GLAY)
{
turn_right;
}
else
{
turn_left;
}
t0 = CurrentTick();
t1 = CurrentTick();
}
}
if(CurrentTick()-t1 <= 1500)
{
Off(OUT_AB);
}
else
{
PlaySound(SOUND_DOWN);
nOnline+=1;
leftsennkai;Wait(800);Off(OUT_AB);
if(nOnline==1)
{
go_forward;Wait(800);
}
else if(nOnline==3)
{
go_forward;Wait(800);
while(SENSOR_2 < 20)
{
go_forward;
Wait(500);
Off(OUT_AB);
}
OnFwd(OUT_C,-12);
Wait(3200);
Off(OUT_ABC);
}
else if(nOnline==4)
{
go_forward;Wait(800);
}
else if(nOnline==6)
{
go_forward;Wait(800);
}
else if(nOnline==2)
{
turn_right;Wait(2800);
}
else if(nOnline==5)
{
turn_right;Wait(2800);
}
else if(nOnline==7)
{
turn_right;Wait(1200);
}
else if(nOnline==8)
{
turn_right;Wait(1200);
OnFwd(OUT_C,30);
go_forward;Wait(800);
}
t1 = CurrentTick();
}
t0 = CurrentTick();
}
}
*結果 [#n0158824]
ライントレースのプログラムそのものは上手く動いたが、腕を上げ下ろしするプログラムを入れると交差点の判定をしなくなったり、指定した交差点の検出回数で別の行動に移らないなどの問題が発生し、結局解決することができなかった。
*感想 [#z4bb0114]
残念ながら次の課題に移るまでに完成させることができなかった。しかし、ライントレースだけでも完成できたのは収穫であったように思う。
ページ名: