- 追加された行はこの色です。
- 削除された行はこの色です。
[[2009a]]
*課題3 懐中電灯に向かってブロックを投げるロボット [#tbc17171]
メンバー/ ピーチクパーチク~
バビロン~
ライス~
#contents
**ロボット [#z5b3b7ea]
***ディファレンシャル・ギア [#ya71b99f]
この特殊なギアは、内部に含まれるギアを使うことで、一つだけのモーターで左右回転・直進を可能にする優れたものである。~
しかし今回は仕様上、直進機能を除き、左右回転だけが可能なロボットを作成した。
***車体 [#fcf519fa]
説明書のトップシークレット、先生に頂いたヒント、先輩の作成したロボットを元に作成。~
モーターからディファレンシャルギアへ力を伝えるためのギアが噛み合わなくて苦労。
モーターからディファレンシャルギアへ力を伝えるためのギアが噛み合わなくて苦労した。~
初期は前輪を装着するつもりだったが、予想外に摩擦力がかかるので、~
タイヤの代わりに支え棒(半球)をふたつ装着。摩擦がほどよく小さくなった。~
タイヤのブレ防止と車軸にかかる力を落とすためにフレームを増強。
***ブロック投射機 [#l9d331ce]
先輩の作ったレールガンのようなものに惹かれ、ノリで作成。~
改造点~
・砲芯の長さを延長~
・速度上昇のためギア比を変更~
・撃鉄までの長さを延長~
これらの改造点は、すべてホイールの投射速度と威力を上げるためのものである。~
強度は弱い。しかしホイールを投げるだけなら十分なのでこれで完成。
***調整 [#a2d2bc09]
光センサの感度を左右でおおきく変えるため、光センサの間、投射機にカベのようなものを作成。
***完成 [#m0ee448d]
まるで戦車砲のようだ。
**プログラム [#n97148c4]
***1・全方向から懐中電灯の方向を探しだし、懐中電灯を狙ってブロックを投げる [#qfda865c]
作成者:バビロン
***2・動く懐中電灯に向かって進み、懐中電灯が止まったらブロックを投げる [#ha3e64b6]
作成者:ライス
***3・7秒間懐中電灯を追尾して、最後にブロックを投げるロボット [#x22f2437]
作成者:ピーチクパーチク~
プログラム概要~
1:一回転して、懐中電灯(光の最大値)の位置を探る~
2:懐中電灯を追う、見失ったらもう一度位置を探る、近づきすぎたら止まる~
3:投げる~
int Tmax = 0; //光の最大値を見つけるまでの時間
int Lmax = 0; //光の最大値
sub serch(){ //光の最大値を見つけるプログラム
ClearTimer(0); //タイマーセット
while ( FastTimer(0) < 300) {
SetPower(OUT_B,4);
OnFwd(OUT_B); //3秒間回転(一回転)
if (SENSOR_3> Tmax){ //回転中常に光の大きさを検索
if (SENSOR_3> Tmax){ //開店中常に光の大きさを検索
Lmax = SENSOR_3;
Tmax = FastTimer(0); //光の最大値と、そのときの時間を検索
Tmax = FastTimer(0); //
}
}
SetPower(OUT_B,7);
OnRev(OUT_B); //逆回転
Wait(300 - Tmax); //回転時間=3秒-光の最大値を見つけた時間
OnRev(OUT_B);
Wait(300 - Tmax);
Off(OUT_B);
}
task main(){
task main(){ //メインタスク
SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_3, SENSOR_LIGHT);
serch();
ClearTimer(1);
while (Timer(1) <= 70){
SetPower(OUT_B,4);
OnFwd(OUT_B);
Wait(3);
SetPower(OUT_B,7);
OnRev(OUT_B);
Wait(3);
if(SENSOR_1 > SENSOR_3){
OnRev(OUT_B);
Wait(20);
} if (SENSOR_3 > SENSOR_1){
OnFwd(OUT_B);
Wait(20);
} if ((SENSOR_3<40)&&(SENSOR_1<40)){
serch();
}if ((SENSOR_3>80)||(SENSOR_1>80)){
Off(OUT_B);
}
}
Off(OUT_B);
SetPower(OUT_A,7);
OnRev(OUT_A);
Wait(70);
Float(OUT_A+OUT_B);
}
2つめのプログラム
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
while(true){
if(SENSOR_<60){
OnFwd(OUT_C);
}
if(SENSOR_1>60){
Off(OUT_C);
OnRev(OUT_A);Wait(18);Off(OUT_A);break;
}
}
}
**あとがき [#vd4ee9a4]
**コメント [#u2122315]
コメントをどうぞ
#comment