- 追加された行はこの色です。
- 削除された行はこの色です。
&size(20){◇課題2『黒い線に沿って動くロボット』};
+前方のロボットに接触したら反転して進む
+前方のロボットに接触したらそのロボットを右側から追い抜いて、再びライン上に戻って進む
&size(20){☆製作に関して };
#contents
**プログラム [#u73fb488]
***反転して進む [#wb540068]
制作者// takumi
task main()
{
SetSensor(SENSOR_3,SENSOR_LIGHT);//センサ−3を「光」、センサー1を「タッチセンサー」と定義する
SetSensor(SENSOR_1,SENSOR_TOUCH);
while (true)
{
if(SENSOR_3 < 50)//センサー3が黒線上に無いとき、左タイヤだけが動く
{OnFwd(OUT_A);
Off(OUT_C);
Wait(5);
{ OnFwd(OUT_A);
Off(OUT_C);
Wait(5);
}
if(SENSOR_3 > 50)//センサー3が黒線上に有るとき、右タイヤだけが動く
{OnFwd(OUT_C);
Off(OUT_A);
Wait(5);
{ OnFwd(OUT_C);
Off(OUT_A);
Wait(5);
if(SENSOR_1 == 1)//センサ−1が反応したとき、バックして反転
{OnRev(OUT_A+OUT_C);
Wait(50);
OnFwd(OUT_A);OnRev(OUT_C);
Wait(235);
{ OnRev(OUT_A+OUT_C);
Wait(50);
OnFwd(OUT_A);OnRev(OUT_C);
Wait(235);
}
}
}
}
***追い抜いて進む [#a9500fea]
***追い抜いて進む (反転プログラムを流用)[#a9500fea]
制作者// takumi
task main()
{
SetSensor(SENSOR_3,SENSOR_LIGHT);
SetSensor(SENSOR_3,SENSOR_LIGHT);//センサ−3を「光」、センサー1を「タッチセンサー」と定義する
SetSensor(SENSOR_1,SENSOR_TOUCH);
while (true)
{
if(SENSOR_3 < 50)
{OnFwd(OUT_A);
Off(OUT_C);
Wait(5);
{ OnFwd(OUT_A);
Off(OUT_C);
Wait(5);
}
if(SENSOR_3 > 50)
{OnFwd(OUT_C);
Off(OUT_A);
Wait(5);
{ OnFwd(OUT_C);
Off(OUT_A);
Wait(5);
if(SENSOR_1 == 1)//センサ−1が反応
{OnRev(OUT_A+OUT_C);//少しバック
Wait(90);
OnFwd(OUT_A);OnRev(OUT_C);//右に約45度
Wait(50);
OnFwd(OUT_A+OUT_C);//少し直進
Wait(100);
OnFwd(OUT_C);OnRev(OUT_A);//左に約45度
Wait(50);
OnFwd(OUT_A+OUT_C);//少し直進
Wait(120);
OnFwd(OUT_C);OnRev(OUT_A);//左に約45度
Wait(30);
{ OnRev(OUT_A+OUT_C);//少しバック
Wait(90);
OnFwd(OUT_A);OnRev(OUT_C);//右に約45度回転
Wait(50);
OnFwd(OUT_A+OUT_C);//少し直進
Wait(100);
OnFwd(OUT_C);OnRev(OUT_A);//左に約45度回転
Wait(50);
OnFwd(OUT_A+OUT_C);//少し直進
Wait(120);
OnFwd(OUT_C);OnRev(OUT_A);//左に約45度回転
Wait(30);
}
}
}
}
**苦労した点とその解決 [#z996e706]
タッチセンサーをつけるのは簡単だったけれども光センサーをどの位置につけるかに結構悩まされました。でも結局タッチセンサーの真下につけることで解決しました。また光センサーをいくつつけるかも悩んだけど1つの方がプログラムが簡単だと思ったので1つにしました。タッチセンサーに光センサーも加わったのでプログラムは全体的に大変でした。
**工夫した点 [#jab5474c]
-ロボット
--左右の誤差をなくすように、機体の中心にセンサーを持ってきた。
--センサー同士が邪魔にならないように、一カ所にまとめて配置した。
--左右の誤差をなくすように、機体の中心にセンサーを持ってきた。(センサーが中心から離れていると、小周りが利かないので…。)
--センサー同士が邪魔にならないように、一カ所にまとめて配置した。(タッチセンサーを一つにして、タッチセンサーの下付近に光りセンサーを設置。)
#ref(2006a/B4/課題2右/dscn2625_Medium.jpg)
-プログラム
--トレース時間を短くして、ライントレースの正確さを改善した。
--トレース時間を短くして、ライントレースの正確さを改善した。(このことにより、少しだけ脱線をあまりしなくなったり、カーブが上手く回れるようになった気…。)
**製作時間&費用 [#ea81d627]
-製作時間
--ロボット製作:1時間
--プログラム:1時間(授業時間含まず)
--レポート作成:3時間
-費用
--画用紙:90円
--マジック:100円
#ref(2006a/B4/課題2右/dscn2614.jpg)
**反省/感想 [#xb264790]
今回、「ライントレースロボ」を作って、慣れてきたせいか、ロボもプログラムも比較的早くできた。また、役割分担もできていて一人一人しっかりできた。今後の課題として、得意分野だけをするのではなく、他の分野の作業(特に、ロボの製作)もできるよう一層の努力が必要である。
今回「ライントレースロボ」を作って、慣れてきたせいか、ロボもプログラムも比較的早くできた。また、役割分担もできていて一人一人しっかりできた。しかし、プログラムの完成度は低く、まだまだ改良の余地があった。今後の課題として、得意分野だけをするのではなく、他の分野の作業(特に、ロボの製作)もできるよう一層の努力が必要である。
是非コメントをお願いします
-task の中や、if や while の中の命令を字下げすると、どこからどこまでがどのブロックに属しているのかすぐにわかります。そうすることでプログラムの構造的な間違いや文法的な間違いをかなり減らせると思います。 -- [[松本(教員)]] &new{2006-06-21 (水) 21:45:22};
#comment
[[2006a/B4]]へ戻る