- 追加された行はこの色です。
- 削除された行はこの色です。
#contents
*課題2: 黒い線に沿って動くロボットを作成せよ[#h9fee753]
各チームで交差点が2つ以上のコースを作成し、そのコースを3周するロボットを作成する。
交差点のうちの1つには500㎖の空の紙パックを置き、次のような動作をするプログラムを作成せよ。
1、紙パックを迂回する、あるいは紙パックを元の位置に戻した後コースに戻って進む。&br;
(交差点を通過後、紙パックが元の位置にあればよい。)&br;
2、紙パックを次の交差点まで運んでいき、その交差点に紙パックを残して更に黒い線に沿って進む。&br;
早さと正確さにも気をつけること。
*ロボットの概要[#z9f8aad6]
*コースの紹介 [#iae0b335]
#ref(course.jpg)&br;
交差点は3つにしました。&br;
カーブはできるだけ急にならないようにし、曲がりやすいようにしました。
*プログラム [#s8715280]
**迂回Ver. [#s874c7bf]
#define THRESHOLD 40 //閾値の設定
#define turn_180 OnFwd(OUT_A);OnRev(OUT_C);Wait(130);Off(OUT_A+OUT_C);Wait(100); //180°回転の定義
task main (){
int i;
i = 0; //変数の設定
SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1=光センサー
SetSensor(SENSOR_2,SENSOR_TOUCH); //センサ−2=タッチセンサー
SetSensor(SENSOR_3,SENSOR_LIGHT); //センサ−3=光センサー
SetPower(OUT_A+OUT_C,2);
Wait(100);
SetPower(OUT_A+OUT_C,2); //少しゆっくり動くように設定
Wait(100); //ボタンを押してからスタートするまで1秒待つ
while (i < 18){
if(SENSOR_1 > THRESHOLD){
if(SENSOR_3 > THRESHOLD){
OnFwd(OUT_A+OUT_C);
}
} //1も3も白=直進
else{
OnFwd(OUT_A);
Off(OUT_C);
}
} //1は白、3は黒=右折
}
else{
if(SENSOR_3 > THRESHOLD){
OnFwd(OUT_C);
Off(OUT_A);
}
else{
} //1は黒、3は白=左折
else{ //1も3も黒だったら
Off(OUT_A+OUT_C);
Wait(100);
OnFwd(OUT_B);
OnFwd(OUT_B); //紙パックをつかむ
Wait(50);
Off(OUT_A+OUT_C);
Wait(100);
OnFwd(OUT_A+OUT_C);
OnFwd(OUT_A+OUT_C); //そのまま直進
Wait(50);
turn_180;
OnRev(OUT_B);
turn_180; //180°回転
OnRev(OUT_B); //紙パックをはなす
Wait(50);
turn_180;
i = i+1;
}
turn_180; //180°回転
i = i+1; //変数を1増やす
}
}
}
if(SENSOR_2 == 1){
OnRev(OUT_A+OUT_C);
if(SENSOR_2 == 1){ //タッチセンサーが反応したら
OnRev(OUT_A+OUT_C); //少し戻って..
Wait(100);
Off(OUT_A+OUT_C);
Off(OUT_A+OUT_C); //停止して相手が通り過ぎるのを待つ
Wait(300);
}
if(i == 18){
Off(OUT_A+OUT_C);
if(i == 18){ //交差点を18回(1周6回×3周)通過したら
Off(OUT_A+OUT_C); //自動的に停止
}
}
**運搬Ver. [#obcaa8c3]
*反省、感想 [#cc226c18]
*コメント [#hb8e1cd3]
コメントよろしくお願いします。
#comment