今回の課題は光センサーを使ってロボをある地点からある地点へと
移動させるものでした。
僕は下の写真のAからBへ移動するロボを作成しました。
1枚目の写真がロボの本体で2枚目の写真が光センサーです。
この光センサーから光が照射され跳ね返ってくる光の加減によって
黒い線と白い所を見分けさせています。
さらに下の写真がセンサーでここから光を照射していて、また光を感知しています。
#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では使わなかったサブルーチンなども出てきて
難しい点もあったが、なんとか期限に終わらせることもできた。
また、前回指摘された画像の大きさなども、今回は早めに対処して
見やすいページを作ることができたと思う。
しかし、まだまだ改善点があるかもしれないので、今回の課題で学んだことを
次に活かしていきたいと思う。