2017b/Member/yan/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#contents
*課題 [#i22953a3]
黒い線に沿って動き、紙コップを移動させるロボットを製作
Dをスタート➡ Cを直進➡ Bを左折➡ Pを左折(一時停止)➡ Qを直進➡ Rを左折➡ Fを左折➡ Sを直進(一時停止)➡ Y地点の紙コップを取得してコースに戻る➡ Sを直進(一時停止)➡ Qを左折(一時停止)➡ Rを直進➡ X地点に紙コップを置いてコースに戻る➡ Pを左折➡ B を左折(一時停止)➡ A地点へ(ゴール)
#ref(2017b/Member/yan/Mission2/16.png,16.7kb)
*ロボットの本体説明 [#m0cc17e8]
コップを取る部分とセンサ。一つのモーターはコップを取る部分の昇降をコントロールする。写真の赤丸で囲ってあるものが光センサになります。光センサは、ライントレースする際に白か黒(明暗)かの判断をするためにあります。光センサーと紙を平行にする。そうすることで、光センサの判断がされてからすぐにモーターが動き、誤動作が少なくなると考えたからです。
*全体の部分 [#mc185717]
#ref(2017b/Member/yan/Mission2/23.jpg,82.8kb)
側面図
#ref(2017b/Member/yan/Mission2/8.jpg,17.2kb)
正面図
#ref(2017b/Member/yan/Mission2/9.png,47.0kb)
*センサーとコップをとる部分[#i673c9bc]
センサーの位置をできるだけ前輪の車軸の近くにすることで急カーブでもスムーズに動作するロボットを作ることができた
#ref(2017b/Member/yan/Mission2/20.jpg,177.8kb)
*コップをX点に置く時に、赤い部分は上がるとコップを前に押す。 [#c159a37d]
#ref(2017b/Member/yan/Mission2/21.jpg,197.1kb)
*プログラミングの全体説明 [#e0a273b4]
光の強さによって五段階に分かれる
#ref(2017b/Member/yan/Mission2/6.png,26.1kb)
task mainやサブルーチンで使用するものを以下のように定義した。
#define TLL OnFwd(OUT_A,30); OnRev(OUT_C,30); 左に回る
#define TLL2 OnFwd(OUT_A,60); OnRev(OUT_C,50); 大きく左に回る
#define TL OnFwd(OUT_A,50); OnFwd(OUT_C,5); 左に回る(右タイヤと左タイヤのスピード違う
#define TLR OnRev(OUT_A,30); OnFwd(OUT_C,30); 大きく右に回る
#define TR OnFwd(OUT_A,5); OnFwd(OUT_C,50); 右に回る
#define TR2 OnRev(OUT_A,30);OnFwd(OUT_C,30); 右に回る
#define go OnFwd(OUT_A,30); OnFwd(OUT_C,30); 前に進む
#define DOWN OnFwd(OUT_B,30); Wait(700); Off(OUT_B); コップを取る腕を下げる
#define UP OnRev(OUT_B,30); Wait(700); Off(OUT_B); コップを取る腕を上げる
#define STEP 1 0.001秒ごとに実行する
* 交差点の判別 [#o850eacb]
#ref(2017b/Member/yan/Mission2/24.png,5.9kb)
PBの値は線の中央の濃い黒を連続で認識できる時間である。
PBの値は180より小さいの場合、濃い黒を連続で0.18秒間以内と認識される、
while内のプログラムは実行される。濃い黒を連続で0.18秒間以外と認識される、
while内のプログラムは実行されなくなる。
*例えば [#d63f624e]
sub FS()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180) //PBの値は180となると、while内のプログラミングは実行される
{
if(SENSOR_1<30)//光の強さは30以下時に左に大きく回る
{
TLL;
PB++;
}
else if(SENSOR_1<40)//光の強さは30-40間に左に回る
{
TL;
PB = 0;
}
else if(SENSOR_1<45) // 光の強さは40-45間に前に進む
{
go;
PB = 0;
}
else if(SENSOR_1<50)//光の強さは45-50間に右に回る
{
TR;
PB = 0;
}
else
{
TLR;
PB = 0;
}
Wait(STEP); //PBの値は180以上となると、交差点と認識する、while内のプログラムは実行されなくなる。次の動作は実行される。
}
Off(OUT_AC);
Wait(1000);
go;
Wait(200);
TR;
Wait(100);
}
*ライントレースのプログラム [#cf080611]
*DC間のプログラミング [#r861e643]
sub DC()
{
SetSensorLight(S1);
long t0 = CurrentTick();//測定時間を初期化
while(CurrentTick()-t0 <= 3000)
{
if(SENSOR_1<30) //光の強さは30以下時に右に大きく回る
{
TLR;
}
else if(SENSOR_1<40) //光の強さは30-40間に右に回る
{
TR;
}
else if(SENSOR_1<45) // 光の強さは40-45間に前に進む
{
go;
}
else if(SENSOR_1<50) //光の強さは45-50間に左に回る
{
TL;
}
else
{
TLL;
}
Wait(STEP);
}
*右の線から左の線に移動 [#sbfd5be1]
TLL;
Wait(400);
go;
Wait(300);
#ref(2017b/Member/yan/Mission2/22.jpg,14.2kb)
*CB間のプログラミング [#l53443e4]
sub CB()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180) センサーが30以下の値を連続0.18秒以上読み取らなければwhileは実行される
{
if(SENSOR_1<30) //光の強さは30以下時に左に大きく回る
{
TLL;
PB++;
}
else if(SENSOR_1<40) //光の強さは30-40間に左に回る
{
TL;
PB = 0;
}
else if(SENSOR_1<45) // 光の強さは40-45間に前に進む
{
go;
PB = 0;
}
else if(SENSOR_1<50) //光の強さは45-50間に右に回る
{
TR;
PB = 0;
}
else
{
TLR; // 白い部分で右に大きく回る
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
TLL2;
Wait(100);
PB = 0;
}
*BP間のプログラミング [#a432d379]
sub BP()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30) //光の強さは30以下時に左に大きく回る
{
TLL;
PB++;
}
else if(SENSOR_1<40) //光の強さは30-40間に左に回る
{
TL;
PB = 0;
}
else if(SENSOR_1<45) // 光の強さは40-45間に前に進む
{
go;
PB = 0;
}
else if(SENSOR_1<50) //光の強さは45-50間に右に回る
{
TR;
PB = 0;
}
else // 白い部分で右に大きく回る
{
TLR;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC); 1秒停止
Wait(1000);
TLL2;
Wait(200);
}
*PQ間のプログラミング [#j6bb6b1c]
sub PQ()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30) //光の強さは30以下時に左に大きく回る
{
TLL;
PB++;
}
else if(SENSOR_1<40) //光の強さは30-40間に左に回る
{
TL;
PB = 0;
}
else if(SENSOR_1<45) // 光の強さは40-45間に前に進む
{
go;
PB = 0;
}
else if(SENSOR_1<50) //光の強さは45-50間に右に回る
{
TR;
PB = 0;
}
else
{
TLR;
PB = 0;
}
Wait(STEP);
}
TR;
Wait(600);
go;
Wait(100);
PB = 0;
}
*QREF間のプログラミング [#u0328929]
sub QREF()
{
SetSensorLight(S1);
long t0 = CurrentTick();
while(CurrentTick()-t0 <= 15000)
{
if(SENSOR_1<30) //光の強さは30以下時に左に大きく回る
{
TLL;
}
else if(SENSOR_1<40) //光の強さは30-40間に左に回る
{
TL;
}
else if(SENSOR_1<45) // 光の強さは40-45間に前に進む
{
go;
}
else if(SENSOR_1<50) //光の強さは45-50間に右に回る
{
TR;
}
else
{
TLR;
}
Wait(STEP);
}
}
*EF間のプログラミング [#p4718f6b]
sub EF()
{
SetSensorLight(S1);
int PB = 0;
while(PB<140)
{
if(SENSOR_1<30) //光の強さは30以下時に左に大きく回る
{
TLL;
PB++;
}
else if(SENSOR_1<40) //光の強さは30-40間に左に回る
{
TL;
PB = 0;
}
else if(SENSOR_1<45) // 光の強さは40-45間に前に進む
{
go;
PB = 0;
}
else if(SENSOR_1<50) //光の強さは45-50間に右に回る
{
TR;
PB = 0;
}
else
{
TLR;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
TLL2;
Wait(500);
PB = 0;
}
*FS間のプログラミング [#mf169723]
sub FS()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30) //光の強さは30以下時に左に大きく回る
{
TLL;
PB++;
}
else if(SENSOR_1<40) //光の強さは30-40間に左に回る
{
TL;
PB = 0;
}
else if(SENSOR_1<45) // 光の強さは40-45間に前に進む
{
go;
PB = 0;
}
else if(SENSOR_1<50) //光の強さは45-50間に右に回る
{
TR;
PB = 0;
}
else
{
TLR;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
Wait(1000);
go;
Wait(200);
TR;
Wait(100);
}
*SS間のプログラミング [#za8830df]
sub SS()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30) //光の強さは30以下時に左に大きく回る
{
TLL;
PB++;
}
else if(SENSOR_1<40) //光の強さは30-40間に左に回る
{
TL;
PB = 0;
}
else if(SENSOR_1<45) // 光の強さは40-45間に前に進む
{
go;
PB = 0;
}
else if(SENSOR_1<50) //光の強さは45-50間に右に回る
{
TR;
PB = 0;
}
else
{
TLR;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
Wait(1000);
go;
Wait(200);
TR;
Wait(100);
}
*SQ間のプログラミング [#bf26a6f9]
sub SQ()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30) //光の強さは30以下時に左に大きく回る
{
TLL;
PB++;
}
else if(SENSOR_1<40) //光の強さは30-40間に左に回る
{
TL;
PB = 0;
}
else if(SENSOR_1<45) // 光の強さは40-45間に前に進む
{
go;
PB = 0;
}
else if(SENSOR_1<50) //光の強さは45-50間に右に回る
{
TR;
PB = 0;
}
else
{
TLR;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
Wait(1000);
UP;
Wait(400);
TLL;
Wait(400);
PB = 0;
}
*QR間のプログラミング [#xb29a5a4]
sub QR()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30) //光の強さは30以下時に左に大きく回る
{
TLL;
PB++;
}
else if(SENSOR_1<40) //光の強さは30-40間に左に回る
{
TL;
PB = 0;
}
else if(SENSOR_1<45) // 光の強さは40-45間に前に進む
{
go;
PB = 0;
}
else if(SENSOR_1<50) //光の強さは45-50間に右に回る
{
TR;
PB = 0;
}
else
{
TLR;
PB = 0;
}
Wait(STEP);
}
go;
Wait(300);
TLR;
Wait(500);
}
*RP間のプログラミング [#ib94a851]
sub RP()
{
SetSensorLight(S1);
long t0 = CurrentTick();
while(CurrentTick()-t0 <= 4000)
{
if(SENSOR_1<30) //光の強さは30以下時に左に大きく回る
{
TLL;
}
else if(SENSOR_1<40) //光の強さは30-40間に左に回る
{
TL;
}
else if(SENSOR_1<45) // 光の強さは40-45間に前に進む
{
go;
}
else if(SENSOR_1<50) //光の強さは45-50間に右に回る
{
TR;
}
else
{
TLR;
}
Wait(STEP);
}
}
*PB間のプログラミング [#yef0155f]
sub PB()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30) //光の強さは30以下時に左に大きく回る
{
TLL;
PB++;
}
else if(SENSOR_1<40) //光の強さは30-40間に左に回る
{
TL;
PB = 0;
}
else if(SENSOR_1<45) // 光の強さは40-45間に前に進む
{
go;
PB = 0;
}
else if(SENSOR_1<50) //光の強さは45-50間に右に回る
{
TR;
PB = 0;
}
else
{
TLR;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
Wait(1000);
TLL2;
Wait(400);
}
*BA間のプログラミング [#ie9b5d28]
sub BA()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30) //光の強さは30以下時に左に大きく回る
{
TLL;
PB++;
}
else if(SENSOR_1<40) //光の強さは30-40間に左に回る
{
TL;
PB = 0;
}
else if(SENSOR_1<45) // 光の強さは40-45間に前に進む
{
go;
PB = 0;
}
else if(SENSOR_1<50) //光の強さは45-50間に右に回る
{
TR;
PB = 0;
}
else
{
TLR;
PB = 0;
}
Wait(STEP);
}
go;
Wait(400);
}
* task mian [#c3c5a1c0]
task main()
{
DC();
CB();
BP();
BP();
PQ();
QREF();
EF();
FS();
TR2;
SS();
SQ();
QR();
RP();
PB();
BA();
}
*結果 [#h52f0df7]
ライントレースを完成しましたが、コップを置くことは最後まで行けなかった。
*感想 [#w69168a0]
ライントレースを完成した時とてもうれしかったが、コップを置くことは最後まで行けなかったので残念でした、本番の時電池の残量によって交差点を判断できなくなる。次の課題を頑張ります。
終了行:
#contents
*課題 [#i22953a3]
黒い線に沿って動き、紙コップを移動させるロボットを製作
Dをスタート➡ Cを直進➡ Bを左折➡ Pを左折(一時停止)➡ Qを直進➡ Rを左折➡ Fを左折➡ Sを直進(一時停止)➡ Y地点の紙コップを取得してコースに戻る➡ Sを直進(一時停止)➡ Qを左折(一時停止)➡ Rを直進➡ X地点に紙コップを置いてコースに戻る➡ Pを左折➡ B を左折(一時停止)➡ A地点へ(ゴール)
#ref(2017b/Member/yan/Mission2/16.png,16.7kb)
*ロボットの本体説明 [#m0cc17e8]
コップを取る部分とセンサ。一つのモーターはコップを取る部分の昇降をコントロールする。写真の赤丸で囲ってあるものが光センサになります。光センサは、ライントレースする際に白か黒(明暗)かの判断をするためにあります。光センサーと紙を平行にする。そうすることで、光センサの判断がされてからすぐにモーターが動き、誤動作が少なくなると考えたからです。
*全体の部分 [#mc185717]
#ref(2017b/Member/yan/Mission2/23.jpg,82.8kb)
側面図
#ref(2017b/Member/yan/Mission2/8.jpg,17.2kb)
正面図
#ref(2017b/Member/yan/Mission2/9.png,47.0kb)
*センサーとコップをとる部分[#i673c9bc]
センサーの位置をできるだけ前輪の車軸の近くにすることで急カーブでもスムーズに動作するロボットを作ることができた
#ref(2017b/Member/yan/Mission2/20.jpg,177.8kb)
*コップをX点に置く時に、赤い部分は上がるとコップを前に押す。 [#c159a37d]
#ref(2017b/Member/yan/Mission2/21.jpg,197.1kb)
*プログラミングの全体説明 [#e0a273b4]
光の強さによって五段階に分かれる
#ref(2017b/Member/yan/Mission2/6.png,26.1kb)
task mainやサブルーチンで使用するものを以下のように定義した。
#define TLL OnFwd(OUT_A,30); OnRev(OUT_C,30); 左に回る
#define TLL2 OnFwd(OUT_A,60); OnRev(OUT_C,50); 大きく左に回る
#define TL OnFwd(OUT_A,50); OnFwd(OUT_C,5); 左に回る(右タイヤと左タイヤのスピード違う
#define TLR OnRev(OUT_A,30); OnFwd(OUT_C,30); 大きく右に回る
#define TR OnFwd(OUT_A,5); OnFwd(OUT_C,50); 右に回る
#define TR2 OnRev(OUT_A,30);OnFwd(OUT_C,30); 右に回る
#define go OnFwd(OUT_A,30); OnFwd(OUT_C,30); 前に進む
#define DOWN OnFwd(OUT_B,30); Wait(700); Off(OUT_B); コップを取る腕を下げる
#define UP OnRev(OUT_B,30); Wait(700); Off(OUT_B); コップを取る腕を上げる
#define STEP 1 0.001秒ごとに実行する
* 交差点の判別 [#o850eacb]
#ref(2017b/Member/yan/Mission2/24.png,5.9kb)
PBの値は線の中央の濃い黒を連続で認識できる時間である。
PBの値は180より小さいの場合、濃い黒を連続で0.18秒間以内と認識される、
while内のプログラムは実行される。濃い黒を連続で0.18秒間以外と認識される、
while内のプログラムは実行されなくなる。
*例えば [#d63f624e]
sub FS()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180) //PBの値は180となると、while内のプログラミングは実行される
{
if(SENSOR_1<30)//光の強さは30以下時に左に大きく回る
{
TLL;
PB++;
}
else if(SENSOR_1<40)//光の強さは30-40間に左に回る
{
TL;
PB = 0;
}
else if(SENSOR_1<45) // 光の強さは40-45間に前に進む
{
go;
PB = 0;
}
else if(SENSOR_1<50)//光の強さは45-50間に右に回る
{
TR;
PB = 0;
}
else
{
TLR;
PB = 0;
}
Wait(STEP); //PBの値は180以上となると、交差点と認識する、while内のプログラムは実行されなくなる。次の動作は実行される。
}
Off(OUT_AC);
Wait(1000);
go;
Wait(200);
TR;
Wait(100);
}
*ライントレースのプログラム [#cf080611]
*DC間のプログラミング [#r861e643]
sub DC()
{
SetSensorLight(S1);
long t0 = CurrentTick();//測定時間を初期化
while(CurrentTick()-t0 <= 3000)
{
if(SENSOR_1<30) //光の強さは30以下時に右に大きく回る
{
TLR;
}
else if(SENSOR_1<40) //光の強さは30-40間に右に回る
{
TR;
}
else if(SENSOR_1<45) // 光の強さは40-45間に前に進む
{
go;
}
else if(SENSOR_1<50) //光の強さは45-50間に左に回る
{
TL;
}
else
{
TLL;
}
Wait(STEP);
}
*右の線から左の線に移動 [#sbfd5be1]
TLL;
Wait(400);
go;
Wait(300);
#ref(2017b/Member/yan/Mission2/22.jpg,14.2kb)
*CB間のプログラミング [#l53443e4]
sub CB()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180) センサーが30以下の値を連続0.18秒以上読み取らなければwhileは実行される
{
if(SENSOR_1<30) //光の強さは30以下時に左に大きく回る
{
TLL;
PB++;
}
else if(SENSOR_1<40) //光の強さは30-40間に左に回る
{
TL;
PB = 0;
}
else if(SENSOR_1<45) // 光の強さは40-45間に前に進む
{
go;
PB = 0;
}
else if(SENSOR_1<50) //光の強さは45-50間に右に回る
{
TR;
PB = 0;
}
else
{
TLR; // 白い部分で右に大きく回る
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
TLL2;
Wait(100);
PB = 0;
}
*BP間のプログラミング [#a432d379]
sub BP()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30) //光の強さは30以下時に左に大きく回る
{
TLL;
PB++;
}
else if(SENSOR_1<40) //光の強さは30-40間に左に回る
{
TL;
PB = 0;
}
else if(SENSOR_1<45) // 光の強さは40-45間に前に進む
{
go;
PB = 0;
}
else if(SENSOR_1<50) //光の強さは45-50間に右に回る
{
TR;
PB = 0;
}
else // 白い部分で右に大きく回る
{
TLR;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC); 1秒停止
Wait(1000);
TLL2;
Wait(200);
}
*PQ間のプログラミング [#j6bb6b1c]
sub PQ()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30) //光の強さは30以下時に左に大きく回る
{
TLL;
PB++;
}
else if(SENSOR_1<40) //光の強さは30-40間に左に回る
{
TL;
PB = 0;
}
else if(SENSOR_1<45) // 光の強さは40-45間に前に進む
{
go;
PB = 0;
}
else if(SENSOR_1<50) //光の強さは45-50間に右に回る
{
TR;
PB = 0;
}
else
{
TLR;
PB = 0;
}
Wait(STEP);
}
TR;
Wait(600);
go;
Wait(100);
PB = 0;
}
*QREF間のプログラミング [#u0328929]
sub QREF()
{
SetSensorLight(S1);
long t0 = CurrentTick();
while(CurrentTick()-t0 <= 15000)
{
if(SENSOR_1<30) //光の強さは30以下時に左に大きく回る
{
TLL;
}
else if(SENSOR_1<40) //光の強さは30-40間に左に回る
{
TL;
}
else if(SENSOR_1<45) // 光の強さは40-45間に前に進む
{
go;
}
else if(SENSOR_1<50) //光の強さは45-50間に右に回る
{
TR;
}
else
{
TLR;
}
Wait(STEP);
}
}
*EF間のプログラミング [#p4718f6b]
sub EF()
{
SetSensorLight(S1);
int PB = 0;
while(PB<140)
{
if(SENSOR_1<30) //光の強さは30以下時に左に大きく回る
{
TLL;
PB++;
}
else if(SENSOR_1<40) //光の強さは30-40間に左に回る
{
TL;
PB = 0;
}
else if(SENSOR_1<45) // 光の強さは40-45間に前に進む
{
go;
PB = 0;
}
else if(SENSOR_1<50) //光の強さは45-50間に右に回る
{
TR;
PB = 0;
}
else
{
TLR;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
TLL2;
Wait(500);
PB = 0;
}
*FS間のプログラミング [#mf169723]
sub FS()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30) //光の強さは30以下時に左に大きく回る
{
TLL;
PB++;
}
else if(SENSOR_1<40) //光の強さは30-40間に左に回る
{
TL;
PB = 0;
}
else if(SENSOR_1<45) // 光の強さは40-45間に前に進む
{
go;
PB = 0;
}
else if(SENSOR_1<50) //光の強さは45-50間に右に回る
{
TR;
PB = 0;
}
else
{
TLR;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
Wait(1000);
go;
Wait(200);
TR;
Wait(100);
}
*SS間のプログラミング [#za8830df]
sub SS()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30) //光の強さは30以下時に左に大きく回る
{
TLL;
PB++;
}
else if(SENSOR_1<40) //光の強さは30-40間に左に回る
{
TL;
PB = 0;
}
else if(SENSOR_1<45) // 光の強さは40-45間に前に進む
{
go;
PB = 0;
}
else if(SENSOR_1<50) //光の強さは45-50間に右に回る
{
TR;
PB = 0;
}
else
{
TLR;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
Wait(1000);
go;
Wait(200);
TR;
Wait(100);
}
*SQ間のプログラミング [#bf26a6f9]
sub SQ()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30) //光の強さは30以下時に左に大きく回る
{
TLL;
PB++;
}
else if(SENSOR_1<40) //光の強さは30-40間に左に回る
{
TL;
PB = 0;
}
else if(SENSOR_1<45) // 光の強さは40-45間に前に進む
{
go;
PB = 0;
}
else if(SENSOR_1<50) //光の強さは45-50間に右に回る
{
TR;
PB = 0;
}
else
{
TLR;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
Wait(1000);
UP;
Wait(400);
TLL;
Wait(400);
PB = 0;
}
*QR間のプログラミング [#xb29a5a4]
sub QR()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30) //光の強さは30以下時に左に大きく回る
{
TLL;
PB++;
}
else if(SENSOR_1<40) //光の強さは30-40間に左に回る
{
TL;
PB = 0;
}
else if(SENSOR_1<45) // 光の強さは40-45間に前に進む
{
go;
PB = 0;
}
else if(SENSOR_1<50) //光の強さは45-50間に右に回る
{
TR;
PB = 0;
}
else
{
TLR;
PB = 0;
}
Wait(STEP);
}
go;
Wait(300);
TLR;
Wait(500);
}
*RP間のプログラミング [#ib94a851]
sub RP()
{
SetSensorLight(S1);
long t0 = CurrentTick();
while(CurrentTick()-t0 <= 4000)
{
if(SENSOR_1<30) //光の強さは30以下時に左に大きく回る
{
TLL;
}
else if(SENSOR_1<40) //光の強さは30-40間に左に回る
{
TL;
}
else if(SENSOR_1<45) // 光の強さは40-45間に前に進む
{
go;
}
else if(SENSOR_1<50) //光の強さは45-50間に右に回る
{
TR;
}
else
{
TLR;
}
Wait(STEP);
}
}
*PB間のプログラミング [#yef0155f]
sub PB()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30) //光の強さは30以下時に左に大きく回る
{
TLL;
PB++;
}
else if(SENSOR_1<40) //光の強さは30-40間に左に回る
{
TL;
PB = 0;
}
else if(SENSOR_1<45) // 光の強さは40-45間に前に進む
{
go;
PB = 0;
}
else if(SENSOR_1<50) //光の強さは45-50間に右に回る
{
TR;
PB = 0;
}
else
{
TLR;
PB = 0;
}
Wait(STEP);
}
Off(OUT_AC);
Wait(1000);
TLL2;
Wait(400);
}
*BA間のプログラミング [#ie9b5d28]
sub BA()
{
SetSensorLight(S1);
int PB = 0;
while(PB<180)
{
if(SENSOR_1<30) //光の強さは30以下時に左に大きく回る
{
TLL;
PB++;
}
else if(SENSOR_1<40) //光の強さは30-40間に左に回る
{
TL;
PB = 0;
}
else if(SENSOR_1<45) // 光の強さは40-45間に前に進む
{
go;
PB = 0;
}
else if(SENSOR_1<50) //光の強さは45-50間に右に回る
{
TR;
PB = 0;
}
else
{
TLR;
PB = 0;
}
Wait(STEP);
}
go;
Wait(400);
}
* task mian [#c3c5a1c0]
task main()
{
DC();
CB();
BP();
BP();
PQ();
QREF();
EF();
FS();
TR2;
SS();
SQ();
QR();
RP();
PB();
BA();
}
*結果 [#h52f0df7]
ライントレースを完成しましたが、コップを置くことは最後まで行けなかった。
*感想 [#w69168a0]
ライントレースを完成した時とてもうれしかったが、コップを置くことは最後まで行けなかったので残念でした、本番の時電池の残量によって交差点を判断できなくなる。次の課題を頑張ります。
ページ名: