黒の線に沿って走るロボットを作成した。
●交差点で優先側を走っていない場合には、一時停止し、もう一台のロボットが走り去ってからまた動き出すこと。
●前方にあるもう一台のロボットに接触した場合、ロボットを停止させ、もう一台のロボットが走り去るのを待つ。
●ロボットのスピードは速い方がよい。
●コースには二カ所以上のカーブを入れること。
交差点が二個あるカーブを重視した少し複雑なコースにした。 カーブが急なため、プログラミングが重要である。
タイヤは三輪で後輪に大きなタイヤを置くことによって動きを安定させ、土台は地面に対し平行になるようにした。 前輪にはモーターはついていない。
光センサーは、黒線かそうでないかの判断をより早くするため、前の方につけた。 また、光センサーが土台から外れるのを防ぐため輪ゴムで補強した。
タッチセンサーは一番前につけ、一つだけにすることによってスリムさを出すことにした。
全体として細長くシンプルな感じになり、難しい感じがなく、非常に使いやすく、いいロボットになった。
#define Do 523 #define Re 587 #define Mi 659 #define Fa 698 #define Sol 784 #define Ra 440 #define Shi 494 #define DO 1047
task play_music() ドレミの歌 { while (true) { PlayTone(Do,25); Wait(30); PlayTone(Re, 5); Wait(10); PlayTone(Mi,25); Wait(30); PlayTone(Do, 5); Wait(10); PlayTone(Mi,10); Wait(15); PlayTone(Do,10); Wait(15); PlayTone(Mi,20); Wait(25); PlayTone(Re,25); Wait(30); PlayTone(Mi, 5); Wait(10); PlayTone(Fa, 5); Wait(10); PlayTone(Fa, 5); Wait(10); PlayTone(Mi, 5); Wait(10); PlayTone(Re, 5); Wait(10); PlayTone(Fa,40); Wait(45); PlayTone(Mi,25); Wait(30); PlayTone(Fa, 5); Wait(10); PlayTone(Sol,25); Wait(30); PlayTone(Mi, 5); Wait(10); PlayTone(Sol,10); Wait(15); PlayTone(Mi,10); Wait(15); PlayTone(Sol,20); Wait(25); PlayTone(Fa,25); Wait(30); PlayTone(Sol, 5); Wait(10); PlayTone(Ra, 5); Wait(10); PlayTone(Ra, 5); Wait(10); PlayTone(Sol, 5); Wait(10); PlayTone(Fa, 5); Wait(10); PlayTone(Ra,40); Wait(45); PlayTone(Sol,25); Wait(30); PlayTone(Do, 5); Wait(10); PlayTone(Re, 5); Wait(10); PlayTone(Mi, 5); Wait(10); PlayTone(Fa, 5); Wait(10); PlayTone(Sol, 5); Wait(10); PlayTone(Ra,40); Wait(45); PlayTone(Ra,25); Wait(30); PlayTone(Re, 5); Wait(10); PlayTone(Mi, 5); Wait(10); PlayTone(Fa, 5); Wait(10); PlayTone(Sol, 5); Wait(10); PlayTone(Ra, 5); Wait(10); PlayTone(Shi,40); Wait(45); PlayTone(Shi,25); Wait(30); PlayTone(Mi, 5); Wait(10); PlayTone(Fa, 5); Wait(10); PlayTone(Sol, 5); Wait(10); PlayTone(Ra, 5); Wait(10); PlayTone(Shi, 5); Wait(10); PlayTone(DO,40); Wait(45); PlayTone(DO, 5); Wait(10); PlayTone(Shi, 5); Wait(10); PlayTone(Ra,10); Wait(15); PlayTone(Fa,10); Wait(15); PlayTone(Shi,10); Wait(15); PlayTone(Sol,10); Wait(15); PlayTone(DO,40); Wait(45); } }
#define THRESHOLD 40 task main() { start play_music ; //ドレミの歌を流す SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1を光センサーとする SetSensor(SENSOR_2,SENSOR_TOUCH); //センサー2をタッチセンサーとする while(true) { while(SENSOR_2==0) //タッチセンサーが触れてないとき { if(SENSOR_1 < THRESHOLD) //黒い線に沿うプログラム { OnFwd(OUT_A); Off(OUT_C); }else{ Off(OUT_A); OnFwd(OUT_C); } } Off(OUT_A+OUT_C); //タッチセンサーが触れてるとき、一時停止するプログラム Wait(100); } }
工夫したところや苦労したところは、タッチセンサーと光センサーをどのように一直線上に置き、使いやすくかつシンプルにするかという点で、レゴをたくさん使って強度を補強すると重くなりタッチセンサーと光センサーの働きもあまりよくないので、考えた結果輪ゴムを使うことにより、強度の補強と機械の軽量化に成功した。
ロボットのボディのシンプルさを意識するあまり、光センサーを1つだけ使うことにしてしまった。そのため、光センサー1つでは交差点であるかそうでないかの見分けをつけることが出来ず、交差点での一時停止のプログラムをどんなに頑張っても作ることが出来なかった。つまり、ほかの班のように光センサーを二個にし、両方が白線上、片方が白線でもう片方が黒線上、その反対、両方が黒線上、という4パターンにして交差点を判断させるべきであった。 なので、最初から後々のことをよく考えてロボット作成の計画を立てるべきだった。
機械のバランスを考えるとうまくいかないことが多く、プログラムを作るときも、ものすごく手間取ってしまったが、出来上がりを見てみるとなかなかよく出来ていてよかったです。今度はもう少し複雑なプログラムにしたいと思いました。
やはりこれは交差点での優先を考えなかったことにあり、光センサー一つで作ることにこだわりすぎて方法を見失ってしまったことにある。第二にコースの作り方を間違ってしまったことにあると思う。コースのカーブはもっと直角に近くすべきであり、カーブの角度を厳しくすると機械が判断できなくなり、だめであった。三番目にプログラムでもっと簡単なプログラムで大丈夫だと思っていたが、やり終わってみるとプログラムが全然足りず動きに幅がなかった。これらの点が失敗につながったのであり、もう別の課題に入ったため作り直すことができないが、これらの失敗をロボコンに生かそうと思いました。