- 追加された行はこの色です。
- 削除された行はこの色です。
[[2006a/A6]]
*課題2:黒い線に沿って動くロボット [#q7350b65]
作成者:ヨコチン・カトゥー・マサ・J
INDEX
#contents
*与えられた課題とは? [#x243aa70]
黒い線に沿って動くロボットを作成せよ。
そして一つの周回コースを2台のロボットが走行すること想定し、
以下の2種類のプログラムを作成せよ。
前方のロボットに接触したら反転して進む
前方のロボットに接触したらそのロボットを右側から追い抜いて
(あるいは避けて通り)、再びライン上に戻って進む
ただし、スピードと確実性をできる限り両立させること。
自由課題1も参考に。光センサは2つ使用してよい。
**ライントレースする作品 [#xbfb9aa8]
*ロボットの外観 [#vde8c192]
**特徴 [#kaa34d22]
見た目はシンプルな形で光センサーを2つ利用したロボット。
ロボットの前にバンパーを着けたことによってタッチセンサーが働きやすい。
**工夫&苦労した点 [#a7b0179f]
始めは光センサーを1つだけ使ったロボットを作ろうとしたが、ラインから外れると元に戻るのに時間がかかってしまったので
光センサーを2つ使って黒いラインをはさむように工夫することによってロボットがラインから外れないように成功した。
光センサーがあたると始めのプログラムではロボットが少し回転するだけだったのでコーナーになると反応しすぎて時間が
かかってしまっていたので回転に時間を少し加えることによって速さを出来るだけ追求した。
ロボットの前につけたバンパーによってロボットが正面にあるものならどう当たってもタッチセンサーが働くようにした。
*問題点と反省 [#d1cbdfb0]
**まとめ [#x18841e8]
**今後の課題に向けて…… [#l6a5b59e]
*プログラム [#q018d88c]
**反転 [#a3f2c53d]
#define THRESHOLD 35
task main ()
{
SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_2, SENSOR_LIGHT);
SetSensor(SENSOR_3, SENSOR_TOUCH);
while(true){
if (SENSOR_1< 45){
SetSensor(SENSOR_1, SENSOR_LIGHT); //センサー1を光センサーとする
SetSensor(SENSOR_2, SENSOR_LIGHT); //センサー2を光センサーとする
SetSensor(SENSOR_3, SENSOR_TOUCH); //センサー3をタッチセンサーとする
while(true){ //無限ループ
if (SENSOR_1< 45){ //センサー1が45未満なら
Off(OUT_A+OUT_C);
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(15);
Wait(15); //0.15秒左回転
}
if (SENSOR_2< 45){
if (SENSOR_2< 45){ //センサー2が45未満なら
Off(OUT_A+OUT_C);
OnFwd(OUT_A);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(15);
Wait(15); //0.15秒右回転
}
if ((SENSOR_1> 45)&&(SENSOR_2> 45)){
OnFwd(OUT_A+OUT_C);
if ((SENSOR_1> 45)&&(SENSOR_2> 45)){ //センサー1とセンサー2がともに45より大なら
OnFwd(OUT_A+OUT_C); //前進
}
if (SENSOR_3 == 1)
if (SENSOR_3 == 1) // センサー3が押されたら
{
OnFwd(OUT_A);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(174) ;
OnFwd(OUT_A+OUT_C) ;
Wait(174) ; //1.74秒右回転
OnFwd(OUT_A+OUT_C) ; //前進
}
}
}
**追い越し [#bc302b8a]
#define THRESHOLD 35
task main ()
{
SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_2, SENSOR_LIGHT);
SetSensor(SENSOR_3, SENSOR_TOUCH);
while(true){
if (SENSOR_1< 45){
Off(OUT_A+OUT_C);
SetSensor(SENSOR_1, SENSOR_LIGHT); //センサー1を光センサーと宣言する
SetSensor(SENSOR_2, SENSOR_LIGHT); //センサー2を光センサーと宣言する
SetSensor(SENSOR_3, SENSOR_TOUCH); //センサー3をタッチセンサーと宣言する
while(true){ //無限ループ
if (SENSOR_1< 45){ //センサー1が45未満なら
Off(OUT_A+OUT_C);
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(15);
OnRev(OUT_A);
Wait(15); //0.15秒左回転
}
if (SENSOR_2< 45){
if (SENSOR_2< 45){ //センサー2が45未満なら
Off(OUT_A+OUT_C);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(15);
Wait(15); //0.15秒右回転
}
if ((SENSOR_1> 45)&&(SENSOR_2> 45)){
OnFwd(OUT_A+OUT_C);
if ((SENSOR_1> 45)&&(SENSOR_2> 45)){ //センサー1とセンサー2がともに45より大なら
OnFwd(OUT_A+OUT_C); //前進
}
if (SENSOR_3 == 1) {
OnFwd(OUT_A);
if (SENSOR_3 == 1) { // センサー3が押されたら
OnFwd(OUT_A); //ここから追い越し
OnRev(OUT_C);
Wait(95);
Wait(95); //右折
OnFwd(OUT_A+OUT_C);
Wait(90);
Wait(90); //直進
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(80);
Wait(80); //左折
OnFwd(OUT_A+OUT_C);
Wait(130);
Wait(130); //直進
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(45);
Wait(45); //左折
OnFwd(OUT_A+OUT_C);
Wait(60);
Wait(60); //直進
}
}
}
*A6へのアドバイス [#w284e665]
#comment