以下の動きをするプログラムを作る。
その1、全方向から懐中電灯の方向を探しだし、懐中電灯に向かってブロックを投げる。(懐中電灯は動かさない。)
その2、懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めるとブロックを投げる。
その3、懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めると50cmの距離まで近づいてブロックを投げる。
今回は、小鉢と小次郎で制作します。
<条件> 使用できるモータは2つまでとする。
↑ロボットの全体像
↑ロボットの全体像その2
↑ギアの部分
↑ギアのストッパーの部分
#define THRESHOLD 65 //閾値 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1を光センサーに定義する SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3を光センサーに定義する SetPower(OUT_A+OUT_C,7); //AとCのモーターの出力を7にする while((SENSOR_1 < THRESHOLD) || (SENSOR_3 < THRESHOLD)) { //センサー1か3が受ける光が閾値より弱ければ実行 OnFwd(OUT_C); //時計回りに回転 Off(OUT_A); } Off(OUT_C); OnFwd(OUT_A); Wait(100); //両方とも受ける光が閾値より強くなったらブロックを投げる Off(OUT_A); }
#define THRESHOLD 65 //閾値 #define RUN_TIME 25 //RUN_TIMEを2、5秒に定義する task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1を光センサーに定義する SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3を光センサーに定義する SetPower(OUT_A+OUT_C,7); //AとCのモーターの出力を7にする ClearTimer(0); //タイマーをクリアする while((SENSOR_1 < THRESHOLD) || (SENSOR_3 < THRESHOLD) || (Timer(0) <= RUN_TIME)) { //光が閾値より弱くタイマーが2、5秒以下ならば実行 if ((SENSOR_1 > THRESHOLD) && (SENSOR_3 > THRESHOLD)) { //センサー1と3が受ける光が閾値より強ければ前進 OnRev(OUT_C); Wait(15); OnFwd(OUT_C); Wait(15); } if ((SENSOR_1 > THRESHOLD) && (SENSOR_3 < THRESHOLD)) { //センサー3が受ける光が暗くなったら左折 ClearTimer(0); //タイマーをクリアする OnRev(OUT_C); Off(OUT_A); } if ((SENSOR_1 < THRESHOLD) && (SENSOR_3 > THRESHOLD)) { //センサ−3が受ける光が暗くなったら右折 ClearTimer(0); //タイマーをクリアする OnFwd(OUT_C); Off(OUT_A); } if ((SENSOR_1 < THRESHOLD) && (SENSOR_3 < THRESHOLD)) { //光がなければ時計回りに回転 ClearTimer(0); //タイマーをクリアする OnFwd(OUT_C); Off(OUT_A); } } Off(OUT_C); OnRev(OUT_A); Wait(50); //前進を2、5秒以上続けたらブロックを投げる OnFwd(OUT_A); Wait(50); Off(OUT_A); }
#define THRESHOLD 65 //閾値 #define RUN_TIME 25 //RUN_TIMEを2、5秒に定義する task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1を光センサーに定義する SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3を光センサーに定義する SetPower(OUT_A+OUT_C,7); //AとCのモーターの出力を7にする ClearTimer(0); //タイマーをクリアする while((SENSOR_1 < THRESHOLD) || (SENSOR_3 < THRESHOLD) || (Timer(0) <= RUN_TIME)) { //光が閾値より弱くタイマーが2、5秒以下ならば実行 if ((SENSOR_1 > THRESHOLD) && (SENSOR_3 > THRESHOLD)) { //センサー1と3が受ける光が閾値より強ければ前進 OnRev(OUT_C); Wait(15); OnFwd(OUT_C); Wait(15); } if ((SENSOR_1 > THRESHOLD) && (SENSOR_3 < THRESHOLD)) { //センサー3が受ける光が暗くなったら左折 ClearTimer(0); //タイマーをクリアする OnRev(OUT_C); Off(OUT_A); } if ((SENSOR_1 < THRESHOLD) && (SENSOR_3 > THRESHOLD)) { //センサ−3が受ける光が暗くなったら右折 ClearTimer(0); //タイマーをクリアする OnFwd(OUT_C); Off(OUT_A); } if ((SENSOR_1 < THRESHOLD) && (SENSOR_3 < THRESHOLD)) { //光がなければ時計回りに回転 ClearTimer(0); //タイマーをクリアする OnFwd(OUT_C); Off(OUT_A); } } Off(OUT_C); if(SENSOR_2>LIGHT65&&SENSOR_3>LIGHT65) { //50センチ手前にきたら止まってホイールを投げる Off(OUT_A); OnFwd(OUT_C); Wait(20); Off(OUT_A+OUT_C); }
ものを投げる際に床にたたきつけるようになってしまい、遠くへ飛ばすためロボットを改良するのに苦労しました。
課題1では相対的に最も明るい方向を探せるプログラムにしてください。I