2009a

目次

課題3:懐中電灯に向かってブロックを投げるロボット

白いホイールを投げるロボットを作成し、以下の動きをするようにプログラムを作成した。

  • 懐中電灯を狙ってブロックを投げるロボ。
  • 懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げるロボ。
  • 懐中電灯に向かって進み、見失った時には再び探し7秒以上追尾できたら懐中電灯に向かってブロックを投げるロボ。

ロボットの工夫点

  • 没アイディア
    • テキスト通りに作っていたが回転することがうまくいかず、作り直した。
      090710_175253.jpg
    • 小回りがうまく出来ないため3輪にすることによりこの問題を解決した。
      SH010020.JPG

プログラム

  • 懐中電灯を狙ってブロックを投げるロボ。
#define TURN_TIME 30
task main(){
int light_max=0;
int t_max=0;
SetSensor(SENSOR_1,SENSOR_LIGHT); //一番明るい方向を探し出す
ClearTimer(0);OnFwd(OUT_A);
while ( Timer(0)<TURN_TIME){
if(SENSOR_1>light_max){
light_max=SENSOR_1;
t_max=Timer(0);
}
}
Off(OUT_A);
Wait(50);
OnFwd(OUT_A);
Wait(t_max);
Off(OUT_A);
while(SENSOR_1<60){  //明るくなるまで近づく
OnRev(OUT_A);
}
Off(OUT_A);
OnRev(OUT_B);
Wait(20);
}
  • 懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げるロボ。
    #define L 60  //Lは光を探すときに用いる
    #define M 80  //Mは光との距離をはかるのに用いる
    task main(){
    SetSensor(SENSOR_1,SENSOR_LIGHT);
    SetSensor(SENSOR_2,SENSOR_LIGHT); 
    while((SENSOR_1<M)&&(SENSOR_2<M)){  //光に近づくまで繰り返し
    if(SENSOR_1>L){    //どちらも明るければ直進
    if(SENSOR_2>L){   
    OnFwd(OUT_A);
    Wait(50);
    OnRev(OUT_A);
    Wait(50);
    }else{        //左が明るければ左に行く
    OnFwd(OUT_A);
    Wait(100);
    }else{
    if(SENSOR_2>L){   //右が明るければ右に
    OnRev(OUT_A);
    }else{        //どちらも暗ければ反転
    OnFwd(OUT_A);
    Wait(100);
    }
    }
    }
    OnFwd(OUT_B);   //光に近づけばブロックを投げる
    Wait(50);
    Off(OUT_B);
    }
    
  • 懐中電灯に向かって進み、見失った時には再び探し7秒以上追尾できたら懐中電灯に向かってブロックを投げるロボ。
    #define L 60
    #define M 80
    #define TURN_TIME 400
    task main(){
    int light_max=0;
    int t_max=0;
    SetSensor(SENSOR_1,SENSOR_LIGHT);
    SetSensor(SENSOR_2,SENSOR_LIGHT);
    ClearTimer(1);
    while(Timer(1)<7){    //7秒間繰り返す
    if(SENSOR_1>L){
    if(SENSOR_2>L){
    OnFwd(OUT_A);
    Wait(50);
    OnRev(OUT_A);
    Wait(50);
    }else{
    OnFwd(OUT_A);
    Wait(100);
    }
    }else{
    if(SENSOR_2>L)
    {OnRev(OUT_A);
    }else{
    ClearTimer(1);           //どちらのセンサーも暗くなったらタイマーをリセット
    ClearTimer(0);OnFwd(OUT_A);
    while(Timer(0)<TURN_TIME){             //どちらのセンサーも暗くなったら周囲で一番明るい方向を探す
    if(SENSOR_1>light_max){
    light_max=SENSOR_1;
    t_max=Timer(0);
    }
    }
    OnFwd(OUT_A);
    Wait(t_max);
    Off(OUT_A);
    }
    } 
    }
    OnFwd(OUT_B);     //7秒たったら投げる
    Wait(50);
    Off(OUT_B);
    }
    

感想

全く見当もつかないような課題だったが今回は先生がヒントをくれたおかげで楽とはいかなかったが比較的失敗は少なく出来た。 しかし、プログラムがあまり簡単に出来てないのでまだまだ改善していきたい。

コメント

コメントお願いします。

  • 二つ目のプログラムでは左が明るいときとどちらも暗いときの内容が一緒なので、まとめられると思います。3つ目のはもうすこしまとまりがはっきりするようにしましょう。 -- FI? 2009-08-05 (水) 09:19:36


添付ファイル: file090710_175253.jpg 236件 [詳細] fileSH010020.JPG 256件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-08-05 (水) 09:19:36