2017a/Member/shiori/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#contents
*課題の内容 [#v84f4b12]
[[課題2>2017a/Mission1]]を参照。
*ロボットの説明 [#t066d2b4]
#ref(2017a/Member/shiori/Mission2/Image_4f6c42d.jpg)
#ref(2017a/Member/shiori/Mission2/S_6333063206675.jpg)
ロボット全体の写真と、車体部分の写真である。
#ref(2017a/Member/shiori/Mission2/S_6333062917857.jpg)
光センサーは上の写真のようにL字型のブロックを用いて地面と...
#ref(2017a/Member/shiori/Mission2/S_6333062972790.jpg)
車体の重心が後ろにあり、後ろに傾いてしまうので、上の写真...
**工夫したこと [#u3ee34d8]
特に、急カーブでも光センサーで道をたどりやすいよう、次の...
(1)左右のタイヤ間の距離を小さくし、小回りがきくようにした
(2)光センサをできるだけ車体に近づけ光センサーの動きを小さ...
*プログラムについて [#q34c9891]
今回のプログラムはif文など論理展開が複雑でとても難しかっ...
左折のみだったのでプログラムの量が少なくて済んだ。
**定数・マクロ・サブルーチン・関数の定義 [#zc26bfe8]
#define BLACK 40 //強い黒
#define Black 42 //弱い黒
#define White 52 //弱い白
#define WHITE 55 //強い黒
#define RIGHT OnFwd(OUT_A);OnRev(OUT_C); //右旋回
#define right OnFwd(OUT_A); //右折
#define fore OnFwd(OUT_AC); //直進
#define left OnFwd(OUT_C); //左折
#define LEFT OnRev(OUT_A);OnFwd(OUT_C); //左旋回
#define UP PlaySound(SOUND_UP);
#define DOWN PlaySound(SOUND_DOWN);
#define MaxTime 28 //黒の上...
int turntime=0; //黒の上...
sub Tstop() //一時停...
{
Off(OUT_AC);Wait(100);
DOWN;
} //一時停...
sub corner() //直角に...
{
UP;
LEFT;until(SENSOR_1>Black);
} //音を鳴...
sub crossroad() //黒線を乗...
{
right;Wait(20);
fore;until(SENSOR_1>Black);
right;until(SENSOR_1<WHITE);
} //白になるまで黒線...
sub linetrace() //黒の時間がMaxTim...
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetPower(OUT_A,0);SetPower(OUT_C,0);
ClearTimer(0);
while(FastTimer(0)<MaxTime){
if(SENSOR_1<BLACK){
LEFT; //強い黒の...
}else if(SENSOR_1<Black){
left; //弱い黒の...
}else if(SENSOR_1<White){
fore; // 灰色のと...
}else if(SENSOR_1<WHITE){
right; //弱い白の...
}else {
RIGHT; //強い白の...
}
if(SENSOR_1>BLACK){
ClearTimer(0);
} //強い黒の上...
}
turntime+=1; //強い黒の上にいる時間がMa...
}
void linetrace_nocount(int t) //t秒間黒線の上...
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetPower(OUT_A,0);SetPower(OUT_C,0);
ClearTimer(2);
while(FastTimer(2)<t){
if(SENSOR_1<BLACK){
LEFT;
}else if(SENSOR_1<Black){
left;
}else if(SENSOR_1<White){
fore;
}else if(SENSOR_1<WHITE){
right;
}else {
RIGHT;
}
ClearTimer(0);
}
}
sub linetrace_sensitive() //linetrace...
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetPower(OUT_A,0);SetPower(OUT_C,0);
while(FastTimer(0)<25){
if(SENSOR_1<BLACK){
LEFT;
}else if(SENSOR_1<Black){
left;
}else if(SENSOR_1<White){
fore;
}else if(SENSOR_1<WHITE){
right;
}else {
RIGHT;
}
if(SENSOR_1>BLACK){
ClearTimer(0);
}
}
turntime+=1;
} //MaxTimeを25...
**プログラムの説明 [#n20475cb]
スタートからF地点までのプログラムを例にとる。
if(turntime==0){
linetrace_nocount(4000);
linetrace();
corner(); //F
}
turntime==0のとき、上のifカッコの中に入る。上の場合、始め...
cornerのサブルーチンが終わるとturntime==0のifカッコから抜...
**プログラムの全体の流れ [#e016ef12]
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetPower(OUT_A,0);SetPower(OUT_C,0);
ClearTimer(0);
while(n<=12){
if(turntime==0){
linetrace_nocount(6000); ...
linetrace();
corner(); ...
}else if((turntime==1)||(turntime==8)||(turntime==1...
linetrace();
Tstop();
LEFT;until(SENSOR_1>White); //Q,二回...
}else if((turntime==2)||(turntime==9)){
linetrace_nocount(500);
linetrace_sensitive();
UP;
crossroad(); //R,...
}else if((turntime==3)||(turntime==10)){
linetrace_nocount(500);
linetrace();
corner(); ...
}else if(turntime==4){
linetrace();
corner(); ...
}else if(turntime==5){
linetrace_nocount(4000); //...
linetrace();
corner();
ClearTimer(0); ...
}else if(turntime==6){
linetrace();
Tstop();
crossroad(); //1...
}else if(turntime==7){
linetrace_nocount(2000);
linetrace();
Tstop();
crossroad(); //2回...
}else if(turntime==12){
linetrace();
DOWN;
Off(OUT_AC); ...
}
}
}
**工夫したこと [#p3c16c09]
黒の上にいる時間から曲がりを判別するプログラムのみだと、...
*反省・感想 [#z41e2a4d]
はじめは「黒・灰色・白」の3つに判別してライントレースの...
5つの判別方式にした後も自分の思った通りにプログラムが進...
終了行:
#contents
*課題の内容 [#v84f4b12]
[[課題2>2017a/Mission1]]を参照。
*ロボットの説明 [#t066d2b4]
#ref(2017a/Member/shiori/Mission2/Image_4f6c42d.jpg)
#ref(2017a/Member/shiori/Mission2/S_6333063206675.jpg)
ロボット全体の写真と、車体部分の写真である。
#ref(2017a/Member/shiori/Mission2/S_6333062917857.jpg)
光センサーは上の写真のようにL字型のブロックを用いて地面と...
#ref(2017a/Member/shiori/Mission2/S_6333062972790.jpg)
車体の重心が後ろにあり、後ろに傾いてしまうので、上の写真...
**工夫したこと [#u3ee34d8]
特に、急カーブでも光センサーで道をたどりやすいよう、次の...
(1)左右のタイヤ間の距離を小さくし、小回りがきくようにした
(2)光センサをできるだけ車体に近づけ光センサーの動きを小さ...
*プログラムについて [#q34c9891]
今回のプログラムはif文など論理展開が複雑でとても難しかっ...
左折のみだったのでプログラムの量が少なくて済んだ。
**定数・マクロ・サブルーチン・関数の定義 [#zc26bfe8]
#define BLACK 40 //強い黒
#define Black 42 //弱い黒
#define White 52 //弱い白
#define WHITE 55 //強い黒
#define RIGHT OnFwd(OUT_A);OnRev(OUT_C); //右旋回
#define right OnFwd(OUT_A); //右折
#define fore OnFwd(OUT_AC); //直進
#define left OnFwd(OUT_C); //左折
#define LEFT OnRev(OUT_A);OnFwd(OUT_C); //左旋回
#define UP PlaySound(SOUND_UP);
#define DOWN PlaySound(SOUND_DOWN);
#define MaxTime 28 //黒の上...
int turntime=0; //黒の上...
sub Tstop() //一時停...
{
Off(OUT_AC);Wait(100);
DOWN;
} //一時停...
sub corner() //直角に...
{
UP;
LEFT;until(SENSOR_1>Black);
} //音を鳴...
sub crossroad() //黒線を乗...
{
right;Wait(20);
fore;until(SENSOR_1>Black);
right;until(SENSOR_1<WHITE);
} //白になるまで黒線...
sub linetrace() //黒の時間がMaxTim...
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetPower(OUT_A,0);SetPower(OUT_C,0);
ClearTimer(0);
while(FastTimer(0)<MaxTime){
if(SENSOR_1<BLACK){
LEFT; //強い黒の...
}else if(SENSOR_1<Black){
left; //弱い黒の...
}else if(SENSOR_1<White){
fore; // 灰色のと...
}else if(SENSOR_1<WHITE){
right; //弱い白の...
}else {
RIGHT; //強い白の...
}
if(SENSOR_1>BLACK){
ClearTimer(0);
} //強い黒の上...
}
turntime+=1; //強い黒の上にいる時間がMa...
}
void linetrace_nocount(int t) //t秒間黒線の上...
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetPower(OUT_A,0);SetPower(OUT_C,0);
ClearTimer(2);
while(FastTimer(2)<t){
if(SENSOR_1<BLACK){
LEFT;
}else if(SENSOR_1<Black){
left;
}else if(SENSOR_1<White){
fore;
}else if(SENSOR_1<WHITE){
right;
}else {
RIGHT;
}
ClearTimer(0);
}
}
sub linetrace_sensitive() //linetrace...
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetPower(OUT_A,0);SetPower(OUT_C,0);
while(FastTimer(0)<25){
if(SENSOR_1<BLACK){
LEFT;
}else if(SENSOR_1<Black){
left;
}else if(SENSOR_1<White){
fore;
}else if(SENSOR_1<WHITE){
right;
}else {
RIGHT;
}
if(SENSOR_1>BLACK){
ClearTimer(0);
}
}
turntime+=1;
} //MaxTimeを25...
**プログラムの説明 [#n20475cb]
スタートからF地点までのプログラムを例にとる。
if(turntime==0){
linetrace_nocount(4000);
linetrace();
corner(); //F
}
turntime==0のとき、上のifカッコの中に入る。上の場合、始め...
cornerのサブルーチンが終わるとturntime==0のifカッコから抜...
**プログラムの全体の流れ [#e016ef12]
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetPower(OUT_A,0);SetPower(OUT_C,0);
ClearTimer(0);
while(n<=12){
if(turntime==0){
linetrace_nocount(6000); ...
linetrace();
corner(); ...
}else if((turntime==1)||(turntime==8)||(turntime==1...
linetrace();
Tstop();
LEFT;until(SENSOR_1>White); //Q,二回...
}else if((turntime==2)||(turntime==9)){
linetrace_nocount(500);
linetrace_sensitive();
UP;
crossroad(); //R,...
}else if((turntime==3)||(turntime==10)){
linetrace_nocount(500);
linetrace();
corner(); ...
}else if(turntime==4){
linetrace();
corner(); ...
}else if(turntime==5){
linetrace_nocount(4000); //...
linetrace();
corner();
ClearTimer(0); ...
}else if(turntime==6){
linetrace();
Tstop();
crossroad(); //1...
}else if(turntime==7){
linetrace_nocount(2000);
linetrace();
Tstop();
crossroad(); //2回...
}else if(turntime==12){
linetrace();
DOWN;
Off(OUT_AC); ...
}
}
}
**工夫したこと [#p3c16c09]
黒の上にいる時間から曲がりを判別するプログラムのみだと、...
*反省・感想 [#z41e2a4d]
はじめは「黒・灰色・白」の3つに判別してライントレースの...
5つの判別方式にした後も自分の思った通りにプログラムが進...
ページ名: