今回は黒のラインに沿って走るロボットを制作した。
光センサーによって黒の部分と白の部分を見極めて走るようになっている。
センサーが両方白の部分にある場合は進み、両方黒なら停止。また片方が黒でもう一方が白なら修正を聞かしながらライン上を移動していく仕組みになっている。
くわが たろう
桑我 太郎
コースはエンドレスに進み続けかつ交差点を二つという課題のもとR班,L班と協力し決定した。
ロボットが90度の曲がり角を曲がるのは非常に難しいと聞き、あえて緩やかなカーブを作ってある。
グループで一つのコース設定をしなければならず、お互い別のロボットを作っていることから光センサーとの関係により黒線の太さを統一することに気をつけた。
また、交差点の部分に突入する時の縦棒は光センサーのプログラム上一時停止し数秒後に進めるようにするために書いた。形に特に意味はない。
上記に記したが、ライントレースロボなので光センサーがついている。
またこれに加えて何か障害物に当たった時に一時停止するためのタッチセンサーも搭載されている。
光センサーは一つでも進むことはできるが、一つだと線から外れた時にラインの探し方が遅れるが、二つだと短時間で修正が利くというアドバイスのもと光センサーを二つつけている。
●タッチセンサーの部品に黒のバンパーを使用し、見た目をクワガタに似せて作っている。
●光センサーを二つ搭載している。
●あまり大型にならないようコンパクトに収まるように意識している。
●音楽がなるようにプログラミングをしてみた!
#define THRRSHOLD 40 #define Do 523 #define Re 587 #define Mi 659 #define Fa 698 #define So 784 #define Ra 880 #define Si 988 #define Jo 1047 task play_music() // 音楽を演奏しながら走ります! { while (true) { PlayTone(Do,30) ; Wait(40); //キラキラ星です。 PlayTone(Do,30) ; Wait(40); PlayTone(So,30) ; Wait(40); PlayTone(So,30) ; Wait(40); PlayTone(Ra,30) ; Wait(40); PlayTone(Ra,30) ; Wait(40); PlayTone(So,60) ; Wait(80); PlayTone(Fa,30) ; Wait(40); PlayTone(Fa,30) ; Wait(40); PlayTone(Mi,30) ; Wait(40); PlayTone(Mi,30) ; Wait(40); PlayTone(Re,30) ; Wait(40); PlayTone(Re,30) ; Wait(40); PlayTone(Do,60) ; Wait(80); PlayTone(So,30) ; Wait(40); PlayTone(So,30) ; Wait(40); PlayTone(Fa,30) ; Wait(40); PlayTone(Fa,30) ; Wait(40); PlayTone(Mi,30) ; Wait(40); PlayTone(Mi,30) ; Wait(40); PlayTone(Re,60) ; Wait(80); PlayTone(So,30) ; Wait(40); PlayTone(So,30) ; Wait(40); PlayTone(Fa,30) ; Wait(40); PlayTone(Fa,30) ; Wait(40); PlayTone(Mi,30) ; Wait(40); PlayTone(Mi,30) ; Wait(40); PlayTone(Re,60) ; Wait(80); PlayTone(Do,30) ; Wait(40); PlayTone(Do,30) ; Wait(40); PlayTone(So,30) ; Wait(40); PlayTone(So,30) ; Wait(40); PlayTone(Ra,30) ; Wait(40); PlayTone(Ra,30) ; Wait(40); PlayTone(So,60) ; Wait(80); PlayTone(Fa,30) ; Wait(40); PlayTone(Fa,30) ; Wait(40); PlayTone(Mi,30) ; Wait(40); PlayTone(Mi,30) ; Wait(40); PlayTone(Re,30) ; Wait(40); PlayTone(Re,30) ; Wait(40); PlayTone(Do,60) ; Wait(80); Wait(100); //キラキラ星終了部分です! } } task main () { SetSensor(SENSOR_2,SENSOR_TOUCH); SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); start play_music ; //キラキラ星が始まります! while(true){ if (SENSOR_2==1) //もしバンパーに障害物があたったらバックしてから止まります。 { OnRev(OUT_A+OUT_C);Wait(100); //1秒バックします。 Off(OUT_A+OUT_C);Wait(300); //3秒止まるようにしてあります。 } if (SENSOR_1>40) { if (SENSOR_3>40) { OnFwd(OUT_A) ; //線からずれてない時には、直進します!! OnFwd(OUT_C) ; }else{ Off(OUT_C) ; //Bは止まるようになってます。 OnFwd(OUT_A) ; //線の左にずれたら右に直します。 } }else{ if (SENSOR_3>40) { OnFwd(OUT_C) ; //線の右にずれたら左に直します。 Off(OUT_A) ; //Aは止まるようになってます。 }else{ Off(OUT_A+OUT_C) ;Wait(300); //交差点に入る時、優先道路でない時は一時停止します。 OnFwd(OUT_A+OUT_C) ;Wait(80); //一時停止したあとで0.8秒直進して、また線のトレースを再開します。 } } } }
今回の課題は、ライントレースということでしたが、最初は光センサーを一つで挑戦しようと思い、斜めに交差など複雑なプログラムなどを必死になって考えたのですが、先生にダメだしをくらい、やむを得なく光センサーを二つ使うことになり、かなりの遠回りをしました。また、優先道路でないとき一時停止するというプログラムするのが大変でした。
一度作ったプログラミングでは交差点の部分で一時停止はするものの、
そこから次ぎに進むときにラインに沿って行かずそのままラインのない方向に進んでしまった。
原因を突き止めてみると、コースの曲がり角を曲がった後ロボットの車体が斜めのままになっているためその状態から真っすぐに進んでいた。
当初、原因がなかなか分からず悩みに悩んだ。
苦労した点にものべているが、交差点で斜めに進むという事態を解決するために一時停止した後は1秒進むように設定されていたところを少し短めにして、0.8秒にしてみた。
ある程度線の上を進むように出来て、もう片方の組と2体同時に走らしてみたのですが、ぶつかった後にコースアウトしたり、ひっくり返ったりしたり、止まってしまったことがあったので、ぶつかった時に、止まるだけでなく、少しバック出来るようにしました。すると、問題は解決しました!!
結果上手く真っすぐ進む事ができたので良かった!!
また前回時間がなくてギリギリになっていたという反省点があった事を振り返り、余裕でできたとは言いがたいが少し時間があったので、音楽がなるようにプログラミングしてみた。
曲:きらきら星
コース決めに少々時間がかかったこと。4人で一つ以上案を出し合ってロボの進み方を考慮して考えているとなかなか決まらず期間直前まで決まらなかった。
また、他のチームのところを参考にしてみるとロボットの進む早さを追求しているところがあった。私たちのチームは早さに関しては何も考えていなかったのでここで初めて気づかされた。どうすれば早く進む事ができるのかを解明するのが今後の課題である。
また、先生にバンパーが少し簡単なのでもっと工夫した方が良いと言われました。次回はもう少しデザインにも気をつけたいです。