#contents *ロボコンの内容とルール [#y102ff4f] 今回はRCXが2個あるので、ピンポン玉を拾うロボットと、上へ運んでかごに入れるロボットの2台を作った。 *拾うロボット [#vc7734b2] **ロボットの仕組み [#u9d4e979] **プログラム [#s1abc8c8] ***玉を回収するプログラム1(単独競技用) [#g6bc14a9] #define go_straight(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);Wait(50); //t秒間前進 #define turn_left(t) OnRev(OUT_C);OnFwd(OUT_A);Wait(t);Off(OUT_A+OUT_C);Wait(50); //t秒間左に曲がる #define turn_right(t) OnRev(OUT_A);OnFwd(OUT_C);Wait(t);Off(OUT_A+OUT_C);Wait(50); //t秒間右に曲がる #define back(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);Wait(50); //秒間後退 task main() { SetSensor(SENSOR_1,SENSOR_TOUCH); //センサー1をタッチセンサと認識 SetSensor(SENSOR_3,SENSOR_TOUCH); //センサー2をタッチセンサと認識 OnFwd(OUT_B); //玉を回収するモーターを始動 turn_right(54) //玉がある位置まで移動する go_straight(90) turn_left(55) go_straight(170) turn_left(55) go_straight(90) //玉に向かって直進し、回収する back(200) go_straight(25) //相方に玉を渡しに戻る turn_left(55) go_straight(115) turn_right(54) go_straight(60) //相方の前にセッティング OnRev(OUT_B); //玉を吐き出す Wait(500); Off(OUT_B); back(60) //後退 turn_left(55) //スタート地点に戻る go_straight(75) turn_right(54) go_straight(130) Off(OUT_A+OUT_C+OUT_B); //終わり } ***玉を回収するプログラム2(リーグ戦用) [#c0935070] #define go_straight(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);Wait(50); //t秒間前進 #define turn_left(t) OnRev(OUT_C);OnFwd(OUT_A);Wait(t);Off(OUT_A+OUT_C);Wait(50); //t秒間左に曲がる #define turn_right(t) OnRev(OUT_A);OnFwd(OUT_C);Wait(t);Off(OUT_A+OUT_C);Wait(50); //t秒間右に曲がる #define back(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);Wait(50); //秒間後退 task main() { SetSensor(SENSOR_1,SENSOR_TOUCH); //センサー1をタッチセンサと認識 SetSensor(SENSOR_3,SENSOR_TOUCH); //センサー2をタッチセンサと認識 OnFwd(OUT_B); //玉を回収するモーターを始動 turn_right(54) //玉がある位置まで移動する go_straight(90) turn_left(55) go_straight(170) turn_left(55) go_straight(90) //玉に向かって直進し、回収する back(200) go_straight(25) //相方に玉を渡しに戻る turn_left(55) go_straight(115) turn_right(54) go_straight(60) //相方の前にセッティング OnRev(OUT_B); //玉を吐き出す Wait(500); Off(OUT_B); OnFwd(OUT_B); back(85) //後ろに下がって相手の陣地行く turn_right(62) go_straight(200) repeat(8){ ClearTimer(0); //タイマーをセット while(Timer(0) <= 200){ //20秒間whileの中を実行 if((SENSOR_1 == 0) && (SENSOR_3 == 0)){ //センサが2つとも反応しない場合 OnFwd(OUT_A+OUT_C); //前進 } if(SENSOR_1 == 1){ //センサ1だけ反応した場合 back(30) //少し後退して右に曲がる turn_right(55) } if(SENSOR_3 == 1){ //センサ3だけ反応した場合 back(30) //少し後退して右に曲がる turn_left(40) } if((SENSOR_1 == 1) && (SENSOR_3 == 1)){ //センサが2つ戸も反応した場合 back(50) turn_right(50) //後退して右に曲がる } } OnRev(OUT_B); //玉を吐き出す Wait(300); Off(OUT_B); Wait(100); OnFwd(OUT_B); //whileの中はここまで } Off(OUT_A+OUT_C+OUT_B); //終わり } *上げるロボット [#s3a54112] **ロボットの仕組み [#ne298fd4] 下の写真ははじめに作った装置です。 #ref(./ピンポン階段装置.gif,100%,) 階段状レールの下からピンポン玉を押し上げて、3段の階段を上がります。 この装置の問題点は上方向への移動距離が短いことです。 そのため、別の装置と組み合わせることにしました。 新しく作ったのが下の写真の装置です。 #ref(,100%,) ホイールとチューブを組み合わせた先端はピンポン玉がぴったりはまります。 これをギザギザな歯のあるブロックを使って上下に動かします。 #ref(./CA3C0308.JPG,100%,) **プログラム [#of201d55] task main(){ SetSensor(SENSOR_1,SENSOR_TOUCH); //センサー1(タッチセンサー)を定義 SetPower(OUT_A,4); //左のモーターの力を4に定義する SetPower(OUT_C,3); //右のモーターの力を3に定義する OnFwd(OUT_A+OUT_C); Wait(180); //手前のカゴの位置に進む OnRev(OUT_A);Wait(350); OnFwd(OUT_A+OUT_C); Wait(500); Off(OUT_A+OUT_C); repeat(5){ //5回繰り返す OnFwd(OUT_B);Wait(60); //一旦UFOを持ち上げて停止 Off(OUT_B);Wait(30); OnRev(OUT_B);Wait(60); //UFOを下げる while(SENSOR_1 != 1){ //センサーが反応するまで持ち上げる OnFwd(OUT_B);Wait(30); //UFOを上まで持ち上げてゴールする Off(OUT_B);//Wait(10); } Off(OUT_B);Wait(100); OnRev(OUT_B);Wait(300); //下までUFOを下げる Off(OUT_B);Wait(50); } OnRev(OUT_C);Wait(350); //元の位置に戻る }