[[2007a/MemberOnly/進行状況A]] *ライン・トレース・ロボット [#z3a0f3c5] 黒い線に沿って走るロボットを作成した。A4Rの班と、一つのコースで二つのロボットが走るコースを作った。 *ロボット紹介(光センサーが一つ) [#k75fc585] タッチセンサーの下に光センサーを取り付けたロボット。 #ref(2007a/A4/課題2左/TS3C0001.JPG) *制作過程Part1 [#hc04852f] **1:光センサー一つのロボット作成 [#sc2255f3] 僕たちのグループでは、初めに光センサーが一つのロボットを作成してみた(上の写真のロボット)。なぜなら、ほとんどのグループが光センサーを二つ使っていたので、なんとか一つでやってみたかったからである。 **2:コースで走らせよう [#u5352988] できあがった光センサーが一つのロボットをコースで走らせた時、重大なミスに気づいた。それは左カーブか右カーブのどちらか一つしか動くことができないということだ。僕たちのグループでは光センサーが黒い線から外れると右のタイヤが動くようにプログラミングをしたので、右カーブを曲がることができなっかた。しかし、光センサーが一つのロボットは急カーブも簡単に曲がることができるというメッリトがあったので、センサーが一つのままで改良をしてみた。 **3:改良 [#dac961c3] 光センサーが一つのロボットではどうやっても左右のカーブに対応してくれなかった。そこで、タイマーを使ってみた。右カーブに入る直前までの時間を計り、そこから右に曲がれるプログラムを取り入れてみた。初めは良いと思ったこの改良だったが、ロボット同士の衝突や交差点での一時停止などを考慮すると、右カーブ直前までの時間が少しずつ変わってしまい、うまく曲がることはできなっかた。僕たちは改めてロボットを作り直すことにした。 *新ロボット(光センサー二つ) [#ad3ec446] 光センサーが二つあるどんなカーブにも対応できるロボット↓ *製作過程Part2 [#u7b552c8] **1:光センサー二つのロボット作成 [#g6a5672f] 土台は前ロボットのままで、前方に光センサーを二つ取り付けた。↓ **2:メリット [#m9bafa30] **3:デメリット [#hfccc881] *苦労した点 [#u66b42a9] タッチセンサーと光センサーを同じ場所に取り付けるのに苦労した。光センサーが地面に近すぎると、うまく明るさを認識できずに走らなかったり、遠すぎるとずっと走り続けたりした。最終的にはちょうど良い位置(地面から5センチくらい)を見つけることができた。 光センサー一つのロボットの時while のループの中に until (SENSOR_3==1); というプログラムを作ってしまいロボットが動かなかった。間違いを指摘していただき、先生に感謝しています。ありがとうございます。今度は自分たちで気づけるようにしたい。 *プログラム [#c3f2ae2f] #define THRESHOLD 40 #define Do 523 #define Re 587 #define Mi 659 #define Fa 698 #define Sol 784 task play_music() // 走行時に鳴る音楽のプログラム { while(true) { PlayTone(Mi,25); Wait(15); PlayTone(Re, 5); Wait(5); PlayTone(Do,15); Wait(10); PlayTone(Re,15); Wait(10); PlayTone(Mi,15); Wait(10); PlayTone(Mi,15); Wait(10); PlayTone(Mi,35); Wait(20); PlayTone(Re,15); Wait(10); PlayTone(Re,15); Wait(10); PlayTone(Re,35); Wait(20); PlayTone(Mi,15); Wait(10); PlayTone(Sol,15); Wait(10); PlayTone(Sol,35); Wait(20); PlayTone(Mi,25); Wait(15); PlayTone(Re, 5); Wait(5); PlayTone(Do,15); Wait(10); PlayTone(Re,15); Wait(10); PlayTone(Mi,15); Wait(10); PlayTone(Mi,15); Wait(10); PlayTone(Mi,35); Wait(20); PlayTone(Re,15); Wait(10); PlayTone(Re,15); Wait(10); PlayTone(Mi,25); Wait(15); PlayTone(Re, 5); Wait(5); PlayTone(Do,55); Wait(30); } } task main () { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_TOUCH); while(true) { start play_music; while (SENSOR_3==0){ if(SENSOR_1<THRESHOLD) { OnFwd(OUT_A); Off(OUT_C); } if(SENSOR_2<THRESHOLD) { Off(OUT_A); OnFwd(OUT_C); }else{ OnFwd(OUT_A+OUT_C);} } while (SENSOR_3==1){ stop play_music; Off(OUT_A+OUT_C); OnRev(OUT_A+OUT_C);Wait(130);} } } *感想 [#c0c44a14] 黒い線が光に反射してしまい、練習ではうまくセンサーが線を認識できずに大変だった。 音楽の鳴らすタイミングのプログラムがなかなか上手くできなくて少し苦労した。 光センサーが一つのロボットをコースでうまく走らせることができなくて残念だった。 *コメントをどうぞ [#ja4dc233] -もう少し"過程"の説明があると面白い物に仕上がると思います。 -- [[ヒロヤ]] &new{2007-06-21 (木) 13:02:08}; -while のループの中に until (SENSOR_3==1); という命令がありますが、この命令があるとタッチセンサーが反応するまで次の命令に進むことができず、ライントレースを行うことができないのではないでしょうか。もう一度、プログラムの流れをよく考えてみてください。 -- [[松本]] &new{2007-06-26 (火) 08:57:49}; #comment