課題3
1.全方向から懐中電灯の方向を探しだし、懐中電灯を狙ってブロックを投げる。
2.懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば一定の距離(懐中電灯から30cm以上離れた距離)まで近づいて懐中電灯を狙ってブロックを投げる。
ディファレンシャルギアを用いた場合に、どのようにストッパーをつければ良いか分からずロボの作成には今まで以上に苦労した。片方が前に進む場合にもう片方が後ろに回らないようにストッパーを設置。
小回りがきくように、三輪にした。三輪といっても後輪は一本の軸に二つの黄タイヤをつけてあり、そうすることで、発射台の位置からくるバランスの悪さを解消した。
飛距離をのばすため試行錯誤して、こういう形になった。遠心力でふり投げるタイプではなく、あらかじめ球が高い位置にあり、それを押し出して投げるタイプである。
光センサー同士の距離を近づけすぎると両方共のセンサーが感知してしまいますので、できるだけ距離をあけて設置しました。
プログラム1(全方向から懐中電灯の方向を探しだし、懐中電灯を狙ってブロックを投げる。)
プログラム2(懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば一定の距離(懐中電灯から30cm以上離れた距離)まで近づいて懐中電灯を狙ってブロックを投げる。)
#define turn_time 100 #define A OUT_A #define B OUT_B #define C OUT_C #define nageru OnFwd(C);Wait(5);Off(C) //投げるプログラム int maxlight; //光センサー最大 int maxtime; //光センサーの最大値の時間 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1と光センサー オン SetPower(A,7); ClearTimer(0); //タイマーセット OnFwd(A); //右回りに回転 while(FastTimer(0)<turn_time) //回転時間の間 {if(SENSOR_1>maxlight) //一番明るい時間を記録 {maxlight=SENSOR_1; maxtime=FastTimer(0); //現在の時刻を光センサの最大値を与える時刻に代入 } } Off(A); Wait(10); OnFwd(A); Wait(maxtime); //明るい場所まで回転 Off(A); nageru; //投げる }
#define A OUT_A #define B OUT_B #define C OUT_C #define nageru OnFwd(B);Wait(5);Off(B) //投げるプログラム #define Max 64 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); while(SENSOR_1<=Max || SENSOR_3<=Max) //明るさがある程度大きくなるまで近づく {if(SENSOR_1>SENSOR_3) {OnRev(A);} //左のが明るいので左に回りながら前進 else{OnFwd(A);} //右のが明るいので右に回りながら前進 } Off(A); Wait(150); //光が止まったかどうかを確認する時間 nageru;}
今回のは、プログラミングもロボット造りも難しくとても苦労したがどうにか完成できた。プログラミングは、今までの技術を総動員しなければならず、ロボも小回りが利き発射台完備という形にしなければならず、とても難しかった。工夫した点だが、やはり発射台とタイヤである。発射台は、KOUが苦労して造ってくれたのでコメントはKOUが。タイヤは始め二輪でロボの後ろに抵抗をなくす円盤型のブロックが付いているタイプであった。しかし、しっかりと後ろもタイヤをつけた方がよりスムーズだと考え、三輪となった。
ロボットの足回りを作るのにすごい苦労した。発射装置は始め一般的な、遠心力を使って投げるものを考えていた。しかし、過去のグループのものを色々見ていくと、押し出すタイプもいいなと思い、発射台の角度にこだわりながら(飛距離をのばすため)ブロックをくみたて、この形になった。