懐中電灯の光に向かってブロックを投げるロボット。
モーターは2個使用。片方はロボットの移動、もう片方はブロックを投げるため。
ディファレンシャルギアを使い、モーター1つで左右の動きを実現した。
#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); }
二つ目のプログラムbyニコチュー
#define THRESHOLD 45 task main(){ SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); while((SENSOR_1 < THRESHOLD) || (SENSOR_3 < THRESHOLD)) { //既定の明るさに達するまで OnFwd(OUT_A); //その場で回転 Off(OUT_C); } Off(OUT_A); OnFwd(OUT_C); Wait(10); //ホイールを投げる OnRev(OUT_C); Wait(10); Off(OUT_C); }
#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); }
二つ目のプログラムbyニコチュー
#define THRESHOLD 45 task main(){ SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); while((SENSOR_1 < THRESHOLD) || (SENSOR_3 < THRESHOLD)) { //センサー1とセンサー3がどちらも既定の明るさに達 しないとき if(SENSOR_1 > SENSOR_3) { //左側の方が明るいとき OnFwd(OUT_A); //左に旋回 } else { //右側の方が明るいとき OnRev(OUT_A); //右に旋回 } } Off(OUT_A); OnFwd(OUT_C); Wait(10); //ホイールを投げる OnRev(OUT_C); Wait(10); Off(OUT_C); }
ディファレンシャルギアを使っていると動力があまり伝わらず、普通に動かすのにも苦労した。
光源を探すためのTHRESHOLDを決める作業もなかなか調整が大変だった。
今回はロボットが予想通りに動いてくれなくて大変だった。
特に、ディファレンシャルギアまわりはもう少し改善の余地があったかもしれない。
よろしければ一言お願いします。
ロボットの説明を詳しくしましょう。もう写真がないなら、ディファレンシャル・ギアの説明などをしても良いです。 FI