- 追加された行はこの色です。
- 削除された行はこの色です。
目次
#contents
*課題2:黒い線上を動くロボット [#s2a9e895]
次のような周回コース(黒い線)を動くロボットを作成せよ。
-通常の交差点が2箇所以上ある
-ロータリー型の交差点が1箇所以上ある (ロータリーでは反時計まわりに進む)
-直角に曲がるコーナーおよびそのコーナーをショートカットするコース(点線)が存在する
-急なヘアピンカーブが1箇所以上ある
-スタート地点に目印がある
-黒い線の幅は15〜20mm程度
センサー、モーターはいくつ使ってもよい。プログラムは次の2つを作成すること。
1. 直角のコーナーを通る
2. 直角のコーナーを通らない(近道する)
ただし互いに逆方向に周回すること。
*メンバー紹介 [#qf933802]
-イシイ(近道担当)
-ゆきち(直角コーナー担当)
*課題 [#q735ffe3]
**コースについて [#e3f78d38]
**ロボットについて [#ic2a75be]
**問題点について [#t0bab1b1]
*プログラム [#o770212f]
**イシイ [#d645274a]
#define go(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C); //直進
#define turn_r(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_A+OUT_C); //右旋回
#define turn_l(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t);Off(OUT_A+OUT_C); //左旋回
#define THRESHOLD 45 //閾値
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_3,SENSOR_LIGHT);
ClearTimer(0);
while(FastTimer(0)<=500)
{
OnFwd(OUT_A+OUT_C);
if(SENSOR_1<THRESHOLD)
{
turn_l(10);
}
if(SENSOR_3<THRESHOLD)
{
go(20);
}
}
ClearTimer(0);
while(FastTimer(0)<=800)
{
OnFwd(OUT_A+OUT_C);
if(SENSOR_3<THRESHOLD)
{
turn_r(10);
}
if(SENSOR_1<THRESHOLD)
{
go(20);
}
}
ClearTimer(0);
while(FastTimer(0)<=150)
{
OnFwd(OUT_A+OUT_C);
if(SENSOR_3<THRESHOLD)
{
turn_r(10)
}
if(SENSOR_1<THRESHOLD)
{
go(50);
turn_r(70);
}
}
ClearTimer(0);
while(FastTimer(0)<=350)
{
OnFwd(OUT_A+OUT_C);
if(SENSOR_1<THRESHOLD)
{
turn_l(10)
}
}
ClearTimer(0);
while(FastTimer(0)<=250)
{
OnFwd(OUT_A+OUT_C);
if(SENSOR_1<THRESHOLD)
{
turn_l(10);
}
if(SENSOR_3<THRESHOLD)
{
go(50)
turn_r(60);
}
}
ClearTimer(0);
while(FastTimer(0)<=550)
{
OnFwd(OUT_A+OUT_C);
if(SENSOR_3<THRESHOLD)
{
turn_r(20);
}
}
ClearTimer(0);
while(FastTimer(0)<=300)
{
OnFwd(OUT_A+OUT_C);
if(SENSOR_3<=THRESHOLD)
{
turn_r(10);
}
if(SENSOR_1<=THRESHOLD)
{
go(50);
turn_r(80);
}
}
ClearTimer(0);
while(FastTimer(0)<=350)
{
OnFwd(OUT_A+OUT_C);
if(SENSOR_1<THRESHOLD)
{
turn_l(10)
}
}
ClearTimer(0);
while(FastTimer(0)<=250)
{
OnFwd(OUT_A+OUT_C);
if(SENSOR_1<THRESHOLD)
{
turn_l(10);
}
if(SENSOR_3<THRESHOLD)
{
go(50)
turn_r(100);
}
}
ClearTimer(0);
while(FastTimer(0)<=400)
{
OnFwd(OUT_A+OUT_C);
if(SENSOR_3<=THRESHOLD)
{
turn_r(10);
}
if(SENSOR_1<=THRESHOLD)
{
go(25);
OnFwd(OUT_A);
Wait(20);
Off(OUT_A);
}
}
ClearTimer(0);
while(FastTimer(0)<=600)
{
OnFwd(OUT_A+OUT_C);
if(SENSOR_3<=THRESHOLD)
{
OnRev(OUT_A+OUT_C);
Wait(10);
Off(OUT_A+OUT_C);
turn_r(20);
}
}
ClearTimer(0);
while(FastTimer(0)<=400)
{
OnFwd(OUT_A+OUT_C);
if(SENSOR_1<THRESHOLD)
{
turn_l(10);
}
if(SENSOR_3<THRESHOLD)
{
go(25);
}
}
while(SENSOR_3<THRESHOLD)
{
OnFwd(OUT_A+OUT_C);
if(SENSOR_1<THRESHOLD)
{
turn_l(10);
}
}
Off(OUT_A+OUT_C);
}
**ゆきち [#i0f9386d]
#define GO(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C); //前にt秒進む
#define THRESHOLD 45 //閾値
sub RIGHT_CURVE()
{
if (SENSOR_3>THRESHOLD)
{
OnFwd(OUT_A+OUT_C);
}
if (SENSOR_3<THRESHOLD)
{
Off(OUT_C);
OnFwd(OUT_A);
}
}
sub LEFT_CURVE()
{
if (SENSOR_1>THRESHOLD)
{
OnFwd(OUT_A+OUT_C);
}
if (SENSOR_1<THRESHOLD)
{
Off(OUT_A);
OnFwd(OUT_C);
}
}
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_3,SENSOR_LIGHT);
ClearTimer(0);
while(FastTimer(0)<=330)
{
RIGHT_CURVE();
}
while(FastTimer(0)<=850)
{
if ((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD))
{
OnFwd(OUT_A+OUT_C);
}
if ((SENSOR_1<THRESHOLD)&&(SENSOR_3>THRESHOLD))
{
OnRev(OUT_A);
OnFwd(OUT_C);
}
}
while(FastTimer(0)<=1100)
{
LEFT_CURVE();
}
while(SENSOR_3>THRESHOLD)
{
LEFT_CURVE();
}
Off(OUT_A+OUT_C);Wait(50);GO(35);
OnFwd(OUT_A);OnRev(OUT_C);Wait(20);
while(SENSOR_1>THRESHOLD)
{
OnFwd(OUT_A);
OnRev(OUT_C);
}
Off(OUT_A+OUT_C);
OnFwd(OUT_A+OUT_C);
while(SENSOR_3>THRESHOLD)
{
LEFT_CURVE();
}
Off(OUT_A);OnFwd(OUT_C);Wait(15);
while(SENSOR_3>THRESHOLD)
{
LEFT_CURVE();
}
Off(OUT_A+OUT_C);Wait(50);GO(35);
OnFwd(OUT_A);OnRev(OUT_C);Wait(20);
while(SENSOR_1>THRESHOLD)
{
OnFwd(OUT_A);OnRev(OUT_C);
}
ClearTimer(0);
while(FastTimer(0)<300)
{
LEFT_CURVE();
}
GO(50);
while(FastTimer(0)<700||SENSOR_1>THRESHOLD||SENSOR_3>THRESHOLD)
{
if ((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD))
{
OnFwd(OUT_A+OUT_C);
}
if ((SENSOR_1<THRESHOLD)&&(SENSOR_3>THRESHOLD))
{
OnRev(OUT_A);
OnFwd(OUT_C);
}
}
Off(OUT_A+OUT_C);Wait(50);GO(35);
OnFwd(OUT_A);OnRev(OUT_C);Wait(20);
while(SENSOR_1>THRESHOLD)
{
OnFwd(OUT_A);
OnRev(OUT_C);
}
Off(OUT_A+OUT_C);
OnFwd(OUT_A+OUT_C);
while(SENSOR_3>THRESHOLD)
{
LEFT_CURVE();
}
Off(OUT_A);OnFwd(OUT_C);Wait(15);
while(SENSOR_3>THRESHOLD)
{
LEFT_CURVE();
}
Off(OUT_A+OUT_C);Wait(50);GO(35);
OnFwd(OUT_A);OnRev(OUT_C);Wait(20);
while(SENSOR_1>THRESHOLD)
{
OnFwd(OUT_A);OnRev(OUT_C);
}
OnFwd(OUT_A+OUT_C);
ClearTimer(0);
while(SENSOR_1>THRESHOLD||SENSOR_3>THRESHOLD)
{
LEFT_CURVE();
}
GO(15);
while(SENSOR_1>THRESHOLD||SENSOR_3>THRESHOLD)
{
LEFT_CURVE();
}
GO(10);
while(SENSOR_1>THRESHOLD||SENSOR_3>THRESHOLD)
{
if ((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD))
Off(OUT_A);OnFwd(OUT_C); {
OnFwd(OUT_A+OUT_C);
}
if ((SENSOR_1<THRESHOLD)&&(SENSOR_3>THRESHOLD))
{
OnRev(OUT_A);OnFwd(OUT_C);
}
if ((SENSOR_1>THRESHOLD)&&(SENSOR_3<THRESHOLD))
{
OnRev(OUT_C);OnFwd(OUT_A);
}
}
Off(OUT_A+OUT_C);
}
*感想 [#m39f9cd2]
-イシイ~
タイマーを上手く利用して動かすことができたが、時間の調整がとても大変だった。
-ゆきち~
*コメントをどうぞ [#d155cfe7]
#comment