今回の課題の黒い線の上を走るロボットですが、黒い線の上を走るときにスピードがありすぎると すぐにコースを脱線してしまったため、「スピードをどう抑えたロボを作れるか」ということを 念頭にロボの設計を考えました。その結果、スピードを遅くするにはタイヤを使うとスピードが出るので、 それならいっそのことタイヤをなくしてしまえばいいという結論に至りました。そこで考えついたのが、 タイヤの代わりにキャタピラを使えばどうかということです。
写真のようにギアの数を多くしたことで、マシンのスピードが減速し、コーナーでコースアウトしないようにしました。
タッチセンサはマシンの前方にフロントバンパーを取り付け、フロントバンパーに何かがぶつかると、バンパーが広報に沈み込みタッチセンサに触れる仕組みになっています。また、光センサは2つ取り付け、片方のセンサが黒線を認知したらそのセンサのついているほうに曲がるという仕組みでプログラムされています。
ミッキーマウスをイメージしてコースをつくりました。そのため十字路で交差するところが曲がりながら突入することになり、微調整が大変でした。難易度かなり高いです。
そこだけでなく、むしろさらに難しいと思うのはミッキーマウスでいう鼻から口にかけての部分です。まさにヘアピンカーブ。ちゃんと曲がりきれるか、毎回不安になります。
#define THRESHOLD 40 //閾値 #define RUN_TIME 600 //トレースする時間 task main() { //センサーを定義 SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_TOUCH); SetSensor(SENSOR_3,SENSOR_LIGHT); ClearTimer(0); while( Timer(0) <= RUN_TIME ){ //黒線上ではないとき直線 if(SENSOR_1 >= THRESHOLD && SENSOR_3 >= THRESHOLD){ OnFwd(OUT_A+OUT_C); } //黒線上のとき一旦道を譲り左方向へ移動(線上へ行くため) else if(SENSOR_1 < THRESHOLD && SENSOR_3 < THRESHOLD){ OnRev(OUT_A+OUT_C); Wait(30); OnFwd(OUT_A+OUT_C); Wait(30); Off(OUT_A+OUT_C); Wait(50) OnFwd(OUT_C); Off(OUT_A); Wait(240); until(SENSOR_3 <= THRESHOLD); } //右側が黒い線に入ると、右に曲がる。 else if(SENSOR_3 < THRESHOLD){ OnFwd(OUT_A); OnRev(OUT_C); Wait(4); } //左側が黒い線に入ると、左に曲がる。 else{ OnFwd(OUT_C); OnRev(OUT_A); Wait(4); } //ぶつかったときにタッチセンサーにより停止 if(SENSOR_2 == 1){ OnRev(OUT_A+OUT_C); Wait(50); Off(OUT_A+OUT_C); Wait(300); } } Off(OUT_A+OUT_C); //END }
#define E 330/ミの音(低い音) #define So 392 /ソ #define SSo 415/ソ# #define Ra 440/ラ #define RRa 466/ラ# #define Shi 494/シ #define Do 523/ド #define Re 587/レ #define RRe 622/レ# #define Mi 659/ミ #define Fa 698/ファ #define FFa 740/ファ# #define Sol 784/ソ #define r 880/ラ #define C 1047/ド(高い音) task play_music() { while (true) { PlayTone(Mi,10); Wait(15); PlayTone(Mi, 15); Wait(30); PlayTone(Mi,10); Wait(30); PlayTone(Do,10); Wait(15); PlayTone(Mi,20); Wait(30); PlayTone(Sol,20); Wait(60); PlayTone(So,20); Wait(60); PlayTone(Do,15); Wait(45); PlayTone(So, 15); Wait(45); PlayTone(E,15); Wait(45); PlayTone(Ra,25); Wait(30); PlayTone(Shi,25); Wait(30); PlayTone(RRa,10); Wait(15); PlayTone(Ra,20); Wait(30); PlayTone(So,15); Wait(20); PlayTone(Mi,15); Wait(20); PlayTone(Sol,15); Wait(20); PlayTone(r, 15); Wait(30); PlayTone(Fa,10); Wait(15); PlayTone(Sol,25);Wait(30); PlayTone(Mi,25); Wait(30); PlayTone(Do, 10); Wait(15); PlayTone(Re,10); Wait(15); PlayTone(Shi,15); Wait(45); PlayTone(Do,15); Wait(45); PlayTone(So, 15); Wait(45); PlayTone(E,15); Wait(45); PlayTone(Ra,25); Wait(30); PlayTone(Shi,25); Wait(30); PlayTone(RRa,10); Wait(15); PlayTone(Ra,20); Wait(30); PlayTone(So,15); Wait(20); PlayTone(Mi,15); Wait(20); PlayTone(Sol,15); Wait(20); PlayTone(r, 15); Wait(30); PlayTone(Fa,10); Wait(15); PlayTone(Sol,25);Wait(30); PlayTone(Mi,25); Wait(30); PlayTone(Do, 10); Wait(15); PlayTone(Re,10); Wait(15); PlayTone(Shi,15); Wait(75); PlayTone(Sol,10); Wait(15); PlayTone(FFa,10); Wait(15); PlayTone(Fa,10); Wait(15); PlayTone(RRe,15); Wait(30); PlayTone(Mi, 15); Wait(30); PlayTone(SSo,10); Wait(15); PlayTone(Ra,10); Wait(15); PlayTone(Do,15); Wait(30); PlayTone(Ra,10); Wait(15); PlayTone(Do,10); Wait(15); PlayTone(Re,10); Wait(45); PlayTone(Sol,15); Wait(15); PlayTone(FFa,15); Wait(15); PlayTone(Fa, 5); Wait(15); PlayTone(RRe,10); Wait(30); PlayTone(Mi,5);Wait(30); PlayTone(C,15); Wait(30); PlayTone(C,8); Wait(15); PlayTone(C,15); Wait(90); PlayTone(Sol,10); Wait(15); PlayTone(FFa,10); Wait(15); PlayTone(Fa,10); Wait(15); PlayTone(RRe,15); Wait(30); PlayTone(Mi, 15); Wait(30); PlayTone(SSo,10); Wait(15); PlayTone(Ra,10); Wait(15); PlayTone(Do,15); Wait(30); PlayTone(Ra,10); Wait(15); PlayTone(Do,10); Wait(15); PlayTone(Re,10); Wait(45); PlayTone(RRe,10); Wait(45); PlayTone(Re,10); Wait(45); PlayTone(Do,20); Wait(120); PlayTone(Sol,10); Wait(15); PlayTone(FFa,10); Wait(15); PlayTone(Fa,10); Wait(15); PlayTone(RRe,15); Wait(30); PlayTone(Mi, 15); Wait(30); PlayTone(SSo,10); Wait(15); PlayTone(Ra,10); Wait(15); PlayTone(Do,15); Wait(30); PlayTone(Ra,10); Wait(15); PlayTone(Do,10); Wait(15); PlayTone(Re,10); Wait(45); PlayTone(Sol,15); Wait(15); PlayTone(FFa,15); Wait(15); PlayTone(Fa, 5); Wait(15); PlayTone(RRe,10); Wait(30); PlayTone(Mi,5);Wait(30); PlayTone(C,15); Wait(30); PlayTone(C,8); Wait(15); PlayTone(C,15); Wait(90); PlayTone(Sol,10); Wait(15); PlayTone(FFa,10); Wait(15); PlayTone(Fa,10); Wait(15); PlayTone(RRe,15); Wait(30); PlayTone(Mi, 15); Wait(30); PlayTone(SSo,10); Wait(15); PlayTone(Ra,10); Wait(15); PlayTone(Do,15); Wait(30); PlayTone(Ra,10); Wait(15); PlayTone(Do,10); Wait(15); PlayTone(Re,10); Wait(45); PlayTone(RRe,10); Wait(45); PlayTone(Re,10); Wait(45); PlayTone(Do,20); Wait(120); PlayTone(Do,10); Wait(15); PlayTone(Do,15); Wait(30); PlayTone(Do, 15); Wait(30); PlayTone(Do,10); Wait(15); PlayTone(Re,25); Wait(30); PlayTone(Mi,10); Wait(15); PlayTone(Do,15); Wait(30); PlayTone(Ra,10); Wait(15); PlayTone(So,15); Wait(60); PlayTone(Do,10); Wait(15); PlayTone(Do,15); PlayTone(Do, 15); Wait(30); PlayTone(Do,10); Wait(15); PlayTone(Re,10);Wait(15); PlayTone(Mi,25); Wait(135); PlayTone(Do,10); Wait(15); PlayTone(Do,15); Wait(30); PlayTone(Do, 15); Wait(30); PlayTone(Do,10); Wait(15); PlayTone(Re,25); Wait(30); PlayTone(Mi,10); Wait(15); PlayTone(Do,15); Wait(30); PlayTone(Ra,10); Wait(15); PlayTone(So,15); Wait(60); }} task main() { SetSensor(SENSOR_1, SENSOR_TOUCH); start play_music ; OnFwd(OUT_A+OUT_B); until (SENSOR_1 == 1); stop play_music ; Off(OUT_A+OUT_B); }
プログラムはタッチセンサ、光センサ、音楽の3つに分かれています。光センサでは2個のセンサを使い、片方のセンサが黒線を認識したときにそのセンサのあるほうに少しマシンをカーブさせるようにしてコースを回れるようにしました。交差点ではまっすぐわたると大きくコースアウトするので、左に少しカーブさせながらわたるという選択をしました。
・マリオの曲を作るときに、予想外に曲が長く制作時間がかなりかかってしまった。さらに、マリオは刻むリズムがかなり短いのでうまくリズムを刻むのが非常に難しく、何度も試行錯誤しながら曲の完成に至った。
・皆それぞれが集まる時間までに情報を手に入れてなかったため、集まっても何から始めるのか考えたりして時間が経過し、時間を浪費したので時間が足りなくなってしまった。
・始めにスピードが出すぎてコースアウトしていたときになかなか解決策が出てこず、マシンの設計に時間がかかってしまった。
・センサの不良、電池切れなどが本番時に起こり、あわててしまった。
・キャタピラを使うことによってスピードを減少させ、コーナーをスムーズに曲がれるようにすることができた。
・マリオなどの曲は非常に長く時間がかかったが、逆に自分が満足してしまうほどのよい作品に仕上げることができた。
・難しいコースであったが、交差点をまっすぐでなく軽く左に曲がりながら進むことによってうまく解決できた。
・課題1でもそうだったのだが、プログラム作成がかなりギリギリの時間になってしまったので、コースでの走行にうまく時間が取れず、微調整ができなかった。
・役割分担をしたが、かなり作業にかかる時間が偏っていたために、うまくスケジュール通りに作業が進行しなかった。次回からはスケジュールをしっかり管理してやっていきたい。
・コースのレベルをあげすぎて、交差点に苦労したので、今度から難易度にきをつけながら、作成したい。
・作成は途中でだれないように始めに事前に情報を手に入れて、それを理解してから始めるべきだと思った。
・音楽は時間をかけてやったので、非常に満足のいくものができた。