[[2008a/A3/課題3左]] #hr CENTER:&size(30){光に向かってブロックを投げるロボット }; #hr CENTER:&size(20){製作者:KEN&TAKAAKI}; RIGHT:[[ロボティクス入門ゼミ]] RIGHT:[[2008a/A3]] 目次 #contents *課題 [#j2cafac0] 1.全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。~ 2.懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。~ 3.懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば50cmの距離まで近づいてブロックを投げる。~ ただし、モータ、光センサ、タッチセンサはそれぞれ2個まで使用可。 *ロボットの紹介 [#hf4feea7] **ロボットの写真 [#ab668d55] ***上 [#tb1524b4] #ref(2008a/A3/課題3左/u.jpg,50%,上) ***前・後 [#y8d792da] #ref(2008a/A3/課題3左/f.jpg,50%,前) ヒントに従って光センサーの間に衝立を設置しました。 #ref(2008a/A3/課題3左/b.jpg,50%,後) ***横 [#s1198bbf] #ref(2008a/A3/課題3左/s.jpg,50%,横) ***ディファレンシャルギア [#k37127ae] #ref(2008a/A3/課題3左/d.jpg,50%,ディファレンシャルギア) 今回はモーターが2つに制限されていたので、ヒントを利用して、このディファレンシャルギアを使いました。~ ディファレンシャルギアは実際に車にも使われているシステムで両輪の回転差を解消するために使われています。~ ***ブロック発射装置 [#tf1519cf] #ref(2008a/A3/課題3左/t.jpg,50%,ブロック発射装置) **ロボット作成において苦労した点・工夫した点 [#ead5e04d] 今回のロボットのポイントはディファレンシャルギアとブロック発射装置です。~ 最初はディファレンシャルギアの仕組みがよく分からず、苦労しました。~ ブロック発射装置もL字に引っ掛けて飛ばすか、タイヤで飛ばすか、いろいろ考えましたが、~ 両方あまりうまくいかず、最後は大きいタイヤを使って何とか飛ばしました。 *プログラムの紹介 [#l69a6aa8] **プログラム① [#t8d88e5e] #define turn_time 382 int max=0; int time=0; sub throw() { OnRev(OUT_C);Wait(200);Off(OUT_C); } void turn_l(int t) { SetPower(OUT_A,3);OnFwd(OUT_A);Wait(t);Off(OUT_A); } void turn_r(int t) { SetPower(OUT_A,3);OnRev(OUT_A);Wait(t);Off(OUT_A); } task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); ClearTimer(0); turn_l(turn_time); while (FastTimer(0)<turn_time) { if(SENSOR_1>max) { max=SENSOR_1; time=FastTimer(0); } } Wait(200); turn_l(time); throw(); } **プログラム② [#q444f0ff] #define THRESHOLD 60 task main () { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); while(true){ if((SENSOR_1 > THRESHOLD) && (SENSOR_3 > THRESHOLD)) { OnFwd(OUT_C); Wait(15); } if((SENSOR_1 < THRESHOLD) && (SENSOR_3 > THRESHOLD)) { OnFwd(OUT_A); Wait(15); } if((SENSOR_1 > THRESHOLD) && (SENSOR_3 < THRESHOLD)) { OnRev(OUT_A); Wait(15); if((SENSOR_1 < THRESHOLD) && (SENSOR_3 < THRESHOLD)) { OnRev(OUT_A); Wait(25); } } } } **プログラム③ [#z725193d] #define THRESHOLD1 65 #define THRESHOLD3 58 sub throw() { OnFwd(OUT_C);Wait(20);Off(OUT_C); } void turn_l(int t) { OnFwd(OUT_A);Wait(t);Off(OUT_A); } void turn_r(int t) { OnRev(OUT_A);Wait(t);Off(OUT_A); } task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); while (true) { if(SENSOR_1<THRESHOLD1 && SENSOR_3<THRESHOLD3) { turn_r(100); turn_l(50); } if(SENSOR_1>THRESHOLD1 && SENSOR_3<THRESHOLD3) { turn_l(50); } if(SENSOR_1<THRESHOLD1 && SENSOR_3>THRESHOLD3) { turn_r(100); } if(SENSOR_1>THRESHOLD1 && SENSOR_3>THRESHOLD3) { throw(); } } } **プログラム作成において苦労した点・工夫した点 [#i0c4791b] 今回のプログラムは簡単かなと思っていましたが、結構苦労しました。 *感想・反省など [#wa25a1e9] 期限1週間はさすがにきつすぎました・・・ *未解決の問題 [#y5ab23f5] ディファレンシャルギアからたまに変な音がします・・・ *コメントをお願いします [#xccfa324] #comment --------------- RIGHT:[[ロボティクス入門ゼミ]] RIGHT:[[2008a/A3]]