*課題3 [#y5f5f9c7] 懐中電灯の光に向かってブロックを投げるロボット。 **目次 [#u6cd6dd7] #contents *本体の構造 [#ufbfdeb2] モーターは2個使用。片方はロボットの移動、もう片方はブロックを投げるため。 ディファレンシャルギアを使い、モーター1つで左右の動きを実現した。 *プログラム [#xd050249] **1. 全方向から懐中電灯の方向を探しだし、懐中電灯の手前50cmまで進んで懐中電灯を狙ってブロックを投げる。懐中電灯は動かさない。 [#d12c3e86] #define THRESHOLD 35 #define ROUND 50 task main() { SetSensor(SENSOR_2,SENSOR_LIGHT); ClearTimer(0); int n = 0; // while(Timer(0) < ROUND) { OnFwd(OUT_A); //一定時間その場回転 if(SENSOR_2 > n) { n=SENSOR_2; //回転中、最も明るかった時のセンサーの値を記録 } } while(n > SENSOR_2 - 5) { OnFwd(OUT_A); //上で記録した明るさの方向を探す } while(SENSOR_2 > THRESHOLD) { //明かりとの距離が50cm以上なら50cmまで前進 OnRev(OUT_A); Wait(200); OnFwd(OUT_A); Wait(200); OnRev(OUT_A); Wait(200); } Off(OUT_A); //その場で停止 OnRev(OUT_C); //投げる Wait(100); Off(OUT_C); } **2. 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば50cmの距離まで近づいて懐中電灯を狙ってブロックを投げる。 [#q4f2485d] #define THRESHOLD 35 #define ROUND 50 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); while( (SENSOR_1 < THRESHOLD)||(SENSOR_3 < THRESHOLD) ) { /* 2つのセンサーがともに一定以上の明るさを感知するまで繰り返す */ if(SENSOR_1 > SENSOR_2) { OnFwd(OUT_A); } else { OnRev(OUT_A); } /* 明るい方向へ進む */ } Off(OUT_A); //その場で停止 OnRev(OUT_C); //投げる Wait(100); Off(OUT_C); } *工夫した点、苦労した点 [#pabbe8c7] ディファレンシャルギアを使っていると動力があまり伝わらず、普通に動かすのにも苦労した。 光源を探すためのTHRESHOLDを決める作業もなかなか調整が大変だった。 *感想 [#n1ed480d] 今回はロボットが予想通りに動いてくれなくて大変だった。 特に、ディファレンシャルギアまわりはもう少し改善の余地があったかもしれない。 *コメント [#l91b2f9c] よろしければ一言お願いします。 #comment()