2005/B7

☆右チーム☆(ブリトニー&かずま)

目次

プログラム

ライントレースのプログラム(試作)〔モーター2個〕

// ライントレースのプログラム
//
//    作成者:かずま
//    作成日:2005-11-18

#define THRESHOLD 45    // 閾値

task main()
{
    SetSensor(SENSOR_1, SENSOR_LIGHT);    // センサ端子1に接続されたセンサが 
                                          // 光センサであると宣言
    SetSensor(SENSOR_3, SENSOR_LIGHT);    // センサ端子3に接続されたセンサが 
                                          // 光センサであると宣言
    SetPower(OUT_A,3);                    // 出力Aのパワーを3に設定

    SetPower(OUT_C,3);                    // 出力Cのパワーを3に設定

    while(true)
    {
        if((SENSOR_1 < THRESHOLD) && (SENSOR_3 > THRESHOLD))    // センサ1が黒線上かつセンサ3が黒線外のとき
        {
            OnFwd(OUT_C);                                       // 出力Cのみ前進する
            Off(OUT_A);
        }

        if((SENSOR_1 > THRESHOLD) && (SENSOR_3 < THRESHOLD))    // センサ1が黒線外かつセンサ3が黒線上のとき
        {
            OnFwd(OUT_A);                                       // 出力Aのみ前進する
            Off(OUT_C);
        }

        else                                                    // センサ1、センサ3がともに黒線上又は黒線外のとき
        {
            OnFwd(OUT_A+OUT_C);                                 // 前進する
        }
    }
}

・思ったより難しい...直角と鋭角のカーブがあやしいなぁ。ゆっくり動かせば何とかなるかと思って、パワーを捨てました。コースを太くした方が良いのかも(-_-;)

ライントレースのプログラム(試作2号)〔モーター2個〕

// ライントレースのプログラム
//
//    作成者:かずま
//    作成日:2005-11-24

#define THRESHOLD 45    // 閾値

task main()
{
    SetSensor(SENSOR_1, SENSOR_LIGHT);    // センサ端子1に接続されたセンサが 
                                          // 光センサであると宣言
    SetSensor(SENSOR_3, SENSOR_LIGHT);    // センサ端子3に接続されたセンサが 
                                          // 光センサであると宣言
    SetPower(OUT_A,3);                    // 出力Aのパワーを3に設定

    SetPower(OUT_C,3);                    // 出力Cのパワーを3に設定

    while(true)
    {
        if((SENSOR_1 < THRESHOLD) && (SENSOR_3 > THRESHOLD))    // センサ1が黒線上かつセンサ3が黒線外のとき
        {
            Off(OUT_A+OUT_C);
            OnFwd(OUT_C);                                       // 左回転する
            OnRev(OUT_A);
        }

        if((SENSOR_1 > THRESHOLD) && (SENSOR_3 < THRESHOLD))    // センサ1が黒線外かつセンサ3が黒線上のとき
        {
            Off(OUT_A+OUT_C);
            OnFwd(OUT_A);                                       // 右回転する
            OnRev(OUT_C);
        }

        else                                                    // センサ1、センサ3がともに黒線上又は黒線外のとき
        {
            Off(OUT_A+OUT_C);
            OnFwd(OUT_A+OUT_C);                                 // 前進する
        }
    }
}

・より鋭くカーブできるように改良!(さらに遅くなったけど…)なぜか左折が苦手、光センサーが原因かなぁ?

ライントレースのプログラム(完成版)〔モーター2個〕

// ライントレースのプログラム
//
//    作成者:かずま
//    作成日:2005-11-24

#define THRESHOLD 45    // 閾値

task main()
{
    SetSensor(SENSOR_1, SENSOR_LIGHT);    // センサ端子1に接続されたセンサが 
                                          // 光センサであると宣言
    SetSensor(SENSOR_3, SENSOR_LIGHT);    // センサ端子3に接続されたセンサが 
                                          // 光センサであると宣言
    while(true)
    {
        if((SENSOR_1 < THRESHOLD) && (SENSOR_3 > THRESHOLD))    // センサ1が黒線上かつセンサ3が黒線外のとき
        {
            Off(OUT_A+OUT_C);
            OnFwd(OUT_C);                                       // 左回転する
            OnRev(OUT_A);
        }

        if((SENSOR_1 > THRESHOLD) && (SENSOR_3 < THRESHOLD))    // センサ1が黒線外かつセンサ3が黒線上のとき
        {
            Off(OUT_A+OUT_C);
            OnFwd(OUT_A);                                       // 右回転する
            OnRev(OUT_C);
        }

        if((SENSOR_1 > THRESHOLD) && (SENSOR_3 > THRESHOLD))    // センサ1、センサ3がともに黒線外のとき
        {
            Off(OUT_A+OUT_C);
            OnFwd(OUT_A+OUT_C);                                 // 前進する
        }
    }
}

・elseを無くしたらなぜか出来ました。SetPowerもあんまり意味ない気がしたんで排除。ちなみに、両方のセンサが黒線上のときのプログラムがないのはわざとです。

ライントレースのロボット(完成版)〔モーター1個〕

// ライントレースのプログラム
//
//    作成者:かずま
//    作成日:2005-12-8

#define THRESHOLD 45    // 閾値

task main()
{
    SetSensor(SENSOR_2, SENSOR_LIGHT);    // センサ端子2に接続されたセンサが 
                                          // 光センサであると宣言
    
    while(true)
    {
        if(SENSOR_2 < THRESHOLD)          //センサ2が黒線上のとき
        {
            Off(OUT_B);
            OnFwd(OUT_B);                 //モーターBを正回転
        }
        
        if(SENSOR_2 > THRESHOLD)          //センサ2が黒線外のとき
        {
            Off(OUT_B);
            OnRev (OUT_B);                //モーター2を逆回転
        }
    }
}

シンプル・イズ・ベストですな。これでうまくいきます。

ロボット写真

右チームのラインロボ1 右チームのラインロボ2 右チームのラインロボ3 右チームのラインロボ4 右チームのラインロボ5

走るコース

かわいらしいWCマークにしました♪

  ↓↓↓↓↓↓↓↓

右チームのコース

線をちょっと太くしました

  ↓↓↓↓↓↓↓↓

右チームのコースその2

感想

難しかった点

  • モーター1個のギアの構造が難しかった。(特にラチェットとか)
  • 鋭角のカーブを曲がること。

工夫した点

  • モーター1個のロボは動作の仕組みをかなり小型化することに成功しましたv
  • センサと駆動するタイヤの位置を近づけたことで正確にライントレースをするようになった。
  • より鋭く曲がるために、線から外れると回転動作をするようにした。

反省点

  • コースのデザインは良かったけど、難易度が高すぎた。おかげで簡単なはずのプログラムを作り直しまくり…

感想

  • ライントレースに関してはプログラム簡単な方がいいですね。下手に変えると途端にうまくいかなくなります Σ( ̄Д ̄;)ナンデヤ!
  • それからコースを作るときは難易度をよく考えないと…orz

コメントはこちらまで

  • 基本的には SetPower はパワーを調整するための命令で回転スピードを調整するための命令ではないので、ゆっくりと動かしたい場合にはギア比を下げたり小さなタイヤを使用しましょう。 -- 松本(教員)? 2005-11-24 (木) 17:23:29
  • ずっとSetPowerでスピードまで変わるものだと勘違いしてました。ありがとうございました。 -- かずま? 2005-11-28 (月) 13:48:05
  • 確かにSetPowerでスピードも変わるのですが、おそらく期待するほどは(?)変わらないと思います。SetPower(1) くらいにするとフルパワーのときとかなり違うはずですが実際にはどんな感じでしたでしょうか? -- 松本(教員)? 2005-11-28 (月) 17:56:04
  • そうですね、ほとんど変わりませんでした。それと動きに覇気が無いと言うか、見ててイライラします。 -- かずま? 2005-11-29 (火) 16:33:13
  • モーターが一つと二つの場合の両方をやろう。 -- まいける(TA) 2005-12-02 (金) 17:53:09

戻る


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-02-17 (金) 21:58:02