- 追加された行はこの色です。
- 削除された行はこの色です。
[[2007b/A1]]
-----
CENTER:COLOR(darkgreen):&size(22){課題2:ライントレース};
-----
RIGHT:counter &counter(all);
目次
#contents
*目的 [#u61be3dc]
斎木、坂本ペアで課題2に取り組みライントレースロボットを作成。
**ライントレースとは [#z4643462]
ライントレースとは、床面に描いたラインをロボットがセンサを利用して読み取り、ラインに沿って走行することです。
今回はA1左と共同で大きな画用紙に黒ペンでラインを描きロボットを動かします。
ライントレースをする際には光センサーを利用します。光センサーは光の明暗を区別することができます。そして設定値をかえることで黒い部分(暗)と白い部分(明)を区別することが可能なのです。
今回はそれを利用し、A1左と共同で大きな画用紙に黒ペンでラインを描きロボットを動かします。
*コース [#bec4fe11]
#ref(20071206193208.jpg)
#ref(20071206192948.jpg)
**特徴 [#sfb210d4]
わかりやすいコースにしました。
わかりやすいコースにし,ロボ同士を競争させるのに適したコースにしました。ただコースの間隔が狭くなってしまった部分もできました。
*ロボット [#ae09f3d7]
-
-
-
-
-
**特徴 [#h4927445]
#ref(20071206183838.jpg)
これが光センサー。明暗を感知します。
この2つの光センサーがともに黒を感知するように設定しています。なので2つの光センサーは非常に近くに設置されています。
#ref(20071206183929.jpg)
-上から見たロボ。実はNQCを逆さまに取り付けています。
これでプログラムの読み取りもスムーズになりました。
また、タッチセンサーも工夫しました。フロント部分のほとんどの障害物に反応するだけでなく自らが落下しそうになると反応します。これによってロボットが落下して壊れることはなくなりました。しかし、そのあまりの感度のよさにかえって問題が生じるなど今回はその機能があまり生かしきれていませんでした。
-
-
-
*プログラム [#l4578e2d]
fine THRESHOLD 40 //
#define so 1568
#define ra 1760
#define si 1976
task play_music() // âπäyÇââëtÇ∑ÇÈÉ^É XÉN
{
while (true)
{
PlayTone (so,15);Wait(15);
PlayTone (so,15);Wait(15); //チャルメラのメロディ
PlayTone (ra,15);Wait(15);
PlayTone (si,45);Wait(45);
PlayTone (ra,15);Wait(15);
PlayTone (so,15);Wait(40);
PlayTone (so,15);Wait(15);
PlayTone (ra,15);Wait(15);
PlayTone (si,15);Wait(15);
PlayTone (ra,15);Wait(15);
PlayTone (so,15);Wait(15);
PlayTone (ra,45);Wait(70);
}
}
task main ()
{
SetSensor(SENSOR_1,SENSOR_LIGHT); //
SetSensor(SENSOR_3,SENSOR_LIGHT); //
SetSensor(SENSOR_1,SENSOR_LIGHT); // 光センサー1
SetSensor(SENSOR_3,SENSOR_LIGHT); // 光センサー2
SetSensor(SENSOR_2,SENSOR_TOUCH); //
SetSensor(SENSOR_2,SENSOR_TOUCH); // タッチセンサー
while(true){ //
if(SENSOR_2==1){
start play_music ;
if(SENSOR_2==1){ //もしタッチセンサーが反応するとメロディを流しながら0.40秒後退します。
start play_music ; //その後回転して音楽を止めます。
OnRev(OUT_A+OUT_C);
Wait(40);
OnFwd(OUT_A);
Wait(440); //
stop play_music ;
}else{
if(SENSOR_1<THRESHOLD){ //
if(SENSOR_3<THRESHOLD){ //
if(SENSOR_1<THRESHOLD){ //光センサ−1が黒を感知し
if(SENSOR_3<THRESHOLD){ //a,光センサー3も黒を感知したときに前進します
OnFwd(OUT_A); //
OnFwd(OUT_C);
}else{
OnRev(OUT_A); //
}else{ //b,光センサー3が白のとき
OnRev(OUT_A); //右に曲がります
OnFwd(OUT_C);
}
}else{
if(SENSOR_3<THRESHOLD){ //
OnFwd(OUT_A);
if(SENSOR_3<THRESHOLD){ //光センサー1が白を感知しa,光センサー3は黒を感知したとき
OnFwd(OUT_A); //左に曲がります。
OnRev(OUT_C);
}else{
Off(OUT_A);
Off(OUT_C);
Off(OUT_A); //b,光センサー3も白を感知したとき
Off(OUT_C); //0.50秒間一時停止した後0.30秒前進します。
Wait(50);
OnFwd(OUT_A); //
OnFwd(OUT_C); //
Wait(30); //
}
}
}
}
}
*結果 [#q2b95d97]
*結果 [#q2b95d97]
右チームのロボットは左チームのものに比べて遅く、また接触した際に戻る時間が短すぎたために、回転したとき左チームのロボットを巻き込んでしまうなどしました。さらにタッチセンサーの構造を落下しそうになると感知できるようにしたのですが、感度が鋭くコース内にある小さな段差などにも過敏に反応してしまい意味もなく回転してしまう、ロボットが交差点で一時停止してから再び発進するとコースを右方向に外れていってしまう、などの様々な問題が発生しました。結果としてコース完走することができなかったのが残念でした。
*課題2を終えて [#x6df88c8]
変数とタイマー機能が使いこなせませんでした。
プログラムの問題が発見できません。
今回のライントレースの光センサーは黒い線を探し感知することで進むシステムにしてしまったので黒い線からはみ出してしまったときの修正が難しかったです。
*コメント [#qa917600]
よろしければコメントをお願いします。
#comment