半径1m以内にある懐中電灯を探して、懐中電灯にピンポン玉を当てるロボットを製作した。
基本的には課題2で製作したロボットを流用した。(以下前回レポートへのリンク)
http://yakushi.shinshu-u.ac.jp/robotics/?2015a%2FMember%2Fstudent-R5%2FMission2
しかしながら光源を探知するセンサーを前向きに置き換えた。
#define spinone OnFwd(OUT_A); OnRev(OUT_C); #define spintwo OnFwd(OUT_C); OnRev(OUT_A); sub shoot(){ OnFwd(OUT_A+OUT_C); Wait(100); OnRev(OUT_A+OUT_B+OUT_C); Wait(50); Off(OUT_A+OUT_B+OUT_C); } task main(){ int runtime = 345; int lightmax = 10; int zikan; SetSensor(SENSOR_1, SENSOR_LIGHT); ClearTimer(0); while(Timer(0) < runtime){ spinone; if(SENSOR_1 < lightmax){ zikan = Timer(0); lightmax = SENSOR_1; } } spintwo; Wait(345 - zikan); Off(OUT_A+OUT_C); shoot(); }
#define spinone OnFwd(OUT_A); OnRev(OUT_C); #define spintwo OnFwd(OUT_C); OnRev(OUT_A);
右回り及び左回りのプログラム
sub shoot(){ OnFwd(OUT_A+OUT_C); Wait(100); OnRev(OUT_A+OUT_B+OUT_C); Wait(50); Off(OUT_A+OUT_B+OUT_C); }
シュートのプログラム。前進の勢いでボールを打ち出す仕組み
task main(){ int runtime = 345; int lightmax = 10; int zikan;
まず一周開店するのにかかる時間と基準となる明るさを設定する
SetSensor(SENSOR_1, SENSOR_LIGHT); ClearTimer(0); while(Timer(0) < runtime){ spinone; if(SENSOR_1 < lightmax){ zikan = Timer(0); lightmax = SENSOR_1; } }
一周回転し、最も明るい場所に到達するまでの時間を記録する。
spintwo; Wait(345 - zikan); Off(OUT_A+OUT_C);
逆回転して懐中電灯の方向を向く。
shoot(); }
シュートを行う
タイマーの応用だった事に加え、ロボットを大きく組み替える必要が無かったので比較的早く終わった。