メンバー紹介 †
課題の内容 †
※2012年度後期・課題 のページを引用 ロボットの説明 †これが私たちのロボットです 機動性、安定性の面からタイヤを三輪にしました アームの機構は至って簡単で、上下に開閉するアームでボールをはさみ運搬するだけです 上図のように、モーターによって前後に運動する棒と連動してアームが開閉します プログラムの説明 †
#define ikichi 43 //域値を指定 #define HIPOWER 7 //モーターの強さを強へ #define LOWPOWER 2 //モーターの強さを弱へ #define set_power_H SetPower(OUT_AC,HIPOWER); //モーターを強へ設定 #define set_power_L SetPower(OUT_AC,LOWPOWER); //モーターを弱へ設定 #define go set_power_H;OnFwd(OUT_AC); //直進 #define t_l_hp set_power_L;OnRev(OUT_A);OnFwd(OUT_C); //左旋回 #define t_l_lp set_power_L;Off(OUT_A);OnFwd(OUT_C); //左折 #define t_r_hp set_power_L;OnFwd(OUT_A);OnRev(OUT_C); //右旋回 #define t_r_lp set_power_L;OnFwd(OUT_A);Off(OUT_C); //右折 #define step 1 //動作の間隔 #define t_1 700 //A-B間のおおよその時間 #define t_2 800 //C-D間のおおよその時間 #define t_3 700 //E-F間のおおよその時間 #define balltime 50 //ボールを挟むためのアームを動かす時間 #define p_1 PlaySound(SOUND_CLICK); //ピッと音を鳴らす #define p_2 PlaySound(SOUND_UP); //ピロピロと音を鳴らす int n=0; //濃い黒の連続感知回数の初期値を0とする task main() { SetSensor(SENSOR_2,SENSOR_LIGHT); //センサーの2番に光センサーを設置 OnFwd(OUT_AC); //ボールを掴むため前進しながらアームを閉じる Wait(40); OnRev(OUT_B); Wait(30); Off(OUT_B); Wait(20); ClearTimer(0); //点Aを基準とするためタイマー0をリセット while(FastTimer(0)<t_1){ //タイマー0が所定の時間までの間繰り返す if (SENSOR_2 < ikichi -5){t_l_hp} //濃い黒なら左旋回 else if (SENSOR_2 < ikichi -2){t_l_lp} //薄い黒なら左折 else if (SENSOR_2 < ikichi +2){go} //灰色なら直進 else if (SENSOR_2 < ikichi +5){t_r_lp} //薄い白なら右折 else {t_r_hp} //その他なら右旋回 Wait(step); //動作に間隔を設ける } do{ //n<3の間以下の動作を繰り返す if (SENSOR_2 < ikichi -5){t_l_hp;n +=1;p_1;} //濃い黒なら左旋回&nに1を加える&音をピっと鳴らす else if (SENSOR_2 < ikichi -2){t_l_lp;int n=0;} //薄い黒なら左折&nに0を代入 else if (SENSOR_2 < ikichi +2){go;int n=0;} //灰色なら直進&nに0を代入 else if (SENSOR_2 < ikichi +5){t_r_lp;int n=0;} //薄い白なら右折&nに0を代入 else {t_r_hp;int n=0;} //その他なら右旋回&nに0を代入 Wait(step); //動作に間隔を設ける }while(n<3); OnFwd(OUT_A); //Xラインを越えるため向きを修正し、前進する Wait(10); OnFwd(OUT_AC); Wait(20); p_2; //ピロピロと音を鳴らす ClearTimer(0); //Xラインを越えた後、タイマー0を初期化 while(FastTimer(0)<t_2){ //タイマー0が所定の時間までの間繰り返す if (SENSOR_2 < ikichi -5){t_l_hp} //濃い黒なら左旋回 else if (SENSOR_2 < ikichi -2){t_l_lp} //薄い黒なら左折 else if (SENSOR_2 < ikichi +2){go} //灰色なら直進 else if (SENSOR_2 < ikichi +5){t_r_lp} //薄い白なら右折 else {t_r_hp} //その他なら右旋回 Wait(step); //動作に間隔を設ける } n==0; //nに0を代入 do{ //n<3の間以下の動作を繰り返す if (SENSOR_2 < ikichi -5){t_l_hp;n +=1;p_1;} //濃い黒なら左旋回&nに1を加える&音をピっと鳴らす else if (SENSOR_2 < ikichi -2){t_l_lp;int n=0;} //薄い黒なら左折&nに0を代入 else if (SENSOR_2 < ikichi +2){go;int n=0;} //灰色なら直進&nに0を代入 else if (SENSOR_2 < ikichi +5){t_r_lp;int n=0;} //薄い白なら右折&nに0を代入 else {t_r_hp;int n=0;} //その他なら右旋回&nに0を代入 Wait(step); //動作に間隔を設ける }while(n<3); p_2; //ピロピロと音を鳴らす ClearTimer(0); //タイマー0を初期化 while(FastTimer(0)<t_3){t_l_hp} //濃い黒なら左旋回 else if (SENSOR_2 < ikichi -2){t_l_lp} //薄い黒なら左折 else if (SENSOR_2 < ikichi +2){go} //灰色なら直進 else if (SENSOR_2 < ikichi +5){t_r_lp} //薄い白なら右折 else {t_r_hp} //その他なら右旋回 Wait(step); //動作に間隔を設ける } n==0; //nに0を代入 do{ //n<5の間以下の動作を繰り返す if (SENSOR_2 < ikichi -5){t_l_hp;n +=1;p_1;} //濃い黒なら左旋回&nに1を加える&音をピっと鳴らす else if (SENSOR_2 < ikichi -2){t_l_lp;int n=0;} //薄い黒なら左折&nに0を代入 else if (SENSOR_2 < ikichi +2){go;int n=0;} //灰色なら直進&nに0を代入 else if (SENSOR_2 < ikichi +5){t_r_lp;int n=0;} //薄い白なら右折&nに0を代入 else {t_r_hp;int n=0;} //その他なら右旋回&nに0を代入 Wait(step); //動作に間隔を設ける }while(n<5); t_r_hp; //ゴールの方向を向かせる Wait(10); p_2; //ピロピロと音を鳴らす Off(OUT_AC); Wait(100); OnRev(OUT_AC); //ボール掴みながら下がる Wait(130); SetPower(OUT_ABC,9); //勢いをつけるため、モーターの力を強くする OnFwd(OUT_ABC); //前進しながらアームをあげる Wait(30); Off(OUT_B); //アームのみ停止 Wait(80); Off(OUT_AC); //すべての動作を停止 } まとめ・感想 †
|