ロボット作成 課題2
☆光センサー
光センサーは2つつけました。最初は1つの予定でしたが、2つのほうがちゃんと黒い線の上をトレースするので変更しました。
☆タッチセンサー
タッチセンサーは1つです。
赤い部分を支点にして、テコの原理を利用してタッチします。↓↓
赤い部分がタッチセンサーで
黄色い部分が光センサーです。
できるだけ大きめの車輪を使うことで、光センサーがしっかり感知するようになったし、テコの原理も作りやすくなりました!
とにかくシンプルなものにしました。
カーブの時にうまく光センサーが感知するかどうかが問題でした。
☆光センサー
車体がどんどんズレていって黒い線の上を走らなくなってしまいました。
2つの光センサーの感覚を狭めることで、カーブ後もちゃんとトレースするようになりました。
☆タッチセンサー
最初は牛乳パックに反応しなかったので、センサーを高くしてテコの原理を利用したら反応するようになりました。
改良に改良を重ねました(泣)
最初の車体のときはタッチセンサーが反応しなかったり、光センサーの感覚が広くなってしまったりと問題点が多かったですが、車体の高さを高くしたことにより、それらの問題は解決しましたー!!
#define THRESHOLD 39 //閾値を定義 #define go_straight(t) {OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);} //以下回避時の定義 #define GO_S {OnFwd(OUT_A+OUT_C); Wait(20);} #define go_back {OnRev(OUT_A+OUT_C);Wait(80);Off(OUT_A+OUT_C);} #define turn_left {OnFwd(OUT_C);OnRev(OUT_A);Wait(70);Off(OUT_A+OUT_C);} #define turn_right {OnFwd(OUT_A);OnRev(OUT_C);Wait(55);Off(OUT_A+OUT_C);}
task main() { SetSensor(SENSOR_2,SENSOR_TOUCH); //センサー2をタッチセンサーとする SetSensor(SENSOR_1,SENSOR_LIGHT); //センサ−1を光センサーとする SetSensor(SENSOR_3,SENSOR_LIGHT); //センサ−3を光センサーとする SetPower(OUT_A,1) //A出力を制限 SetPower(OUT_C,1) //C出力を制限 int n; //交差点を定義 n=0; //まだ交差点は通ってないことを定義 while(n<2){ //交差点を4回通る if((SENSOR_1>THRESHOLD)&&( SENSOR_3>THRESHOLD)){ //センサ−1と3が黒線上にないとき OnFwd(OUT_A+OUT_C); //まっすぐ進む } if(SENSOR_1<THRESHOLD) //センサー1が黒線上にきてしまったら OnRev(OUT_A); //左へ行くよう調節 OnFwd(OUT_C); } if(SENSOR_3<THRESHOLD){ //センサー3が黒線上にきてしまったら OnFwd(OUT_A); //右へ行くよう調節 OnRev(OUT_C); } if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD)){ //センサー1と3が黒線上→交差点にきたら Off(OUT_A+OUT_C); //1回止まって待ってから再び進む Wait(150); GO_S n=n+1; //通った交差点の数を足していく } if(SENSOR_2==1){ //タッチセンサーが反応したら go_back //下がって turn_left //左へよけて go_straight(90) // turn_right //右に曲がって go_straight(150) // turn_right //黒線上に復帰 n=n+1; if(n==2) //2回目の交差点にきたら { OnFwd(OUT_A+OUT_C); //少し進んで止まる Wait(50); Off(OUT_A+OUT_C); } } }
作成者:k山
#define THRESHOLD 39 //閾値を定義 #define go_straight(t) {OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);} //以下回避時の定義 #define GO_S(t) {OnFwd(OUT_A+OUT_C); Wait(t);} #define GO_b(t) {OnRev(OUT_A+OUT_C); Wait(t);} #define go_back(t) {OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);} #define turn_left(t){OnFwd(OUT_C);OnRev(OUT_A);Wait(t);Off(OUT_A+OUT_C);} #define TL {OnFwd(OUT_C); OnRev(OUT_A); Wait(15);} #define turn_right(t) {OnFwd(OUT_A);OnRev(OUT_C);Wait(100);Off(OUT_A+OUT_C);} #define TR {OnFwd(OUT_A); OnRev(OUT_C); Wait(30);}
task main() { SetSensor(SENSOR_2,SENSOR_TOUCH); //センサー2をタッチセンサーとする SetSensor(SENSOR_1,SENSOR_LIGHT); //センサ−1を光センサーとする SetSensor(SENSOR_3,SENSOR_LIGHT); //センサ−3を光センサーとする SetPower(OUT_A,1) //A出力を制限 SetPower(OUT_C,1) //C出力を制限 int n; //交差点を定義 n=0; //まだ交差点は通ってないことを定義 while(n<4){ //交差点を4回通る if((SENSOR_1>THRESHOLD)&&( SENSOR_3>THRESHOLD)){ //センサ−1と3が黒線上にないとき OnFwd(OUT_A+OUT_C); //まっすぐ進む } if(SENSOR_1<THRESHOLD) //センサー1が黒線上にきてしまったら OnRev(OUT_A); //左へ行くよう調節 OnFwd(OUT_C); } if(SENSOR_3<THRESHOLD){ //センサー3が黒線上にきてしまったら OnFwd(OUT_A); //右へ行くよう調節 OnRev(OUT_C); } if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD)){ //センサー1と3が黒線上→交差点にきたら Off(OUT_A+OUT_C); //1回止まって待ってから再び進む Wait(150); GO_S(20) n=n+1; //通った交差点の数を足していく } if(n==4){ //4回目の交差点の時 go_back(80) //下がって turn_left(70) //左へよけて go_straight(100) turn_right(80) //右に曲がって進み go_straight(250) turn_right(100) //ライン上に復帰して go_straight(120) turn_left(90) go_back(140) //牛乳パックを元の位置に戻す n=n+1; //通った交差点の数を足していく } }
作成者:竹
ロボットもプログラムもかなり難しくて大変だった。 今回の課題はだいぶ疲れました。
前回の何百倍も難しくなってヒイヒイしてます。
光センサーとタッチセンサーをうまく使っていかないと、
課題がこなせないので本当に大変だと思いました。
コメントお願いします