#contents
* 課題2 黒い線に沿って動くロボット [#o7171aef]
作成したコースに沿って動くロボットを作成。~
‖さと正確さを追求すること~
交差点で優先側を走っていない場合には、一時停止すること~
A以にあるもう一台のロボットに接触した場合には停止して相手のロボットが行き過ぎる、あるいは距離が離れるのを待つこと~
ぅ魁璽垢3周したら自動的に止まること
**ロボット本体 [#qbe7bb47]
ロボット本体は基本のドライブベースを使用しました。
***ロボにセンサーを付ける [#j6fb8df1]
最初に光センサーのみを取り付けました。~
まず、安直に上から固定してみました。
#ref(零号機横から.jpg)
#br
#ref(零号機斜めから.jpg)
しかし、地面から離れているためか、ラインの読み取りがうまく出来ませんでした。~
なので次に本体頭の下部につけました。
#ref(初号機横から.jpg)
これでしっかりとラインを読み取ることが出来るようになりました。
#br
#br
次にもう一台のロボットに当たった場合に反応できるようにタッチセンサーを取り付けました。~
またもや安直に上から取り付けてみました。
#ref(弐号機横から.jpg)
これでは不安定なうえに、タッチセンサーが当たる前にもう一台のタイヤにこちらの本体の下の部分が接触してしまう問題が発生しました。~
そこで光センサーを固定しているシャフトに中心にタッチセンサーも取り付けることにしました。
#ref(参号機目前から.jpg)
#br
#ref(参号機横から.jpg)
#br
#ref(参号機前から2.jpg)

これでもう一台のロボットと接触するときは、最初にタッチセンサーから接触するようになりました。

**プログラム [#ma05552c]

 #define LIGHT 40   //閾値の決定
 int stop_line ;  //停止線の数を数える変数を定義

 task main()
   {
  SetSensor(SENSOR_1,SENSOR_LIGHT);
  SetSensor(SENSOR_2,SENSOR_TOUCH);
  SetSensor(SENSOR_3,SENSOR_LIGHT); //3つのセンサーを定義
  stop_line = 0 ;  //停止線の数を数える変数の値を0にする

 while(stop_line < 10){   //停止線を10回通ったら止まるようにします。
#br
ロボットが直線上にあるとき
 if((SENSOR_1>LIGHT)&&(SENSOR_3>LIGHT))  // 2つの光センサーがともにラインに乗っていない。
     { OnFwd(OUT_A+OUT_C); }
#ref(直進1.jpg)
黒の線はラインを表し、赤の点は光センサーを表しています。
このとき
#ref(直進2.jpg)
のように進みます。
#br
ロボットが曲がり角に来たとき
 if((SENSOR_1>LIGHT)&&(SENSOR_3<LIGHT)) //右のセンサーのみがライン上にある
     { OnFwd(OUT_A);                    //左のタイヤを正回転
       OnRev(OUT_C);}          //右のタイヤを逆回転
    if((SENSOR_1<LIGHT)&&(SENSOR_3>LIGHT)) //左のセンサーのみがライン上にある
     { OnFwd(OUT_C);          //右のタイヤを正回転
       OnRev(OUT_A); }         //左のタイヤを逆回転


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS