[[2007a/MemberOnly/進行状況A]] #counter #contents *メンバーの紹介 [#z782c5b1] 今回のメンバーは「ZWEI」「クロ」「カズ」です *今回の課題 [#o20c9c88] 懐中電灯に向かってブロックを投げるロボットを作成する。 1 全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。 2 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進む。 3 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。 ただし、モータ、光センサ、タッチセンサはそれぞれ2個まで使用可。懐中電灯の代わりに携帯のライトなどを利用し てもよい。 **課題をこなすにあたって [#y21e3f0d] 今回の課題のポイント ロボットの構造 モーターを2つしか使ってはいけないので、ロボットの構造を工夫しなければなりません。ブロックを投げる作業 にモーターが1つ必要なので、1つのモーターだけで左右に動くことのできるロボットを作る必要があります。 *ロボットの説明 [#q678207e] **制作の過程 [#p052e2e2] ***ロボットの構想の考案 [#t216186e] 今回の課題では、光センサーは1つよりも2つのほうが、正確さ・速さとも良いと思ったので光センサーは2つ使うことにしました。また、左右にひとつずつ取り付けることを前提に作業を進めました。モーターについては、さきほど述べたように、1つはロボットの前進用に、もう1つはブロックを投げるのに使いました。 ***土台の作成 [#x8fd32f1] 土台はタイヤ3つで支えました。↓ &ref(./SA350025.JPG); モーター、ギアはこのようになっています。↓ &ref(./SA350026.JPG); トップシークレットに載っていたものを参考に作りました。進行方向に対して逆に回転すると、ストッパーがギアの動きを止めます ***ブロックを投げる部分の作成 [#s90b73fa] いつもどこかに、ユニークな構造を作るA8Rです。今回のロボット制作の90%以上の時間をここに使いました。できあがったのがコチラ &ref(./SA350034.JPG); 見てもわからないかもしれませんが、ピッチングマシンのような構造となっております。「ZWEI」の努力の結晶です。以下にその仕組みを説明したいと思います。 &ref(./SA350028.JPG); 1 ギアが回転して &ref(./SA350029.JPG); 2 ブロックが転がり &ref(./SA350030.JPG); 3 タイヤにより加速したブロックが飛び出します!! ***光センサー [#b89ddf74] 光センサーは平行に設置しました。 &ref(./SA350033.JPG); 上の写真ではわかりにくいですが、他の班のアドバイスで、光センサーと光センサーの間に「しきり」を作りました。そのことにより、左右のセンサーがより正確に反応し、精度が格段とあがりました。(もし「しきり」がなければ、ライトの光が強いとき、たとえ光源が右にあろうと、左にあろうと左右の光センサーの値がほとんど同じになってしまいます。それを防ぐのが「しきり」で、センサーに対して反対方向からの、角度のある光を遮ります) ***走行テスト [#dc3c6b94] ブロックを投げる部分がとても大きく、重かったのでロボットが動かないというアクシデントが発生!!今回の課題のモーター数量制限がこんなところに効いてしまいました。モーター1個では馬力が足りないようです。これまでの三時間にもわたる努力が、水の泡になると僕は思いました。 &size(25){しかし「&color(#FF0000){ZWEI};」はあきらめなかった。}; ☆まず、新しい電池に取り替えてみた &size(20){しかし、ロボットは動かず}; ☆次に、モーターの出力をあげるべくギア比の調整、タイヤのサイズの変更を行った。 &size(20){しかし、ロボットは動かず}; ☆上の作戦をあきらめ、次にタイヤのゴムを取り除き、摩擦を減らしてみることにした。~ また、ロボットの重心の位置を前から後ろに変えてみた &size(25){この作戦が見事成功!!ブロックを投げる部分を作り直さずにすみました。}; **完成したロボット [#wdae3797] &ref(./SA350033.JPG); 大変大きなロボットができあがりました。完成当初は動きすらしなかったロボットでしたが、たくさんの改良をくわえ、すべての課題をこなすロボットにしあがりました。 *プログラム [#j39b6f63] **「クロ」のプログラム [#nc7d6e86] 全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げるプログラム task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1を光センサーと定義 SetSensor(SENSOR_2,SENSOR_TOUCH); //センサー2をタッチセンサーと定義 SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3を光センサーと定義 while(true) {Off(OUT_B); while(SENSOR_3>SENSOR_1) //センサ−1がセンサ−3より大きい時 {OnFwd(OUT_A);Wait(10);} //右折 while(SENSOR_3<SENSOR_1) //センサ−3がセンサ−1より大きい時 {OnRev(OUT_A);Wait(10);} //左折 if((SENSOR_1>80)&&(SENSOR_3>80)) //センサ−1もセンサ−3も80より大きい { while(SENSOR_3>SENSOR_1) {OnFwd(OUT_A);Wait(10);} while(SENSOR_3<SENSOR_1) {OnRev(OUT_A);Wait(10);} if((-5<SENSOR_1)&&(SENSOR_1-SENSOR_3<5)) {Off(OUT_B);Off(OUT_A); OnFwd(OUT_B);Wait(200); //投げる Off(OUT_B);}Wait(100000); } } } **「ZWEI」のプログラム [#h8604498] 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進むプログラム #define LI 60 //光の閾値を定義 task main () { SetSensor(SENSOR_1, SENSOR_LIGHT); //センサー1を光センサーと定義 SetSensor(SENSOR_3, SENSOR_LIGHT); //センサー3を光センサーと定義 while (true) { if ((SENSOR_1 < LI) && (SENSOR_3 < LI)) { }else{ //光源が動いたとき while(SENSOR_1 > SENSOR_3) //光源が左にあるとき { OnRev(OUT_A); //左折する } while(SENSOR_3 > SENSOR_1) //光源が右にあるとき { OnFwd(OUT_A); //右折する } } } } **「カズ」のプログラム [#r1a4840d] 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げるプログラム #define LI 73 //光の閾値を定義 int left_p; //変数を用意 int right_p; //変数を用意 int r_l; //変数を用意 int time_p; //変数を用意 #define gosa 5 //誤差の範囲を定義 task main () { SetSensor(SENSOR_1, SENSOR_LIGHT); //センサー1を光センサーと定義 SetSensor(SENSOR_3, SENSOR_LIGHT); //センサー3を光センサーと定義 while (true) { left_p = SENSOR_1; //変数に光センサー1の値を代入 right_p = SENSOR_3; //変数に光センサー3の値を代入 r_l = right_p - left_p; //光センサー1・3の光の強さの差を求める if ((SENSOR_1 > LI) && (SENSOR_3 > LI)) //光源が目の前にあるとき { Off(OUT_A);Off(OUT_B); //モーターABともに停止させる if ((Timer(3) > 20) && (Timer(3) < 60)) //停止してから2秒〜6秒のとき { OnFwd(OUT_B); //モーターを回転させて、ブロックを投げる } }else{ //光源が目の前にはないとき ClearTimer(3); //タイマー3をリセット Off(OUT_B); //モーターBをとめる if (r_l > gosa) //光源が右がわにあるとき { OnFwd(OUT_A); //右折する } if (r_l < -gosa) //光源が左にあるとき { OnRev(OUT_A); //左折する } if ((r_l <= gosa) && (r_l >= -gosa)) //光源が見つけられないとき { if (Timer(1) % 40 < 20) { OnFwd(OUT_A); //2秒間右折 }else{ OnRev(OUT_A); //2秒間左折 } } } } } *制作を終えて [#m690cf3a] **苦労した点 [#m416bf0f] ・3人の予定をあわせてロボットを製作するのが大変だった。 ・ブロックをなげる部分の作成・微調整に苦労した。しかし、これも独特かつ、より遠くに飛ばすことのできるロボットを作成しようとした結果なのでよかったと思う。 **工夫した点 [#d714e4c2] ・モーターの負担を減らすために、ロボット前方に偏っていた重心を移動させた事 ・センサーとセンサーの間に「しきり」を作ったこと **感想 [#u05f5f25] (クロ)今回私は、1のプログラムを担当しました。センサ−1とセンサ−3の光の誤差が少ない時に投げさせるプログラミングを作るのが大変だったが、ifとwhileを上手く使うことができたと思う。この課題で学んだことをロボコンで活かすことが出来たら良いと思う。 (カズ)今回は、ホームページとプログラム3を担当しました。今回のプログラムでは『%』の命令文(割り算の余りを求める命令文)をつかってみました。また1つ新しいことを実践できたのでよかったと思います。3人の予定があう日が少なく、ぎりぎりでの完成でしたが、満足のいくロボット・プログラムが作ることができてよかったです。 *コメントをお願いします [#ffccdcc1] -ギアが回転して、傾斜がきつくなって・・・どういう風に投げる動作を行うのでしょう? なんとなくわかりますが、なんとなくしかわからないので、もう少し詳しい解説があるといいですね。 -- [[まいける(TA)]] &new{2007-07-05 (木) 00:50:49}; #comment