2016a/Member

目次

はじめに

2016a-mission2.png

課題2の内容は、光センサーを用いて
次のいずれかの経路を黒い線にそって動くロボットを作成する
(他のメンバーとは別の経路になるようにする)。
ただし、なるべく速く正確に動くロボットになるように工夫して、
交差点では1秒間停止すること。
・A地点からB地点へ (一人目)
A地点 → P直進 → Q直進 → Q直進 → R左折 → B地点
・B地点からC地点へ (二人目)
B地点 → R右折 → Q直進 → Q直進 →P右折 → S右折 → C地点
・C地点からA地点へ (三人目)
C地点 → S左折 → P左折 → Q直進 → Q直進 → R右折 → P左折 → A地点
(>2016年度前期/課題2)より
今回は、A地点からB地点へロボットをライントレースさせた。

ロボット本体の説明

dc8c76bc-1dc8-4fe5-85a2-f6bf5b867d3f.jpg

ロボットの前方についているのが光センサーである。
ロボットの機体は初期状態のまま使用した。

ba881582-7541-414d-bf2f-1e1f75e8949a.jpg

光センサーは、地表面から1センチほど離した。

プログラミングの説明

定義文

#define BLACK  34
#define WHITE 70
#define LEFT OnFwd(OUT_B,40);OnRev(OUT_C,20);//左旋回
#define RIGHT OnFwd(OUT_C,40);OnRev(OUT_B,20);//右旋回
#define nMAX 210
#define short_break Off(OUT_BC);PlaySound(SOUND_CLICK);Wait(1000)//小休止かつ発音
#define STEP 1
#define go_f OnFwd(OUT_BC,40);Wait(200);Off(OUT_BC);//前進
#define go_f1 OnFwd(OUT_BC,40);Wait(1000);Off(OUT_BC);//前進1
#define go_f2 OnFwd(OUT_BC,40);Wait(1100);//前進2
#define LEFT2 OnFwd(OUT_B,40);OnRev(OUT_C,20);Wait(500); 
#define RIGHT2 OnFwd(OUT_C,40);OnRev(OUT_B,20);Wait(500);
#define TURN OnFwd(OUT_C,40);OnRev(OUT_B,40);Wait(650);Off(OUT_BC);
#define TURN2 OnFwd(OUT_C,40);OnRev(OUT_B,20);Wait(200);Off(OUT_BC);

サブルーチン

sub normal()
{ 
 SetSensorLight(S2);
 int nOnline=0;//黒線のカウント開始
 int k=0;//交差点のカウント開始
while(k==0){//交差点のカウントが0の時
  while(nOnline < nMAX){//カウントがnMAXより少ないとき
  if (SENSOR_2<BLACK) {//黒線上だと右に旋回
    RIGHT;
  nOnline++;//カウントプラス
   } else 
  if (SENSOR_2<WHITE) {//白だと左旋回
    LEFT;
  nOnline=0;//黒線のカウントリセット
  }
  Wait(STEP);
 }
 short_break;
 k++;//交差点のカウントプラス
 nOnline=0;//黒線のカウントリセット
  }
 }
sub normal2()
{ 
 SetSensorLight(S2);
 int nOnline=0;//黒線のカウント開始
 int k=0;//交差点のカウント開始
while(k==0){//交差点のカウントが0の時
  while(nOnline < nMAX){//カウントがnMAX以下の時
  if (SENSOR_2<BLACK) {//黒線上なら左旋回
    LEFT;
  nOnline++;//カウントプラス
   } else 
  if (SENSOR_2<WHITE) {//白なら右旋回
    RIGHT;
 nOnline=0;//カウントリセット
  }
  Wait(STEP);
 }
 short_break;
 k++;//交差点のカウントプラス
 nOnline=0;
  }
}

サブルーチン1は黒線の右側をライントレースし、
サブルーチン2は黒線の左側をライントレースする。

プログラミング

task main()
{
normal2();
 go_f1;
normal();
 go_f;
normal();
 go_f;
 normal ();
TURN;
TURN2;
go_f;
normal();
 LEFT2;
normal();
 go_f2;
Off(OUT_BC);
}

黒のカウントがnMAXの210を超えると交差点と判断する。
交差点と判断されるとそのサブルーチンは終了する。

感想

光センサーを用いた課題2は、
センサーの調子や、ロボット自体の判断が関わってきたので
課題1に比べるとかなり難易度が高かった。
プログラミングに関しても、
課題1に比べ、使用する単語が増え、大変だった。
しかしその分、プログラミングに関する
理解が深まった。


添付ファイル: file2016a-mission2.png 89件 [詳細] fileba881582-7541-414d-bf2f-1e1f75e8949a.jpg 83件 [詳細] filedc8c76bc-1dc8-4fe5-85a2-f6bf5b867d3f.jpg 93件 [詳細]

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