[[2008a/A3]]~ 08T2100A 08A1010A
#contents
*黒い線に沿って動くロボット [#ka7d8a69]
**プログラム [#fca55faa]
***音 [#s5ad8584]
とおりゃんせ
#define la 440
#define Si 494
#define Do 523
#define Re 587
#define Mi 659
#define Fa 698
#define Sol 784
#define La 880
task play_music() // 音楽を演奏するタスク
{
while(true)
{ PlayTone(Mi,100); Wait(100); //ミ
PlayTone(Mi,50); Wait(50); //ミ
PlayTone(Re,50); Wait(50); //レ
PlayTone(Mi,50); Wait(50); //ミ
PlayTone(Mi,25); Wait(25); //ミ
PlayTone(Re,25); Wait(25); //レ
PlayTone(Si,100); Wait(100); //シ
PlayTone(Fa,50); Wait(50); //ファ
PlayTone(Fa,25); Wait(25); //ファ
PlayTone(Fa,25); Wait(25); //ファ
PlayTone(La,50); Wait(50); //ラ
PlayTone(Fa,25); Wait(25); //ファ
PlayTone(Mi,25); Wait(25); //ミ
PlayTone(Fa,25); Wait(25); //ファ
PlayTone(Mi,25); Wait(25); //ミ
PlayTone(Re,25); Wait(25); //レ
PlayTone(Re,25); Wait(25); //レ
PlayTone(Mi,100); Wait(100); //ミ
PlayTone(Fa,50); Wait(50); //ファ
PlayTone(Fa,25); Wait(25); //ファ
PlayTone(Fa,25); Wait(25); //ファ
PlayTone(La,50); Wait(50); //ラ
PlayTone(Fa,25); Wait(25); //ファ
PlayTone(Mi,25); Wait(25); //ミ
PlayTone(Fa,25); Wait(25); //ファ
PlayTone(Mi,25); Wait(25); //ミ
PlayTone(Re,25); Wait(25); //レ
PlayTone(Re,25); Wait(25); //レ
PlayTone(Mi,100); Wait(100); //ミ
PlayTone(Do,75); Wait(75); //ド
PlayTone(Do,25); Wait(25); //ド
PlayTone(Mi,50); Wait(50); //ミ
PlayTone(Do,25); Wait(25); //ド
PlayTone(Si,25); Wait(25); //シ
PlayTone(Do,25); Wait(25); //ド
PlayTone(Si,25); Wait(25); //シ
PlayTone(la,25); Wait(25); //ラ
PlayTone(la,25); Wait(25); //ラ
PlayTone(Si,100); Wait(100); //シ
}
}
***メイン [#j1bf46cf]
#define THRESHOLD 42 //光センサーの閾値
#define RUN_TIME 1600 //走行時間
task main()
{
start play_music ; // 演奏を開始
}
task line_trace() { //ライントレース開始
SetSensor(SENSOR_1,SENSOR_LIGHT); //光センサー1
SetSensor(SENSOR_3,SENSOR_LIGHT); //光センサー3
SetSensor(SENSOR_2,SENSOR_TOUCH); // タッチセンサー
SetPower(OUT_A+OUT_C,7); //移動スピード
ClearTimer(0); //タイマーon
while (Timer(0)<= RUN_TIME){ //タッチセンサーが作動したら止まる。
if (SENSOR_2 ==1 ){
Off(OUT_A+OUT_C);
Wait(150);}
else{
if ((SENSOR_1> THRESHOLD) &&(SENSOR_3> THRESHOLD)){ //光センサーが閾値以上で前進
OnFwd(OUT_A);
OnFwd(OUT_C);}
else{
if (SENSOR_1> THRESHOLD){ //光センサー1が閾値以上で右に旋回
OnFwd(OUT_A);
Off(OUT_C);}
else{
if (SENSOR_3> THRESHOLD){ //光センサー3が閾値以上で左に旋回
Off(OUT_A);
OnFwd(OUT_C);}
else{
if ((SENSOR_1< THRESHOLD ) &&(SENSOR_3< THRESHOLD)){ //光センサーが閾値以下で一時停止
Off(OUT_A+OUT_C);
Wait(80);
OnFwd(OUT_A+OUT_C);
Wait(150);}
}
}
}
}
}
Off(OUT_A+OUT_C); //コースを3周した後に完全停止
Wait(150);}
**プログラム全体の流れ [#p99ae854]
基本的には、黒いラインをトレースして、コースから外れた場合元のコースに戻る。
***コース [#j7a22ba0]
#ref(2008a/A3/課題2右/couse.jpg,100%,)
**ロボットの種々の機能 [#vab30fef]
#ref(2008a/A3/課題2右/front.jpg,100%,)
1左光センサー 1由来~
2右光センサー 3由来~
3左センサー 2由来~
4右センサー 2由来~
#ref(2008a/A3/課題2右/back2.jpg,100%,)
1右タイヤ C由来~
2左タイヤ A由来~
**使ったセンサーの働き [#rbe5d055]
光センサー:黒いラインをトレースする。
タッチセンサー:もう一方のチームのマシンにあたったら止まる。
**困った点 [#ee78bdfe]
うまくタイマーが使えずに、マシンが止まらなかったこと。
**工夫した点 [#j7249b59]
センサーが誤作動を起こさないように、できるだけコースの紙に光センサーを近づけた。
光センサーとタッチセンサーをマシンの前につけると不安定だったので、部品をくつけて安定させた。
**コメントをお願いします [#pd04b238]
#comment
全体的にもう少し詳しく書いてください。例えば、ライントレースの原理を説明したり、工夫した点です。そうすれば、○になります。 F.I.
---------------