2017a/Member/Kyou/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2017a/Member]]
目次
#contents
*課題について [#c3a9ed2f]
詳しくは課題([[2017a/Mission2]])を参照。私はE地点右折コー...
*ロボット本体 [#p69d1362]
当初私たちはタイヤとタイヤの間にセンサーを設置していた。...
&ref(2017a/Member/Kyou/Mission2/センサー写真.jpg,75%);
*プログラム [#q9a9ed6a]
**定義 [#n47bcf56]
まず、今回のプログラムの中で使う頻度の高そうなものを定義...
#define THRESHOLD 53 //しきい値を53に設定
#define SPEED 20 //速さは20%
#define turn_left OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED);...
#define turn_right OnFwd(OUT_C,SPEED);OnRev(OUT_B,SPEED)...
#define go_forward OnFwd(OUT_BC,SPEED); //直進
#define STEP 1 ////一回の判定で進む時間
#define cross_line go_forward;Wait(450); //交差点を直進
**ライントレース用のサブルーチン [#n410c8d9]
まず初めに線の右側をライントレースするプログラムを作成し...
sub line_trace1()
{
SetSensorLight(S1);
long t0 = CurrentTick();
while (CurrentTick()-t0 < 200) {
if (SENSOR_1 < THRESHOLD -12) { //黒に反応...
turn_right;
} else if (SENSOR_1 > THRESHOLD +5) { //白に反応...
turn_left;
t0 = CurrentTick()
} else { //その他、つまり境界線上であ...
go_forward;
t0 = CurrentTick()
}
Wait(STEP);
}
}
次に線の左側をライントレースするプログラムを作成した。タ...
sub line_trace2()
{
SetSensorLight(S1);
long t0 = CurrentTick();
while (CurrentTick()-t0 < 150) {
if (SENSOR_1 < THRESHOLD -12) {
turn_left;
} else if (SENSOR_1 > THRESHOLD +5) {
turn_right;
t0 = CurrentTick()
} else {
go_forward;
t0 = CurrentTick()
}
Wait(STEP);
}
}
このline_trace3は基本的にはline_trace1と同じではあるが、...
sub line_trace3()
{
SetSensorLight(S1);
long t0 = CurrentTick();
while (CurrentTick()-t0 < 100) {
if (SENSOR_1 < THRESHOLD -12) {
turn_right;
} else if (SENSOR_1 > THRESHOLD +5) {
turn_left;
t0 = CurrentTick()
} else {
go_forward;
t0 = CurrentTick()
}
Wait(STEP);
}
}
line_trace4も基本的にはline_trace2と同じであるが、これが...
sub line_trace4()
{
SetSensorLight(S1);
long t0 = CurrentTick();
while (CurrentTick()-t0 < 100) {
if (SENSOR_1 < THRESHOLD -12) {
turn_left;
} else if (SENSOR_1 > THRESHOLD +5) {
turn_right;
t0 = CurrentTick()
} else {
go_forward;
t0 = CurrentTick()
}
Wait(STEP);
}
}
**コースを細かく分けたサブルーチン [#hdc4b9b8]
ここからはコースを13分割して細かくプログラミングしていく...
sub AE() //AE間におけるサブルーチン
{
go_forward; //Aの枠内から出る
Wait(500);
Off(OUT_BC);
line_trace1();
PlaySound(SOUND_UP);
turn_right;
Wait(300);
Off(OUT_BC);
}
PQからは線の左側をライントレースすることになるから、この...
sub EP() //EP間におけるサブルーチン
{
line_trace1();
Off(OUT_BC);
PlaySound(SOUND_DOWN);
Wait(200);
go_forward;
Wait(100);
turn_left; //ここで線の左側に出る
Wait(900);
Off(OUT_BC);
}
sub PQ() //PQ間におけるサブルーチン
{
line_trace2();
cross_line;
Off(OUT_BC);
}
ここで先述の通りR地点での反応が弱く反応するときと反応しな...
sub QR() //QR間におけるサブルーチン
{
PlaySound(SOUND_UP);
line_trace4();
PlaySound(SOUND_UP);
}
TT間の円をライントレースする際に内側を回ると、センサーが...
sub RT() //RT間におけるサブルーチン
{
turn_left;
Wait(200);
line_trace2();
Off(OUT_BC);
PlaySound(SOUND_DOWN);
Wait(200);
Off(OUT_BC);
turn_right; //ここで線の右側に出る
Wait(500);
cross_line;
Off(OUT_BC);
}
sub TT() //TT間におけるサブルーチン
{
line_trace1();
Off(OUT_BC);
PlaySound(SOUND_DOWN);
Wait(200);
Off(OUT_BC);
cross_line;
Off(OUT_BC);
}
sub TH() //TH間におけるサブルーチン
{
line_trace1();
PlaySound(SOUND_UP);
}
ここのS字カーブのところで急カーブの内側をライントレースす...
sub HG() //HG間におけるサブルーチン
{
line_trace1();
turn_right;
Wait(1500);
line_trace1();
PlaySound(SOUND_UP);
turn_right;
Wait(300);
}
sub GS() //GS間におけるサブルーチン
{
line_trace1();
PlaySound(SOUND_DOWN);
Wait(200);
turn_left;
Wait(1500);
cross_line;
Off(OUT_BC);
}
sub SP() //SP間におけるサブルーチン
{
line_trace2();
cross_line;
Off(OUT_BC);
}
ここで線の右側に出るプログラムを作成した理由としては、地...
sub PQ2() //PQ2間におけるサブルーチン
{
PlaySound(SOUND_UP);
line_trace4();
cross_line; //ここで線の右側に出る
Off(OUT_BC);
}
sub QF() //QF間におけるサブルーチン
{
PlaySound(SOUND_UP);
line_trace3();
PlaySound(SOUND_UP);
}
sub FA() //FA間におけるサブルーチン
{
line_trace1();
turn_left;
Wait(500);
go_forward; //ここでAの枠内に入る
Wait(1000);
Off(OUT_BC);
PlaySound(SOUND_DOWN);
}
**タスクメイン [#v0b5d94b]
task main()
{
AE();
EP();
PQ();
QR();
RT();
TT();
TH();
HG();
GS();
SP();
PQ2();
QF();
FA();
}
*まとめ [#l9dfecca]
**改善点 [#m0ce414c]
直進のときのスピードをもう少し上げていればミッション遂行...
少し無駄な動きもあったのでもっとライントレースのサブルー...
**感想 [#o1e80750]
今回も感じたことはやはり電池の電圧による差は大きいという...
終了行:
[[2017a/Member]]
目次
#contents
*課題について [#c3a9ed2f]
詳しくは課題([[2017a/Mission2]])を参照。私はE地点右折コー...
*ロボット本体 [#p69d1362]
当初私たちはタイヤとタイヤの間にセンサーを設置していた。...
&ref(2017a/Member/Kyou/Mission2/センサー写真.jpg,75%);
*プログラム [#q9a9ed6a]
**定義 [#n47bcf56]
まず、今回のプログラムの中で使う頻度の高そうなものを定義...
#define THRESHOLD 53 //しきい値を53に設定
#define SPEED 20 //速さは20%
#define turn_left OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED);...
#define turn_right OnFwd(OUT_C,SPEED);OnRev(OUT_B,SPEED)...
#define go_forward OnFwd(OUT_BC,SPEED); //直進
#define STEP 1 ////一回の判定で進む時間
#define cross_line go_forward;Wait(450); //交差点を直進
**ライントレース用のサブルーチン [#n410c8d9]
まず初めに線の右側をライントレースするプログラムを作成し...
sub line_trace1()
{
SetSensorLight(S1);
long t0 = CurrentTick();
while (CurrentTick()-t0 < 200) {
if (SENSOR_1 < THRESHOLD -12) { //黒に反応...
turn_right;
} else if (SENSOR_1 > THRESHOLD +5) { //白に反応...
turn_left;
t0 = CurrentTick()
} else { //その他、つまり境界線上であ...
go_forward;
t0 = CurrentTick()
}
Wait(STEP);
}
}
次に線の左側をライントレースするプログラムを作成した。タ...
sub line_trace2()
{
SetSensorLight(S1);
long t0 = CurrentTick();
while (CurrentTick()-t0 < 150) {
if (SENSOR_1 < THRESHOLD -12) {
turn_left;
} else if (SENSOR_1 > THRESHOLD +5) {
turn_right;
t0 = CurrentTick()
} else {
go_forward;
t0 = CurrentTick()
}
Wait(STEP);
}
}
このline_trace3は基本的にはline_trace1と同じではあるが、...
sub line_trace3()
{
SetSensorLight(S1);
long t0 = CurrentTick();
while (CurrentTick()-t0 < 100) {
if (SENSOR_1 < THRESHOLD -12) {
turn_right;
} else if (SENSOR_1 > THRESHOLD +5) {
turn_left;
t0 = CurrentTick()
} else {
go_forward;
t0 = CurrentTick()
}
Wait(STEP);
}
}
line_trace4も基本的にはline_trace2と同じであるが、これが...
sub line_trace4()
{
SetSensorLight(S1);
long t0 = CurrentTick();
while (CurrentTick()-t0 < 100) {
if (SENSOR_1 < THRESHOLD -12) {
turn_left;
} else if (SENSOR_1 > THRESHOLD +5) {
turn_right;
t0 = CurrentTick()
} else {
go_forward;
t0 = CurrentTick()
}
Wait(STEP);
}
}
**コースを細かく分けたサブルーチン [#hdc4b9b8]
ここからはコースを13分割して細かくプログラミングしていく...
sub AE() //AE間におけるサブルーチン
{
go_forward; //Aの枠内から出る
Wait(500);
Off(OUT_BC);
line_trace1();
PlaySound(SOUND_UP);
turn_right;
Wait(300);
Off(OUT_BC);
}
PQからは線の左側をライントレースすることになるから、この...
sub EP() //EP間におけるサブルーチン
{
line_trace1();
Off(OUT_BC);
PlaySound(SOUND_DOWN);
Wait(200);
go_forward;
Wait(100);
turn_left; //ここで線の左側に出る
Wait(900);
Off(OUT_BC);
}
sub PQ() //PQ間におけるサブルーチン
{
line_trace2();
cross_line;
Off(OUT_BC);
}
ここで先述の通りR地点での反応が弱く反応するときと反応しな...
sub QR() //QR間におけるサブルーチン
{
PlaySound(SOUND_UP);
line_trace4();
PlaySound(SOUND_UP);
}
TT間の円をライントレースする際に内側を回ると、センサーが...
sub RT() //RT間におけるサブルーチン
{
turn_left;
Wait(200);
line_trace2();
Off(OUT_BC);
PlaySound(SOUND_DOWN);
Wait(200);
Off(OUT_BC);
turn_right; //ここで線の右側に出る
Wait(500);
cross_line;
Off(OUT_BC);
}
sub TT() //TT間におけるサブルーチン
{
line_trace1();
Off(OUT_BC);
PlaySound(SOUND_DOWN);
Wait(200);
Off(OUT_BC);
cross_line;
Off(OUT_BC);
}
sub TH() //TH間におけるサブルーチン
{
line_trace1();
PlaySound(SOUND_UP);
}
ここのS字カーブのところで急カーブの内側をライントレースす...
sub HG() //HG間におけるサブルーチン
{
line_trace1();
turn_right;
Wait(1500);
line_trace1();
PlaySound(SOUND_UP);
turn_right;
Wait(300);
}
sub GS() //GS間におけるサブルーチン
{
line_trace1();
PlaySound(SOUND_DOWN);
Wait(200);
turn_left;
Wait(1500);
cross_line;
Off(OUT_BC);
}
sub SP() //SP間におけるサブルーチン
{
line_trace2();
cross_line;
Off(OUT_BC);
}
ここで線の右側に出るプログラムを作成した理由としては、地...
sub PQ2() //PQ2間におけるサブルーチン
{
PlaySound(SOUND_UP);
line_trace4();
cross_line; //ここで線の右側に出る
Off(OUT_BC);
}
sub QF() //QF間におけるサブルーチン
{
PlaySound(SOUND_UP);
line_trace3();
PlaySound(SOUND_UP);
}
sub FA() //FA間におけるサブルーチン
{
line_trace1();
turn_left;
Wait(500);
go_forward; //ここでAの枠内に入る
Wait(1000);
Off(OUT_BC);
PlaySound(SOUND_DOWN);
}
**タスクメイン [#v0b5d94b]
task main()
{
AE();
EP();
PQ();
QR();
RT();
TT();
TH();
HG();
GS();
SP();
PQ2();
QF();
FA();
}
*まとめ [#l9dfecca]
**改善点 [#m0ce414c]
直進のときのスピードをもう少し上げていればミッション遂行...
少し無駄な動きもあったのでもっとライントレースのサブルー...
**感想 [#o1e80750]
今回も感じたことはやはり電池の電圧による差は大きいという...
ページ名: