目次

黒い線に沿って動くロボット

各チームで作成したコースを1周するロボットを製作せよ。交差点以外のコース上に350mlの空の空き缶を2個以上おき、空き缶にぶつかった時には次のような動作するプログラムを作成せよ。(他のメンバーと重ならないように一人一つのプログラムを作成する)

1. 空き缶をコース上に戻して再びコースに戻って進む

2. 空き缶を次の交差点まで運んで行き、その交差点に空き缶を残してさらにコースに沿って進む

3. 奇数回目に空き缶に遭遇したら、その場で反転して進み、偶数回目に遭遇したら、空き缶を押しのけて進む

ただし、

速さと正確さを追求すること

コースを1周したら自動的に止まること

交差点では一時停止すること

メンバー

みさいづ、しんたに

コース紹介

RIMG1304.JPG
  • カーブを急にしすぎた。
  • コースの間隔が狭くて、空き缶の置き場所に困った。

ロボット製作

RIMG1317.JPG
RIMG1318.JPG

工夫した点

  • タッチセンサーを反応しやすくした。
  • 空き缶を固定できるようにした。
  • 光センサーを急カーブで曲がれるように離した。

反省点

  • タッチセンサーの反応がよすぎて、当たってもいないのに反応することがあった。
  • 全体的にバランスが悪すぎて曲がる時にガタガタしてしまった。
  • 転送するとき分離させないと転送が成功しないようになってしまった。

プログラム(みさいづ)

  • 課題 空き缶をコース上に戻して再びコースに戻って進む
    #define black 35//黒い線の値
    #define arm_time 40//腕を上げ下げさせる時間
    int turn_time;//旋回する時間
    #define arm_down OnFwd(OUT_B);Wait(arm_time);Off(OUT_B);//腕を下げる(缶を離す)
    #define arm_up OnRev(OUT_B);Wait(arm_time);Off(OUT_B);//腕を上げる(缶を掴む)
    #define turn OnFwd(OUT_C);OnRev(OUT_A);Wait(turn_time);Off(OUT_C+OUT_A);//旋回する
    #define turn_right OnFwd(OUT_A);OnRev(OUT_C);//右回転
    #define turn_left OnFwd(OUT_C);OnRev(OUT_A);//左回転
    #define GOAL 6//交差点を6回越えたら終了
    int cross;//変数(交差点を通った回数)
    task main ()
    {
       cross=0;//変数crossの初期値
       turn_time=165;//変数turn_timeの初期値
       SetSensor(SENSOR_1, SENSOR_LIGHT);//センサー1を光センサーとする
       SetSensor(SENSOR_2, SENSOR_TOUCH);//センサー2をタッチセンサーとする
       SetSensor(SENSOR_3, SENSOR_LIGHT);//センサー3を光センサーとする
        while (cross<GOAL) {
             if ((SENSOR_3 < black)&&(SENSOR_1 < black))//センサー1&3が黒い線に反応したとき
               {
               PlaySound(SOUND_DOWN);//音を鳴らす
               Off(OUT_C+OUT_A);
               Wait(50);
               OnFwd(OUT_C+OUT_A);//前進
               Wait(50);
               cross++;//変数crossを1増やす
               }            
             else if (SENSOR_3 < black)//センサー3が黒い線に反応したとき
               { 
               turn_right;
               }            
             else if (SENSOR_1 < black) //センサー1が黒い線に反応したとき
               {
               turn_left;
               }
             else if (SENSOR_2==1) //タッチセンサーが反応したとき
               {
               PlaySound(SOUND_UP) ; //音を鳴らす
               Off(OUT_C+OUT_A);
               Wait(50);
               arm_down;//缶の移動開始
               turn;
               OnFwd(OUT_C+OUT_A);//前進
               Wait(80);
               Off(OUT_C+OUT_A);
               Wait(50);
               arm_up;//缶の移動終了
               OnRev(OUT_C+OUT_A);
               Wait(100);
               Off(OUT_C+OUT_A);
               turn;
               OnRev(OUT_C+OUT_A);
               Wait(50);
               turn_time=turn_time+15;//二回目に缶をどかすとき、旋回の時間を1.9秒にする
               }    
             else //どのセンサーも反応無しの時
               { 
               OnFwd(OUT_C+OUT_A);//前進
               }      
        }
     Off(OUT_C+OUT_A);//終了
    }

プログラム(しんたに)

  • 課題 空き缶を次の交差点まで運んで行き、その交差点に空き缶を残してさらにコースに沿って進む
    int kg;
    int stop_time;
    #define kan_catch OnFwd(OUT_B);Wait(40);Off(OUT_B);//缶掴む
    #define kan_put OnRev(OUT_B);Wait(40);Off(OUT_B);//缶離す
    task main ()
    {
        SetSensor(SENSOR_1, SENSOR_LIGHT);
        SetSensor(SENSOR_3, SENSOR_LIGHT);
        SetSensor(SENSOR_2, SENSOR_TOUCH); 
    
    kg=0;//kgに0を代入
    stop_time=0;//stop_timeに0を代入
        while (stop_time<8) 
        {
          if (SENSOR_1 < 35)//光センサー1が黒を認識 
    	{
     	OnRev(OUT_A);//白の部分まで戻る 
    	OnFwd(OUT_C);
    }else if (SENSOR_3 < 35)//光センサー3が黒を認識
    	{
    	OnRev(OUT_C);//白の部分まで戻る
    	OnFwd(OUT_A);
    }else{
    	OnFwd(OUT_A+OUT_C);//光センサーがどちらとも白を認識しているとき前進
    	}
    if (SENSOR_1 < 35 && SENSOR_3 < 35)//光センサーがどちらとも黒を認識したら交差点と認識
    {
    	stop_time=stop_time+1;//変数stop_timeに+1する
    	PlaySound(SOUND_CLICK) ;        // stop+1の確認
    	Off(OUT_A+OUT_C);//一時停止
    	Wait(50);
    if (kg==1){
    OnFwd(OUT_A+OUT_C);//少し前へ
    Wait(100);
    Off(OUT_A+OUT_C);
    
    OnFwd(OUT_C);//回転する
    OnRev(OUT_A);
    Wait(170);
    Off(OUT_A+OUT_C);
    
    kan_put;//缶を置く
    
    OnRev(OUT_A+OUT_C);//缶に当たらないように後ろに移動
    Wait(50);
    Off(OUT_A+OUT_C);
    OnFwd(OUT_A);//回転する
    OnRev(OUT_C);
    Wait(170);
    Off(OUT_A+OUT_C);
    OnRev(OUT_A+OUT_C);//元の位置へ
    Wait(50);
    Off(OUT_A+OUT_C);
    kg=0;//kgに0代入
    }else if (kg==0){
    	OnFwd(OUT_A+OUT_C);
    	Wait(50);//交差点をとおり過ぎるまで前進
    		}
     }
    if (SENSOR_2==1)//タッチセンサーが反応
    {
    if (kg==0){
    kg=1;//kgに1代入
    kan_catch;//缶を掴む
    }
    }
    if (stop_time==7)//stop_timeが7になった時
    {
      	Float(OUT_A+OUT_C);//停止
    	stop_time=stop_time+3;//whileを抜ける
    }
    }
    }

工夫した点

  • 交差点を通った回数を数えて決まった数になったら止まるようにした。(しんたに)
  • 缶をどかすとき、一回目と二回目の旋回の時間を変えた。(みさいづ)
  • 交差点や缶に当たったときに音が鳴るようにした。(みさいづ)

反省点

  • なめらかな曲がりをできるプログラムにならなかった。(しんたに)
  • プログラムの微調整があまりうまくいかなかった。(しんたに)
  • うまく整理ができず、長いプログラムになってしまった。(みさいづ)

感想

みさいづ

  • 時間が少なくロボットの作成が雑になってしまった。
  • 空き缶が軽く、タッチセンサーを反応させるのが難しかった。

しんたに

  • どうすれば失敗することなくできるかを考えるのが難しかった。
  • 試していると予想外の問題が出ることが多く、解決するに苦労した。

コメント

  • ロボット本体だけでなくプログラムについても工夫した点を具体的に説明しましょう。 -- 松本 2010-07-09 (金) 14:28:03
  • ロボットについては簡潔に工夫点が説明されていてよいと思います。プログラムについて考えられる改善点でもよいのであげてみてください -- TAKA? 2010-07-09 (金) 17:39:37


添付ファイル: fileRIMG1318.JPG 221件 [詳細] fileRIMG1317.JPG 224件 [詳細] fileRIMG1316.JPG 165件 [詳細] fileRIMG1307.JPG 158件 [詳細] fileRIMG1304.JPG 230件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-07-09 (金) 17:39:37 (3331d)