はじめに

今回の課題は光センサーを使ってロボをある地点からある地点へと
移動させるものでした。
僕は下の写真のAからBへ移動するロボを作成しました。

2016a-mission2.png

ロボの説明

1枚目の写真がロボの本体で2枚目の写真が光センサーです。
この光センサーから光が照射され跳ね返ってくる光の加減によって
黒い線と白い所を見分けさせています。

IMG_1111.jpg
IMG_1112.jpg

さらに下の写真がセンサーでここから光を照射していて、また光を感知しています。

IMG_1113.jpg

プログラミングの説明

定義について

#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)  //1秒間止まるまた,音を鳴らす
#define STEP 1
#define GO OnFwd(OUT_BC,40);Wait(200);Off(OUT_BC); //直進
#define GO1 OnFwd(OUT_BC,40);Wait(1000);Off(OUT_BC);//直進
#define GO2 OnFwd(OUT_BC,40);Wait(1100);//直進
#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);      //光センサーを2に
  int nOnline=0;
  int k=0;
 while(k==0){
   while(nOnline < nMAX){
   if (SENSOR_2<BLACK) { //センサーが定義した(BLACK 34)値よりも小さければ次の行動
     RIGHT;
   nOnline++;            //カウントを増やす
    } else
   if (SENSOR_2<WHITE) { //センサーが定義した(WHITE 70)値よりも大きければ次の行動
     LEFT;   
    nOnline=0;           //カウントをリセット
   }
   Wait(STEP);
  }
  short_break;           //止まるまた、音を鳴らす
  k++;                   //カウントを増やす
  nOnline=0;             //カウントをリセット
   } 
}
sub normal2()
{
  SetSensorLight(S2);
  int nOnline=0;
  int k=0;
  while(k==0){
   while(nOnline < nMAX){
   if (SENSOR_2<BLACK) {    //センサーが定義した(BLACK 34)値よりも小さければ次の行動
     LEFT;
   nOnline++;               //カウントを増やす
    } else
   if (SENSOR_2<WHITE) {    //センサーが定義した(WHITE 70)値よりも大きければ次の行動  
     RIGHT;   
    nOnline=0;              //カウントをリセット
   }
   Wait(STEP);
  }
  short_break;              //止まるまた、音を鳴らす
  k++;                      //カウントを増やす
  nOnline=0;                //カウントをリセット
   }  
}

プログラム

task main()
{
 normal2(); //交差点を識別
  GO1; //直進
 normal(); //交差点を識別
  GO; //直進
 normal();//交差点を識別
  GO;//直進
  normal (); //交差点を識別
 TURN; //右に回転
 TURN2; //普通よりも小さく右に回転
 GO; //直進
 normal(); //交差点を識別
  LEFT2; //左に回転
 normal(); //交差点を識別
  GO2; //直進
 Off(OUT_BC);
}

交差点の識別

黒い線にのって200回黒を判断したら交差点と認識

まとめ

今回は課題1では使わなかったサブルーチンなども出てきて
難しい点もあったが、なんとか期限に終わらせることもできた。
また、前回指摘された画像の大きさなども、今回は早めに対処して
見やすいページを作ることができたと思う。
しかし、まだまだ改善点があるかもしれないので、今回の課題で学んだことを
次に活かしていきたいと思う。


添付ファイル: fileIMG_1113.jpg 266件 [詳細] fileIMG_1112.jpg 284件 [詳細] fileIMG_1111.jpg 269件 [詳細] fileIMG_0461.jpg 160件 [詳細] file2016a-mission2.png 214件 [詳細] file2016a-mission2.jpg.png 122件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-07-22 (金) 17:20:17