- 追加された行はこの色です。
- 削除された行はこの色です。
[[2010a]]
#contents
*課題 [#z2fc69ef]
各チームで作成したコースを1周するロボットを製作せよ。交差点以外のコース上に350mlの空の空き缶を2個以上おき、空き缶にぶつかった時には次のような動作するプログラムを作成せよ。(他のメンバーと重ならないように一人一つのプログラムを作成する)
各チームで作成したコースを1周するロボットを製作せよ。交差点以外のコース上に350mlの空の空き缶を2個以上おき、空き缶にぶつかった時には次のような動作するプログラムを作成せよ。(他のメンバーと重ならないように一人一つのプログラムを作成する);
1.空き缶をコース上に戻して再びコースに戻って進む;
2.空き缶を次の交差点まで運んで行き、その交差点に空き缶を残してさらにコースに沿って進む;
3.奇数回目に空き缶に遭遇したら、その場で反転して進み、偶数回目に遭遇したら、空き缶を押しのけて進む;
ただし、;
1.空き缶をコース上に戻して再びコースに戻って進む
2.空き缶を次の交差点まで運んで行き、その交差点に空き缶を残してさらにコースに沿って進む
3.奇数回目に空き缶に遭遇したら、その場で反転して進み、偶数回目に遭遇したら、空き缶を押しのけて進む
ただし、
•速さと正確さを追求すること
•コースを1周したら自動的に止まること
•交差点では一時停止すること
**目標 [#r204181d]
**ロボット [#r204181d]
&ref(P1010032.JPG);
&ref(P1010030.JPG);
**ロボットの外観 [#pf434381]
&ref(P1010034.JPG);
&ref(P1010035.JPG);
&ref(P1010031.JPG);
&ref(P1010036.JPG);
**コース [#pf434381]
&ref(P1010033.JPG);
**YUのプログラム [#gd295df8]
**UMEのプログラム [#ka967300]
int a;
#define BORDER 40
int flag = 0;
task main ()
{
a=0;
SetSensor ( SENSOR_1, SENSOR_LIGHT );
SetSensor ( SENSOR_2, SENSOR_TOUCH );
SetSensor ( SENSOR_3, SENSOR_LIGHT ); //1と3→光センサ、2→タッチセンサ
Wait ( 100 ); //起動してから1秒待機
while ( flag < 3){
if ( SENSOR_2 == 1 ){ if (a == 0){ //タッチセンサが反応したら
OnFwd(OUT_A+OUT_C);
Wait(50); //いったん緊急回避して
Off(OUT_A+OUT_C);
Wait(300); //3秒待機して
OnRev(OUT_A+OUT_C);
Wait(30); //もとの場所に戻る
ClearTimer(0);
until ((SENSOR_2==1) || (Timer(0)>2 ))OnRev(OUT_A+OUT_C);}
if(SENSOR_2==1){a=1; //タッチセンサが再び反応したら
OnRev(OUT_B);
Wait(50); //ハサミ起動
SetSensor ( SENSOR_1, SENSOR_LIGHT );//光センサー
SetSensor ( SENSOR_2, SENSOR_TOUCH );//タッチセンサー
SetSensor ( SENSOR_3, SENSOR_LIGHT );//光センサー
Wait ( 100 );//センサーの反応待機
while ( flag < 3){
else{
if ((SENSOR_1>40)&&(SENSOR_3>40)){ //両センサーが白の場合
OnRev(OUT_A+OUT_C);//直進する
}
else {
if ((SENSOR_1<40)&&(SENSOR_3<40)){ //両センサが黒の場合
Off(OUT_A+OUT_C);//交差点の場合少し止まる
Wait(50);
OnRev(OUT_A+OUT_C);進む
Wait(20);
}
else { //左センサーが黒の場合
OnRev(OUT_A);
Wait(5);
OnFwd(OUT_C);
Wait(5); //左に曲がる
}
}
else { //右センサーが黒の場合
if ( SENSOR_3> 40 ){ //左センサーが白の場合
OnFwd (OUT_A);
Wait(5);
OnRev(OUT_C);
Wait(5); //右に曲がる
}
if ( SENSOR_2 == 1 ){ if (a == 0){ //タッチセンサーが反応
OnFwd(OUT_A+OUT_C);旋回
Wait(50);
Off(OUT_A+OUT_C);
Wait(300);
OnRev(OUT_A+OUT_C);
Wait(30);
ClearTimer(0);
until ((SENSOR_2==1) || (Timer(0)>2 ))OnRev(OUT_A+OUT_C);}
if(SENSOR_2==1){a=1; //タッチセンサーが再び反応したら
OnRev(OUT_B);
Wait(50); //空き缶を挟む
}
else if(SENSOR_2==0){
if(SENSOR_1 > BORDER ){
if( SENSOR_3 > BORDER ){
OnRev(OUT_A+OUT_C);
else if(SENSOR_2==0){
If((SENSOR_1>40)&&(SENSOR_3>40)){
OnRev(OUT_A+OUT_C);
}
else{
OnRev(OUT_A);
Wait(5);
OnFwd(OUT_C);
Wait(5);
else{
OnRev(OUT_A);
Wait(5);
OnFwd(OUT_C);
Wait(5);
}
}
else{
if(SENSOR_3 > BORDER){
OnFwd(OUT_A);
Wait(5);
OnRev(OUT_C);
Wait(5);
else{
if(SENSOR_3 > 40){
OnFwd(OUT_A);
Wait(5);
OnRev(OUT_C);
Wait(5);
}
else{
Off(OUT_A+OUT_C);
Wait(150);
OnFwd(OUT_B);
Wait(50);
Off(OUT_B);
OnFwd(OUT_A+OUT_C);
Wait(100);
Off(OUT_A+OUT_C);
OnRev(OUT_A);
Wait(50);
Off(OUT_A);
OnRev(OUT_C);
Wait(150);
Off(OUT_C);
OnRev(OUT_A);
Wait(50);
Off(OUT_A);a=0;
else{
Off(OUT_A+OUT_C);
Wait(150);
OnFwd(OUT_B);
Wait(50);
Off(OUT_B);
OnFwd(OUT_A+OUT_C);
Wait(100);
Off(OUT_A+OUT_C);
OnRev(OUT_A);
Wait(50);
Off(OUT_A);
OnRev(OUT_C);
Wait(150);
Off(OUT_C);
OnRev(OUT_A);
Wait(50);
Off(OUT_A);a=0;
}
}
}
}
else{
if ( SENSOR_1 > BORDER ){ //右センサが白で
if ( SENSOR_3> BORDER ){ //左センサも白なら(L1 R1)
OnRev(OUT_A+OUT_C); //直進する
}
else { //左センサが黒なら(L0 R1)
OnRev(OUT_A);
Wait(5);
OnFwd(OUT_C);
Wait(5); //左に曲がる
}
}
else { //右センサが黒でで
if ( SENSOR_3> BORDER ){ //左センサが白なら(L1 R0)
OnFwd (OUT_A);
Wait(5);
OnRev(OUT_C);
Wait(5); //右に曲がる
}
else { //両センサが黒なら(L1 R1)
Off(OUT_A+OUT_C);//交差点と思われるので止まって
Wait(50); //0.5秒待機して
OnRev(OUT_A+OUT_C); //直進し始めて
Wait(20); //0.2秒直進して
flag++; //交差点カウンタに1足す
}
}
}
}
Off(OUT_A+OUT_C);}
**問題点、工夫した所 [#o890a03f]
・YU
・UME ラインとレースはよくできたと思うが、プログラムが長くなったのでもっとシンプルなものにできれば良かった。また、ロボットのアームが長すぎカーブのすぐに空き缶がある場合うまく挟めなかったんで、次はプログラムのほかにロボットの製作からしっかり考えたい。
***感想 [#ee38cb6d]
・YU
・UME ハサミの機能を有効に使うのが難しく苦悩しました。しかし難しいことに挑戦し頑張れたのでいい勉強になりました。
***コメントをどうぞ [#o5783f2f]