[[2016a/Member]]
目次
#contents
*課題 [#b9947262]
今回の課題はセンサーを利用し、ライントレースして目的の場所へ着くロボットを作ることです。
*ロボット本体の説明 [#q2f77fad]
#ref(2016a/Member/oyco/Mission2/IMG_1482.JPG,20%,本体の構造)
本体の前方にセンサーをつけました。
#ref(2016a/Member/oyco/Mission2/IMG_1483.JPG,20%,センサー)
このセンサーを使ってラインを判断します。
*コース [#hfdddc43]
**図 [#b1090389]
黒い線に沿って進み、交差点で一度止まり、ゴールまで行って止まること。
http://yakushi.shinshu-u.ac.jp/robotics/?plugin=attach&refer=2016a%2FMission2&openfile=2016a-mission2.png
**コース(ルート) [#bee49fd4]
A地点からB地点へ (A地点 → P直進 → Q直進 → Q直進 → R左折 → B地点)
*プログラムの説明 [#hf725160]
**定義 [#p71412d5]
基本的で簡単な定義
 #define BLACK 42  これより小さいと黒
 #define WHITE 50  これより大きいと白
 #define RIGHT_H OnFwd(OUT_A); OnRev(OUT_C);//右旋回
 #define LEFT_H OnFwd(OUT_C); OnRev(OUT_A);//左旋回
 #define RIGHT_L OnFwd(OUT_A); Off(OUT_C);//右回転
 #define LEFT_L OnFwd(OUT_C); Off(OUT_A);//左回転
 #define GO_FORWARD(t) OnFwd(OUT_AC); Wait(t); Off(OUT_AC);//t秒間前進
 #define STEP 1
**サブルーチン [#i68821f0]
ライントレースする定義で交差点で1秒間止まり、音が鳴るサブルーチン。
whileを繰り返し、黒が0.5秒を超えると交差点と判断するようになっている。↓
 sub LINE()
 {
  ClearTimer(0);
  while(FastTimer(0) <= 50) {
    if (SENSOR_2 <= BLACK) {
    if (SENSOR_2 <= BLACK) {  //黒
        RIGHT_H;
    } else if (SENSOR_2 < BLACK){
    } else if (SENSOR_2 < BLACK){  //黒よりのグレー
        RIGHT_L;                // 
      } else if (SENSOR_2 > WHITE) {
      } else if (SENSOR_2 > WHITE) {  //白よりのグレー
        LEFT_H;
        ClearTimer(0);
      } else if (SENSOR_2 >= WHITE) {
      } else if (SENSOR_2 >= WHITE) {  //白
        LEFT_L;               // 
        ClearTimer(0);
       } else {
     OnFwd(OUT_AC);
     ClearTimer(0);
    }
     Wait(STEP);
    }
     Off(OUT_AC);
     ClearTimer(0);
     PlaySound(SOUND_UP);
     Wait(100);
 }
左に1.7秒間曲がるサブルーチン↓
 sub LEFT()
 {
    while(FastTimer(0) < 170) {
       LEFT_L;
   }
    ClearTimer(0);
   }
左に2.5秒間旋回するサブルーチン↓
 sub CROSS_LEFT()
 {
    while(FastTimer(0) < 250) {
        LEFT_H;
    }
    ClearTimer(0);
   }

**メイン [#l068566d]
 task main()
 {
   SetSensor(SENSOR_2, SENSOR_LIGHT);
   GO_FORWARD(140);
   LINE();
   LEFT();
   LINE();
   LEFT();
   LINE();
   LEFT();
   LINE();
   CROSS_LEFT();
   GO_FORWARD(140);
   LINE();
 }
*まとめ [#a6afc464]
**感想&反省点 [#oe0b723f]
2回目の課題だったのにスムーズに課題を進めることができず、プログラムの作成に時間がかかってしまい、プログラムを調節する時間がなく、ゴールへたどり着くことができなかった。
また、1回目の課題とは違い、今回はセンサーを使うため簡単にいけると思ったが、サブルーチンという大きなくくりの定義の理解が遅く、なかなかうまくサブルーチンを使うことができず、1回目とは違う難しさがあった。しかし、とても便利なので、サブルーチンをうまく使うことができたら難なく2回目の課題ができたんじゃないかと思う。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS