- 追加された行はこの色です。
- 削除された行はこの色です。
#contents
*ロボコンの内容とルール [#y102ff4f]
今回はRCXが2個あるので、ピンポン玉を拾うロボットと、上へ運んでかごに入れるロボットの2台を作った。
*拾うロボット [#vc7734b2]
**ロボットの仕組み [#u9d4e979]
#ref(./全体2.jpg,100%,)
ロボの全体です。初めはRCXを後ろにつなげていましたがロボットが長くなるので上に置きました。
#ref(./内部.jpg,100%,)
ピンポン玉を取り込む装置です。OnFwdとOnRevを使い、取り込み、吐き出しをします。少しでも高いとホイールに当たらず、少しでも低いと入らなくなったりして調節に時間が一番かかったところです。
#ref(./構造2.jpg,100%,)
RCXを取り除いた内部です。ホイールの位置や数の調節が大変でした。
#ref(./アーム1.jpg,100%,)
リーグ戦用に設置したタッチセンサー付きのアームです。センサーが反応したらターンするようになっています。主に妨害用で作ったのですが、分散したピンポン玉を回収することがありまた上げるロボットの方に持って行けたら面白かったかもしれません・・・
**プログラム [#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(./CA3C0383.JPG,100%,)
ホイールとチューブを組み合わせた先端はピンポン玉がぴったりはまります。
これをギザギザな歯のあるブロックを使って上下に動かします。
#ref(./CA3C0390.JPG,100%,)
しかしこの2つの装置を組み合わせようとしましたが、部品が足りなくなってしまい固定が出来ませんでした。
そこで、最初に作った階段の装置を壊して新しく作った装置だけでカゴに入れるようにしました。
しかし、ここでも新たな問題点が上がりました。ギザギザの部品(赤で囲った部品)が全部で8個しかないということです。カゴの高さは30cmもあるので、それより高くしなければピンポン玉を入れることはできません。
いろいろな部品で穴を埋めようとしましたが、なかなか見つかりませんでした。最終的に良い部品(黄色で囲った部品)が見つかりました。これを取り付けたらギザギザの部品の代わりにすることが出来ました。
#ref(./CA3C0394.png,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); //元の位置に戻る
}