- 追加された行はこの色です。
- 削除された行はこの色です。
[[2017b/Member]]
#contents
*課題 [#r5d17a4d]
下の図のようなコースを各チームで作成し、「ミッション」を遂行するためのロボットを作成せよ。
**コース [#cf37af2e]
#ref(2017b-mission2.png)
**ミッション [#f647d2cb]
次のコースで黒い線に沿って動き、紙コップを移動させるロボットを製作せよ。(自分は第2コース)
#br
第2コース
+Dをスタート
+Cを直進
+Bを左折
+Pを左折(一時停止)
+Qを直進
+Rを左折
+Fを左折
+Sを直進(一時停止)
+Y地点の紙コップを取得してコースに戻る
+Sを直進(一時停止)
+Qを左折(一時停止)
+Rを直進
+X地点に紙コップを置いてコースに戻る
+Pを左折
+Bを左折(一時停止)
+A地点へ(ゴール)
*機体説明 [#i0bb4723]
#ref(Image_72337c2.jpg)
#ref(Image_36990f0.jpg)
#ref(Image_f47d051.jpg)
#ref(Image_6373412.jpg)
*プログラム [#hc8a0a55]
#define right_dai OnFwd(OUT_C);OnRev(OUT_A);
#define right_syou OnFwd(OUT_C);Off(OUT_A);
#define left_dai OnFwd(OUT_A);OnRev(OUT_C);
#define left_syou OnFwd(OUT_A);Off(OUT_C);
#define middle 40
#define go(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC);
#define TURN_RIGHT OnFwd(OUT_C);OnRev(OUT_A);until(SENSOR_2<=40);Off(OUT_AC);
#define TURN__RIGHT(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t);
#define TURN_LEFT(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);
#define cross_stop Off(OUT_AC);Wait(150);
#define back OnRev(OUT_AC);Wait(60);
#define tukamu OnFwd(OUT_B);Wait(10);Off(OUT_B);
#define hanasu OnRev(OUT_B);Wait(5);Off(OUT_B);
#define right_dai OnFwd(OUT_C);OnRev(OUT_A); //右に小回り
#define right_syou OnFwd(OUT_C);Off(OUT_A); //右に大回り
#define left_dai OnFwd(OUT_A);OnRev(OUT_C); //左に小回り
#define left_syou OnFwd(OUT_A);Off(OUT_C); //左に大回り
#define middle 40 //閾値
#define go(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC); //t秒間前進
#define TURN_RIGHT OnFwd(OUT_C);OnRev(OUT_A);until(SENSOR_2<=40);Off(OUT_AC);//ラインを見つけるまで右に小回り
#define TURN__RIGHT(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t); //t秒間右に小回り
#define TURN_LEFT(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t); //t秒間左に小回り
#define stop Off(OUT_AC);Wait(150); //停止
#define back OnRev(OUT_AC);Wait(60); //バック
#define tukamu OnFwd(OUT_B);Wait(10);Off(OUT_B); //アームを閉じる
#define hanasu OnRev(OUT_B);Wait(5);Off(OUT_B); //アームを開く
sub line()
sub line() //EF間以外
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_LIGHT); //センサーを端子2に接続
ClearTimer(0);
while(FastTimer(0)<20){
if(SENSOR_2>middle+5)
while(FastTimer(0)<20){ //0.2秒未満ならループ、超えると交差点判定
if(SENSOR_2>middle+5) //閾値+5より大きいとき右小回り
{
right_dai
ClearTimer(0);
ClearTimer(0); //タイマーリセット
}
else if(SENSOR_2>middle+3)
else if(SENSOR_2>middle+3) //閾値+3より大きく+5未満のとき右大回り
{
right_syou
ClearTimer(0);
}
else if(SENSOR_2>middle)
else if(SENSOR_2>middle) //閾値のとき前進
{
OnFwd(OUT_AC);
ClearTimer(0);
}
else if(SENSOR_2>middle-3)
else if(SENSOR_2>middle-3) //閾値-3より大きく±0までのとき左大回り
{
left_syou
ClearTimer(0);
}
else
else //閾値が-3以下のとき左小回り
{
left_dai;
left_dai; //ここでタイマーをリセットしていないので左小回りの時間で交差点を判断する
}
}
Off(OUT_AC);
}
sub s()
{
sub s() //EF間
{
SetSensor(SENSOR_1, SENSOR_TOUCH);
ClearTimer(0);
while(FastTimer(0)<1400){
if(SENSOR_2>middle+5)
{
right_dai
while(FastTimer(0)<1500){ //15秒間実行する
if(SENSOR_2>middle+5) //閾値+5より大きいとき右小回り
{
right_dai
}
else if(SENSOR_2>middle+3) //閾値+3より大きく+5未満のとき右大回り
{
right_syou
}
else if(SENSOR_2>middle) //閾値のとき前進
{
OnFwd(OUT_AC);
}
else if(SENSOR_2>middle-3) //閾値-3より大きく±0までのとき左大回り
{
left_syou
}
else //閾値が-3以下のとき左小回り
{
left_dai;
}
else if(SENSOR_2>middle+3)
{
right_syou
}
else if(SENSOR_2>middle)
{
OnFwd(OUT_AC);
}
else if(SENSOR_2>middle-3)
{
left_syou
}
else
{
left_dai;
}
}
Off(OUT_AC);
}
}
task main()
{
line();//c
cross_stop;
go(30);
TURN_RIGHT;
line();
task main()
{
line(); //D〜C
stop;
PlaySound(SOUND_CLICK); //音
go(30); //Cの交差点を進行方向に飛び出す
TURN_RIGHT; //方向調整
line(); //C〜B
stop;
PlaySound(SOUND_CLICK);
line();
cross_stop;//b
go(20);
TURN_LEFT(50);
line();
TURN_RIGHT;
line();//p
cross_stop;
go(20); //角度調整
TURN_LEFT(50); //角度調整
line(); //B〜P
TURN_RIGHT; //方向調整
line(); //B〜P
stop;
PlaySound(SOUND_CLICK);
TURN_LEFT(30);
go(20);
line();//pq
go(30);
TURN_RIGHT;
TURN_LEFT(30); //方向調整
go(20); //角度調整
line(); //P〜Q
go(30); //交差点判断したQを突き抜ける
TURN_RIGHT; //方向調整
PlaySound(SOUND_CLICK);
line();//r
line(); //Q〜R
PlaySound(SOUND_CLICK);
line();//e
line(); //R〜E
PlaySound(SOUND_CLICK);
line();
s();
line();//f
s(); //E〜Fの最後のカーブを曲がったぐらい
line(); //s()の時間が経ってからFまで
PlaySound(SOUND_CLICK);
go(20);
TURN_LEFT(70);
line();//s
go(20); //角度調整
TURN_LEFT(70); //角度調整
line(); //F〜S
PlaySound(SOUND_CLICK);
cross_stop;
TURN__RIGHT(80);//つかむ
go(60);
tukamu;
TURN_LEFT(100);
go(100);
line();
go(20);//s2
line();//q
cross_stop;
TURN_LEFT(30);
go(20);
line();//r
TURN__RIGHT(150);
hanasu;
back(100);
TURN_LEFT(70);
go(120);
line();//p
line();
line();//b
cross_stop;
line();
TURN_LEFT(20);
line();
line();
go(50);
}
stop;
TURN__RIGHT(80); //つかむための位置調整
go(60); //つかむための位置調整2
tukamu; //つかむ
TURN_LEFT(100); //方向調整
go(100); //位置調整
line(); //S〜S右側の円
PlaySound(SOUND_CLICK);
go(20); //交差点Sを直進
line(); //S〜Q
PlaySound(SOUND_CLICK);
stop;
TURN_LEFT(30); //角度調整
go(20); //角度調整
line(); //Q〜R
PlaySound(SOUND_CLICK);
TURN__RIGHT(150); //紙コップを離す方向に車体を向ける
hanasu; //紙コップを離す
back(100); //バック
TURN_LEFT(70); //方向調整
go(120); //位置調整
line(); //R〜P
PlaySound(SOUND_CLICK);
line(); //P〜B
stop;
PlaySound(SOUND_CLICK);
line(); //B〜A
go(50); //GOAL
}
*感想・反省 [#b15e76db]