- 追加された行はこの色です。
- 削除された行はこの色です。
#contents
*課題2[#p5eb685a]
指定の道をあらかじめ模造紙に描き、第1コース・第2コースそれぞれの道順に沿って製作したロボットを動かす。また、その途中に、350mlの空き缶を指定の位置から、指定の位置に運ぶ。
*コース[#l49cfc9f]
第2コース
#ref(2018a-mission2.png)
|1Aをスタート|
|2Bを右折|
|3Jで一時停止の後、Yの空き缶をキャッチしてJに戻る|
|4JからKに向かい、Kを直進|
|5Lを直進|
|6Iを左折|
|7Hで一時停止の後、左折|
|8Gで一時停止の後、右折|
|9Fで一時停止の後、右折|
|10Eを直進|
|11Dで一時停止の後、空き缶をXに置いてDに戻り、Cに向かう|
|12Cで一時停止の後、直進|
|13Bを直進|
|14Aで停止|
|(一時停止の指定がある場所は、1秒間停止すること)|
*ロボットの説明[#fbbc27ea]
**車輪部分[#k29f6177]
課題1と同様、シンプルな3輪構造で、前輪が2輪、後輪が1輪となっている。前輪の2輪が駆動し、後輪の2輪が自由に回転する。
**センサーライト部分 [#zcdc4beb]
2つの車輪ほぼ真ん中前方に、確実に明るさを読み取れるような高さに設置した。
#ref(IMG_1298.JPG)
**アーム[#y0f7317f]
モータBに歯車を直接取り付け、
#ref(IMG_1300.JPG)
***缶をつかむとき [#u0daf4ae]
#ref(IMG_1300.JPG)
*プログラミングにあたっての準備[#heeafd24]
*プログラミングにあたっての準備[#heeafd24]
**色分けするプログラム[#q1542e47]
***白 [#i87cddeb]
#define DEEPWHITE SENSOR_1 > 48
***少し白 [#g54731d9]
#define WHITE SENSOR_1 > 44
***黒 [#t0ece9d1]
#define BLACK SENSOR_1 < 40
***少し黒 [#hdece4ff]
#define DEEPBLACK SENSOR_1 < 36
**指定した方向に一瞬動くプログラム[#k96c0c5c]
***右[#gabb9e62]
#define RIGHT OnFwd(OUT_A,30);OnRev(OUT_C,30);Wait(1);Off(OUT_AC);
***少し右[#f2a3eb93]
#define BIT_RIGHT OnFwd(OUT_A,30);OnRev(OUT_C,10);Wait(1);Off(OUT_AC);
***左[#yf200910]
#define LEFT OnFwd(OUT_C,30);OnRev(OUT_A,30);Wait(1);Off(OUT_AC);
***少し左[#m9a0ad8a]
#define BIT_LEFT OnFwd(OUT_C,30);OnRev(OUT_A,10);Wait(1);Off(OUT_AC);
***直線方向[#d825c59f]
#define STRAGHT OnFwd(OUT_AC,30);Wait(1);Off(OUT_AC);
#ref(sirokuro.png);
※上2つのプログラムを組み合わせて図のように動作するようにした。
**左が白、右が黒の境界をたどるプログラム [#t5d828c2]
#define LEFT_LINE if(DEEPWHITE){RIGHT DAI -= 3;} else if(WHITE){BIT_RIGHT DAI -= 1;} else if(DEEPBLACK){LEFT DAI += 3;} else if(BLACK){BIT_LEFT DAI += 1;} else {STRAGHT DAI *= 0;}
**左が黒、右が白の境界をたどるプログラム [#t115172a]
#define RIGHT_LINE if(DEEPWHITE){LEFT DAI -= 3;} else if(WHITE){BIT_LEFT DAI -= 1;} else if(DEEPBACK){RIGHT DAI += 3;} else if(BLACK){BIT_RIGHT DAI += 1;} else {STRAGHT DAI *= 0;}
**車輪を止めるプログラム [#odb449aa]
#define OFF Off(OUT_AC);
**1秒間止まるプログラム [#d4070551]
#define WAIT Wait(1000);
**缶を掴むプログラム [#x1b04c76]
#define CATCH OnFwd(OUT_AC,20);Wait(300);OFF OnFwd(OUT_B,30);Wait(300);Off(OUT_B);OnRev(OUT_AC,20);Wait(300);OFF
**缶を離すプログラム [#x88c9fb1]
#define RELEASE OnFwd(OUT_B,30);Wait(1000);Off(OUT_B);Wait(500);OnRev(OUT_B,30);Wait(500);Off(OUT_B);
**ある関数DAIが150以下であることを示すプログラム [#jc6361cb]
#define KANSU DAI < 150
**その場で右に旋回するプログラム [#rf6d05fd]
#define SIMPLE_RIGHT OnFwd(OUT_A,40);OnRev(OUT_C,40);
**その場で左に旋回するプログラム [#qd7894a9]
#define SIMPLE_LEFT OnFwd(OUT_C,40);OnRev(OUT_A,40);
**交差点で使用するプログラム [#j9565418]
***交差点で右に曲がるプログラム [#c3db0d7e]
#define GO_STRAIGHT OnFwd(OUT_A,40);OnFwd(OUT_C,40);Wait(190);OFF
#define MOVE_RIGHT SIMPLE_RIGHT Wait(750); OFF
**交差点で左に曲がるプログラム [#p5185051]
#define DEEPWHITE SENSOR_1 > 48
#define WHITE SENSOR_1 > 44
#define BLACK SENSOR_1 < 40
#define DEEPBLACK SENSOR_1 < 36
#define RIGHT OnFwd(OUT_A,30);OnRev(OUT_C,30);Wait(1);Off(OUT_AC);
#define BIT_RIGHT OnFwd(OUT_A,30);OnRev(OUT_C,10);Wait(1);Off(OUT_AC);
#define LEFT OnFwd(OUT_C,30);OnRev(OUT_A,30);Wait(1);Off(OUT_AC);
#define BIT_LEFT OnFwd(OUT_C,30);OnRev(OUT_A,10);Wait(1);Off(OUT_AC);
#define STRAGHT OnFwd(OUT_AC,30);Wait(1);Off(OUT_AC);
#define LEFT_LINE if(DEEPWHITE){RIGHT DAI -= 3;} else if(WHITE){BIT_RIGHT DAI -= 1;} else if(DEEPBLACK){LEFT DAI += 3;} else if(BLACK){BIT_LEFT DAI += 1;} else {STRAGHT DAI *= 0;}
#define RIGHT_LINE if(DEEPWHITE){LEFT DAI -= 3;} else if(WHITE){BIT_LEFT DAI -= 1;} else if(DEEPBLACK){RIGHT DAI += 3;} else if(BLACK){BIT_RIGHT DAI += 1;} else {STRAGHT DAI *= 0;}
#define OFF Off(OUT_AC);
#define WAIT Wait(1000);
#define CATCH OnFwd(OUT_AC,20);Wait(300);OFF OnFwd(OUT_B,30);Wait(300);Off(OUT_B);OnRev(OUT_AC,20);Wait(300);OFF
#define RELEASE OnFwd(OUT_B,30);Wait(1000);Off(OUT_B);Wait(500);OnRev(OUT_B,30);Wait(500);Off(OUT_B);
#define KANSU DAI < 150
#define SIMPLE_RIGHT OnFwd(OUT_A,40);OnRev(OUT_C,40);
#define SIMPLE_LEFT OnFwd(OUT_C,40);OnRev(OUT_A,40);
***交差点で左に曲がるプログラム [#p5185051]
#define GO_STRAIGHT OnFwd(OUT_A,40);OnFwd(OUT_C,40);Wait(190);OFF
#define MOVE_RIGHT SIMPLE_RIGHT Wait(750); OFF
#define MOVE_LEFT SIMPLE_LEFT Wait(750); OFF
*プログラム本編 [#d73f6990]
task main()
{
SetSensorLight(S1);
int DAI=0;
while(KANSU){
RIGHT_LINE
}
OFF
DAI *= 0;
PlaySound(SOUND_DOWN);
GO_STRAIGHT
MOVE_RIGHT
while(KANSU){
RIGHT_LINE
}
OFF
DAI *= 0;
PlaySound(SOUND_UP);
WAIT
CATCH
OnFwd(OUT_B,10);
GO_STRAIGHT
MOVE_LEFT
while(BLACK){
OnFwd(OUT_AC,20);
}
OFF
repeat(2){
while(KANSU){
LEFT_LINE
}
OFF
DAI *= 0;
SIMPLE_RIGHT
Wait(50);
OFF
while(BLACK){
OnFwd(OUT_AC,30);
}
OFF
}
while(KANSU){
LEFT_LINE
}
OFF
PlaySound(SOUND_UP);
WAIT
DAI *= 0;
OnFwd(OUT_AC,30);
Wait(50);
OFF
SIMPLE_LEFT
Wait(450);
OFF
while(KANSU){
LEFT_LINE
}
OFF
DAI *= 0;
while(BLACK){
OnFwd(OUT_A,30);OnFwd(OUT_C,30);
}
OFF
while(KANSU){
RIGHT_LINE
}
OFF
DAI *= 0;
while(BLACK){
OnFwd(OUT_A,30);OnFwd(OUT_C,30);
}
OFF
while(KANSU){
LEFT_LINE
}
OFF
DAI *= 0;
GO_STRAIGHT
MOVE_LEFT
while(KANSU){
LEFT_LINE
}
OFF
WAIT
DAI *= 0;
GO_STRAIGHT
MOVE_RIGHT
while(BLACK){
OnFwd(OUT_A,30);OnFwd(OUT_C,30);
}
OFF
while(KANSU){
RIGHT_LINE
}
OFF
WAIT
DAI *= 0;
PlaySound(SOUND_UP);
GO_STRAIGHT
MOVE_RIGHT
while(KANSU){
RIGHT_LINE
}
OFF
SIMPLE_RIGHT
Wait(50);
OFF
while(BLACK){
OnFwd(OUT_AC,30);
}
OFF
while(KANSU){
RIGHT_LINE
}
OFF
Off(OUT_B);
WAIT
RELEASE
OnFwd(OUT_AC,30);
Wait(80);
OFF
SIMPLE_RIGHT
Wait(500);
OFF
while(KANSU){
RIGHT_LINE
}
OFF
DAI *= 0;
GO_STRAIGHT
MOVE_RIGHT
while(KANSU){
RIGHT_LINE
}
OFF
WAIT
DAI *= 0;
PlaySound(SOUND_UP);
while(BLACK){
OnFwd(OUT_A,30);OnFwd(OUT_C,29);
}
OFF
while(KANSU){
RIGHT_LINE
}
OFF
DAI *= 0;
PlaySound(SOUND_FAST_UP);
}
*課題2を終えて [#oe801b50]
**苦労した点 [#p3e849d8]
** [#u95b7b61]