#contents
*はじめに [#s5e738e0]
今回の課題は光センサーを使ってロボをある地点からある地点へと&br;
移動させるものでした。&br;
僕は下の写真のAからBへ移動するロボを作成しました。
#ref(2016a-mission2.png)

*ロボの説明 [#a4ef3e83]
1枚目の写真がロボの本体で2枚目の写真が光センサーです。&br;
この光センサーから光が照射され跳ね返ってくる光の加減によって&br;
黒い線と白い所を見分けさせています。
#ref(IMG_1111.jpg)
#ref(IMG_1112.jpg)
さらに下の写真がセンサーでここから光を照射していて、また光を感知しています。
#ref(IMG_1113.jpg)
*プログラミングの説明 [#s2c4c487]
***定義について [#d2d1b32d]
 #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);//右回転


***サブルーチンについて [#b3ebd0f6]

 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;                //カウントをリセット
    }  
 }

***プログラム [#x87caf9e]
 
 task main()
 {
  normal2(); //交差点を識別
   GO1; //直進
  normal(); //交差点を識別
   GO; //直進
  normal();//交差点を識別
   GO;//直進
   normal (); //交差点を識別
  TURN; //右に回転
  TURN2; //普通よりも小さく右に回転
  GO; //直進
  normal(); //交差点を識別
   LEFT2; //左に回転
  normal(); //交差点を識別
   GO2; //直進
  Off(OUT_BC);
 }
*交差点の識別 [#j2cb07a6]

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

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