2017a/Member/kazubon/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
目次
#contents
* 課題 [#x6bb1a50]
課題は[[こちら>2017a/Mission2]]を参照
#ref(2017a/Member/kazubon/Mission2/2017a-mission2.png,80%...
自分はE地点直進コースを制作した。
* ロボットについて [#o11419f6]
今回のライントレースのコースには半径の小さい円が存在し、...
&ref(2017a/Member/kazubon/Mission2/DSC_0006.jpg,80%,ロボ...
&ref(2017a/Member/kazubon/Mission2/DSC_0001.jpg,100%,ロボ...
&ref(2017a/Member/kazubon/Mission2/DSC_0003.jpg,65%,ロボ...
* プログラムについて [#r50eddcf]
** 定義 [#ja2cf3d4]
比較的多めに定義を作成した。
多くなりすぎると複雑になってしまうため、しきい値について...
以下にすべての定義を記載する。
#define senkai_right OnFwd(OUT_A); OnRev(OUT_C); //右に...
#define senkai_left OnFwd(OUT_C); OnRev(OUT_A); //左に...
#define turn_right OnFwd(OUT_A); Off(OUT_C); //右に...
#define turn_left OnFwd(OUT_C); Off(OUT_A); //左に...
#define chokushin OnFwd(OUT_AC); //前進
#define koutai OnRev(OUT_AC); //後退
#define teishi Off(OUT_AC); Wait(100); //1秒間...
#define oto_up PlaySound(SOUND_UP); //低→高...
#define oto_down PlaySound(SOUND_DOWN); //高→低...
上記の9つはなるべくわかりやすい名前を利用して定義をした。
#define kuro_kanchi_left if(SENSOR_2>46){senkai_right; C...
else if(SENSOR_2>40){chokushin;...
else{senkai_left;} //黒線...
#define kuro_kanchi_right if(SENSOR_2>46){senkai_left; C...
else if(SENSOR_2>40){chokushin...
else{senkai_right;} //黒線...
#define kuro_kanchi_left_noreset if(SENSOR_2>46){senkai_...
else if(SENSOR_2>38){tu...
#define kuro_kanchi_right_noreset if(SENSOR_2>46){senkai...
else if(SENSOR_2>38){tu...
上記の4つの定義は下記の図のようにライントレースする。
(黒線左側をライントレースする場合は、しきい値の47-100と0...
#ref(2017a/Member/kazubon/Mission2/sikiichi setumei.jpg,8...
なお、黒線の右側左側でそれぞれ2つずつ定義を設けているの...
** サブルーチン [#x21a4786]
task mainをできるだけシンプルにするために、サブルーチンは...
それぞれのサブルーチンの名前は、linetrace_の後にtask main...
以下にすべてのサブルーチンと、その説明を記載する。
sub linetrace_one()
{
ClearTimer(0);
int time_kuro=18;
while(FastTimer(0) < time_kuro) {kuro_kanchi_left;}//...
oto_up; //角を感知したので音を鳴らす
Off(OUT_AC);
}
コースのA-E-F区間を走るためのサブルーチンである。
黒いコーナーを感知して音を鳴らす。
sub linetrace_two()
{
ClearTimer(1);
int time_kuro=18;
while(FastTimer(1) < 100){kuro_kanchi_left_noreset;}/...
ClearTimer(0);
while(FastTimer(0) < time_kuro){kuro_kanchi_left;}//...
oto_down; //交差点を感知したので音を鳴らす
teishi; //1秒間停止
}
コースのF-Q区間とT-R区間とP-E区間を走るためのサブルーチン...
交差点を感知して音を鳴らす。
sub linetrace_three()
{
ClearTimer(1);
int time_kuro=13;
while(FastTimer(1) < 150){kuro_kanchi_left_noreset;}/...
ClearTimer(0);
while(FastTimer(0) < time_kuro){kuro_kanchi_left;}//...
oto_up; //角を感知したので音を鳴らす
turn_right;//位置調整
Wait(45); // ↓
chokushin; // ↓
Wait(20); // ↓
ClearTimer(1);
while(FastTimer(1) < 150){kuro_kanchi_left_noreset;}/...
ClearTimer(0);
while(FastTimer(0) < time_kuro){kuro_kanchi_left;}//...
oto_up; //角を感知したので音を鳴らす
Off(OUT_AC);
}
コースのQ-R-S区間とR-S-P区間を走るためのサブルーチンであ...
途中、黒線をまたぐときに光センサーが誤作動を起こさないよ...
sub linetrace_four()
{
ClearTimer(1);
int time_kuro=18;
while(FastTimer(1) < 200){kuro_kanchi_left_noreset}//...
ClearTimer(0);
while(FastTimer(0) < time_kuro){kuro_kanchi_left}//し...
oto_up;//角を感知したので音を鳴らす
Off(OUT_AC);
}
コースのS-G区間を走るためのサブルーチンである。
基本はlinetrace_oneと変わらないが、角を曲がるときに黒を感...
sub linetrace_five()
{
ClearTimer(1);
int time_kuro=18;
while(FastTimer(1) < 1500){kuro_kanchi_left_noreset}/...
ClearTimer(0);
while(FastTimer(0) < time_kuro){kuro_kanchi_left;}//...
oto_up; //角を感知したので音を鳴らす
chokushin; //黒線をまたぐ
Wait(40); // ↓
senkai_left;// ↓
Wait(40); // ↓
Off(OUT_AC);
}
コースのG-H区間を走るためのサブルーチンである。
linetrace_fourと同じように誤作動防止プログラムを入れてい...
sub linetrace_six()
{
ClearTimer(0);
int time_kuro=15;
while(FastTimer(0) <time_kuro){kuro_kanchi_right;}//...
oto_down; //交差点を感知したので音を鳴らす
teishi; //1秒間停止
chokushin;//黒線をまたぐ
Wait(40); // ↓
Off(OUT_AC);
}
コースのH-T区間を走るためのサブルーチンである。
黒線をまたぐプログラムが入れてある。
sub linetrace_seven()
{
ClearTimer(1);
int time_kuro=18;
while(FastTimer(1) < 1000){kuro_kanchi_right_noreset;...
ClearTimer(0);
while(FastTimer(0) < time_kuro){kuro_kanchi_right;}//...
oto_down; //交差点を感知したので音を鳴らす
teishi; //1秒間停止
turn_left; //位置調整
Wait(50); // ↓
chokushin; // ↓
Wait(30); // ↓
Off(OUT_AC);
}
コースのT-T区間を走るためのサブルーチンである。
誤作動防止と位置調整のプログラムが入れてある。
sub linetrace_eight()
{
ClearTimer(1);
int time_kuro=20;
while(FastTimer(1) < 200){kuro_kanchi_left_noreset}//...
ClearTimer(0);
while(FastTimer(0) < time_kuro){kuro_kanchi_left;}//...
chokushin; //終了のエリアへもっていく
Wait(100); // ↓
oto_down;
Off(OUT_AC);
}
コースのE-A区間を走るためのサブルーチンである。
基本的にlinetrace_twoと同じだが、ゴールをするためのプログ...
〜Timerと係数について〜
サブルーチンの中にTimerを二つ用いているが、これはそれぞれ...
係数timeの定義は、それぞれ誤作動を起こさずかつ最短になる...
** task main [#o4a4392c]
サブルーチンを複雑にしたおかげで、task mainは光センサーの...
なお、モーターのパワー設定を最小にしたのは、そのままのパ...
task main()
{
SetSensor(SENSOR_2, SENSOR_LIGHT);//光センサーをセット
SetPower(OUT_AC ,0 ); //モーターのパワーを最小にする
linetrace_one(); //A-E-F
linetrace_two(); //F-Q
linetrace_three(); //Q-R-S
linetrace_four(); //S-G
linetrace_five(); //G-H
linetrace_six(); //H-T
linetrace_seven(); //T-T
linetrace_two(); //T-R
linetrace_three(); //R-S-P
linetrace_two(); //P-E
linetrace_eight(); //E-A
}
形状がほぼ同じ箇所が2つあるため、そこではサブルーチンの...
* 感想 [#bce1cd54]
最初は、自分にライントレースするロボットが作れるかどうか...
今回学んだことや反省点を生かし、最終課題に精一杯取り組ん...
終了行:
目次
#contents
* 課題 [#x6bb1a50]
課題は[[こちら>2017a/Mission2]]を参照
#ref(2017a/Member/kazubon/Mission2/2017a-mission2.png,80%...
自分はE地点直進コースを制作した。
* ロボットについて [#o11419f6]
今回のライントレースのコースには半径の小さい円が存在し、...
&ref(2017a/Member/kazubon/Mission2/DSC_0006.jpg,80%,ロボ...
&ref(2017a/Member/kazubon/Mission2/DSC_0001.jpg,100%,ロボ...
&ref(2017a/Member/kazubon/Mission2/DSC_0003.jpg,65%,ロボ...
* プログラムについて [#r50eddcf]
** 定義 [#ja2cf3d4]
比較的多めに定義を作成した。
多くなりすぎると複雑になってしまうため、しきい値について...
以下にすべての定義を記載する。
#define senkai_right OnFwd(OUT_A); OnRev(OUT_C); //右に...
#define senkai_left OnFwd(OUT_C); OnRev(OUT_A); //左に...
#define turn_right OnFwd(OUT_A); Off(OUT_C); //右に...
#define turn_left OnFwd(OUT_C); Off(OUT_A); //左に...
#define chokushin OnFwd(OUT_AC); //前進
#define koutai OnRev(OUT_AC); //後退
#define teishi Off(OUT_AC); Wait(100); //1秒間...
#define oto_up PlaySound(SOUND_UP); //低→高...
#define oto_down PlaySound(SOUND_DOWN); //高→低...
上記の9つはなるべくわかりやすい名前を利用して定義をした。
#define kuro_kanchi_left if(SENSOR_2>46){senkai_right; C...
else if(SENSOR_2>40){chokushin;...
else{senkai_left;} //黒線...
#define kuro_kanchi_right if(SENSOR_2>46){senkai_left; C...
else if(SENSOR_2>40){chokushin...
else{senkai_right;} //黒線...
#define kuro_kanchi_left_noreset if(SENSOR_2>46){senkai_...
else if(SENSOR_2>38){tu...
#define kuro_kanchi_right_noreset if(SENSOR_2>46){senkai...
else if(SENSOR_2>38){tu...
上記の4つの定義は下記の図のようにライントレースする。
(黒線左側をライントレースする場合は、しきい値の47-100と0...
#ref(2017a/Member/kazubon/Mission2/sikiichi setumei.jpg,8...
なお、黒線の右側左側でそれぞれ2つずつ定義を設けているの...
** サブルーチン [#x21a4786]
task mainをできるだけシンプルにするために、サブルーチンは...
それぞれのサブルーチンの名前は、linetrace_の後にtask main...
以下にすべてのサブルーチンと、その説明を記載する。
sub linetrace_one()
{
ClearTimer(0);
int time_kuro=18;
while(FastTimer(0) < time_kuro) {kuro_kanchi_left;}//...
oto_up; //角を感知したので音を鳴らす
Off(OUT_AC);
}
コースのA-E-F区間を走るためのサブルーチンである。
黒いコーナーを感知して音を鳴らす。
sub linetrace_two()
{
ClearTimer(1);
int time_kuro=18;
while(FastTimer(1) < 100){kuro_kanchi_left_noreset;}/...
ClearTimer(0);
while(FastTimer(0) < time_kuro){kuro_kanchi_left;}//...
oto_down; //交差点を感知したので音を鳴らす
teishi; //1秒間停止
}
コースのF-Q区間とT-R区間とP-E区間を走るためのサブルーチン...
交差点を感知して音を鳴らす。
sub linetrace_three()
{
ClearTimer(1);
int time_kuro=13;
while(FastTimer(1) < 150){kuro_kanchi_left_noreset;}/...
ClearTimer(0);
while(FastTimer(0) < time_kuro){kuro_kanchi_left;}//...
oto_up; //角を感知したので音を鳴らす
turn_right;//位置調整
Wait(45); // ↓
chokushin; // ↓
Wait(20); // ↓
ClearTimer(1);
while(FastTimer(1) < 150){kuro_kanchi_left_noreset;}/...
ClearTimer(0);
while(FastTimer(0) < time_kuro){kuro_kanchi_left;}//...
oto_up; //角を感知したので音を鳴らす
Off(OUT_AC);
}
コースのQ-R-S区間とR-S-P区間を走るためのサブルーチンであ...
途中、黒線をまたぐときに光センサーが誤作動を起こさないよ...
sub linetrace_four()
{
ClearTimer(1);
int time_kuro=18;
while(FastTimer(1) < 200){kuro_kanchi_left_noreset}//...
ClearTimer(0);
while(FastTimer(0) < time_kuro){kuro_kanchi_left}//し...
oto_up;//角を感知したので音を鳴らす
Off(OUT_AC);
}
コースのS-G区間を走るためのサブルーチンである。
基本はlinetrace_oneと変わらないが、角を曲がるときに黒を感...
sub linetrace_five()
{
ClearTimer(1);
int time_kuro=18;
while(FastTimer(1) < 1500){kuro_kanchi_left_noreset}/...
ClearTimer(0);
while(FastTimer(0) < time_kuro){kuro_kanchi_left;}//...
oto_up; //角を感知したので音を鳴らす
chokushin; //黒線をまたぐ
Wait(40); // ↓
senkai_left;// ↓
Wait(40); // ↓
Off(OUT_AC);
}
コースのG-H区間を走るためのサブルーチンである。
linetrace_fourと同じように誤作動防止プログラムを入れてい...
sub linetrace_six()
{
ClearTimer(0);
int time_kuro=15;
while(FastTimer(0) <time_kuro){kuro_kanchi_right;}//...
oto_down; //交差点を感知したので音を鳴らす
teishi; //1秒間停止
chokushin;//黒線をまたぐ
Wait(40); // ↓
Off(OUT_AC);
}
コースのH-T区間を走るためのサブルーチンである。
黒線をまたぐプログラムが入れてある。
sub linetrace_seven()
{
ClearTimer(1);
int time_kuro=18;
while(FastTimer(1) < 1000){kuro_kanchi_right_noreset;...
ClearTimer(0);
while(FastTimer(0) < time_kuro){kuro_kanchi_right;}//...
oto_down; //交差点を感知したので音を鳴らす
teishi; //1秒間停止
turn_left; //位置調整
Wait(50); // ↓
chokushin; // ↓
Wait(30); // ↓
Off(OUT_AC);
}
コースのT-T区間を走るためのサブルーチンである。
誤作動防止と位置調整のプログラムが入れてある。
sub linetrace_eight()
{
ClearTimer(1);
int time_kuro=20;
while(FastTimer(1) < 200){kuro_kanchi_left_noreset}//...
ClearTimer(0);
while(FastTimer(0) < time_kuro){kuro_kanchi_left;}//...
chokushin; //終了のエリアへもっていく
Wait(100); // ↓
oto_down;
Off(OUT_AC);
}
コースのE-A区間を走るためのサブルーチンである。
基本的にlinetrace_twoと同じだが、ゴールをするためのプログ...
〜Timerと係数について〜
サブルーチンの中にTimerを二つ用いているが、これはそれぞれ...
係数timeの定義は、それぞれ誤作動を起こさずかつ最短になる...
** task main [#o4a4392c]
サブルーチンを複雑にしたおかげで、task mainは光センサーの...
なお、モーターのパワー設定を最小にしたのは、そのままのパ...
task main()
{
SetSensor(SENSOR_2, SENSOR_LIGHT);//光センサーをセット
SetPower(OUT_AC ,0 ); //モーターのパワーを最小にする
linetrace_one(); //A-E-F
linetrace_two(); //F-Q
linetrace_three(); //Q-R-S
linetrace_four(); //S-G
linetrace_five(); //G-H
linetrace_six(); //H-T
linetrace_seven(); //T-T
linetrace_two(); //T-R
linetrace_three(); //R-S-P
linetrace_two(); //P-E
linetrace_eight(); //E-A
}
形状がほぼ同じ箇所が2つあるため、そこではサブルーチンの...
* 感想 [#bce1cd54]
最初は、自分にライントレースするロボットが作れるかどうか...
今回学んだことや反省点を生かし、最終課題に精一杯取り組ん...
ページ名: