・交差点で優先側を走っていない場合には、一時停止する。
・前方にあるもう一台のロボットに接触した場合には停止して相手のロボットが行き過ぎる、あるいは距離が離れるのを待つ。
・コースを3周したら自動的に止まること
ロボットの外形
基本構造のロボットの前部に光センサ2個とダブルバンパーをつける。
進むパーツはタイヤを用いて、うまくカーブを曲がれる様にした。。
光センサの部分
コースの幅が2.5cmなので、光センサ同士の間隔に注意した。
光センサをつける際のパーツを考えた。
なるべく2.5cmの幅に近づけた。
カーブのところは少し微調整した。
直線部はスピードを早くする、線で混乱させない、ために一部白線にした。
#define THRESHOLD 40 //閾値を40に設定
#define go OUT_A+OUT_C
#define TIMER 1500
task main() {
start line_trace; //ライントレーススタート
start check_touch; //衝突の感知のスタート
} task line_trace() {
SetSensor(SENSOR_1,SENSOR_LIGHT); //センサ1に光センサを定義
SetSensor(SENSOR_3,SENSOR_LIGHT); //センサ3に光センサを定義
ClearTimer(0);
while( Timer(0) <= TIMER ){
if(SENSOR_1 > THRESHOLD){ if(SENSOR_3 > THRESHOLD){ //両方のセンサが白を感知 OnFwd(go); //前進する }else{ //左が白、右が黒を感知 OnFwd(OUT_A);Off(OUT_C); SetPower(OUT_A,5); //左に曲がる } }else{ if(SENSOR_3 > THRESHOLD){ //左が黒、右が白を感知 OnFwd(OUT_C);Off(OUT_A); SetPower(OUT_C,5); //左に曲がる }else{ //両方のセンサが黒を感知 Off(go);Wait(100); //5秒間停止する OnRev(go);Wait (050); //0.5秒間進 OnFwd(go);Wait (180); //1.8秒間前進 } } }Off(go);
}
task check_touch() { SetSensor(SENSOR_2,SENSOR_TOUCH); //センサ2にタッチセンサを定義
while(true){ if(SENSOR_2 == 1){ //バンパーが衝撃を感知
stop line_trace; //ライントレース一時停止
Off(go);Wait(300); //3秒間停止する
start line_trace; //ライントレース再開
}
#define Re 587
#define Mi 659
#define So 784
#define Ra 880
#define Si 986
#define R 1175
task play_music() //アメージンググレース開始 {
while (true) { PlayTone(Re,25); Wait(30); PlayTone(So, 25); Wait(30); PlayTone(So,100); Wait(105); PlayTone(Si,25); Wait(30); PlayTone(So,25); Wait(30); PlayTone(Si,100); Wait(105); PlayTone(Ra, 50); Wait(55); PlayTone(So,100); Wait(105); PlayTone(Mi,50); Wait(55); PlayTone(Re,100); Wait(105); PlayTone(Re,25); Wait(30); PlayTone(So,25); Wait(30); PlayTone(So,100); Wait(105); PlayTone(Si,25); Wait(30); PlayTone(So, 25); Wait(30); PlayTone(Si,100); Wait(105); PlayTone(Ra,25);Wait(30); PlayTone(Si,25); Wait(30); PlayTone(R,200); Wait(205); PlayTone(Si,50); Wait(55); PlayTone(R,100); Wait(105); PlayTone(Si,25); Wait(30); PlayTone(So,25); Wait(30); PlayTone(Si,100); Wait(105); PlayTone(Ra,50); Wait(55); PlayTone(So,100); Wait(105); PlayTone(Mi,50); Wait(55); PlayTone(Re,100); Wait(105); PlayTone(Re,25); Wait(30); PlayTone(So,25); Wait(30); PlayTone(So, 100); Wait(105); PlayTone(Si,25); Wait(30); PlayTone(So,25); Wait(30); PlayTone(Si, 100); Wait(105); PlayTone(Ra,50); Wait(55); PlayTone(So,150); Wait(155); }
・光センサをとりつける幅
・よく使うプログラムは、定義を用いる。
・プログラムの微調整が面倒。
・ギアを速くすると、コースから脱線する。。
→左右に曲がるときのプログラムの最後にあったOff(OUT_A+OUT_C);の消去。
ギアの回転数をあげる。コースの改善。
・交差点で二重に止まる
→直進する時間を長くする。ロボット自体のスピードを速くする。
・強度が弱い。
→補強する。特に本体とモーターが着いてる部位を重点的に。
・2つのロボットを走らせるとすれ違うときに、
お互いバンパーじゃない部分で接触し停止する。
→両方のロボットをタイヤ構造にする。
・プログラムが複雑なため本番でタイマーが作動しなかった。
→最後まで諦めず、放課後残ってうまく作動するようになった。
・練習ではタイマーが動いたのに、本番ではタイマーが動かずまた暴走した。プログラムの見直しで改善できた。
・とりあえず時間がかかりました。交差点で二重に止まるという問題点が解決できたのでよかったです。