目次

課題2:黒い線に沿ってコースを動くロボット

目標:コース上の黒い線に沿って動き、コースを三周したら止まるロボットを作る。

課題条件

・交差点で優先側を走っていない場合には、一時停止する。
・前方にあるもう一台のロボットに接触した場合には停止して相手のロボットが行き過ぎる、あるいは距離が離れるのを待つ。
・コースを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つのロボットを走らせるとすれ違うときに、 お互いバンパーじゃない部分で接触し停止する。
→両方のロボットをタイヤ構造にする。
・プログラムが複雑なため本番でタイマーが作動しなかった。
→最後まで諦めず、放課後残ってうまく作動するようになった。

課題2を終えての感想

・練習ではタイマーが動いたのに、本番ではタイマーが動かずまた暴走した。プログラムの見直しで改善できた。
・とりあえず時間がかかりました。交差点で二重に止まるという問題点が解決できたのでよかったです。

コメントお願いします。



添付ファイル: fileHI3B0015.JPG 358件 [詳細] fileHI3B0013.JPG 381件 [詳細] fileHI3B0012.JPG 370件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-06-19 (木) 19:15:31