目次 #contents *課題 [#z1aa8087] **懐中電灯に向かってブロックを投げるロボット [#ofa836d5] 黄色いホイールを2個以上連射するロボットを作成し、以下の動きをするようにプログラムを作成せよ。ただし1は懐中電灯を2個使用し、ロボットの動作中は懐中電灯を動かさないがいろいろな距離や方向にある懐中電灯に対応できるロボットにすること。2は懐中電灯を1個使用し懐中電灯をゆっくり動かす。 +全方向から2つの懐中電灯の方向を探しだし、懐中電灯を狙ってホイールを投げる。可能な限り正確な方向に投げること。 +懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば一定の距離(懐中電灯から30cm以上離れた距離)まで近づいて懐中電灯を狙ってブロックを投げる。 **メンバー [#v02e0a5a] 新谷・みのう *ロボットの製作 [#f760531f] **製作したロボット [#q933a9f1] #ref(./100716robo1.jpg,around,80%,ロボット画像1) #ref(./100716robo2.jpg,around,80%,ロボット画像2) #clear **工夫した点 [#sddb5c66] -なるべく簡単な構造に -モータで輪ゴムを引き延ばす力をどう得るか #ref(./100716robo3.jpg,80%,発射駆動部) **今後改善すべき点 [#b216905a] -1発目の発射後、2発目の発射までに時間がかかる(15秒程度)点について *プログラムの作成(新谷) [#ef4e64e5] **課題 [#kbff71d2] -全方向から2つの懐中電灯の方向を探しだし、懐中電灯を狙ってホイールを投げる。可能な限り正確な方向に投げること。 **作成したプログラム [#hbe95954] int tmax_1; int tmax_2;//明るいところを見つけた時間を代入する変数 int lmax_1; #define TURN_TIME 400//一周する時間 #define SHOT_TIME 1480//撃つために必要な時間 task main(){ tmax_1=0; lmax_1=0; tmax_2=0;//変数に0代入 SetSensor(SENSOR_2,SENSOR_LIGHT);//SENSOR_2はSENSOR_LIGHT OnRev(OUT_C);//回り始める OnFwd(OUT_A); ClearTimer(0);//タイマー動かす while(FastTimer(0)<TURN_TIME){//TURN_TIMEの時間回り続ける if (SENSOR_2>lmax_1){ lmax_1=SENSOR_2;//lmax_1にSENSOR_2の値を代入 tmax_1=FastTimer(0);//tmax_1にFastTimer(0)の値を代入 Wait(10); }else if (lmax_1-15>SENSOR_2 & tmax_2==0){//lmax_1よりSENSOR_2の値が大幅に小さくなるとき tmax_2=tmax_1;//tmax_2にtmax_1の値を代入 lmax_1=0;//lmax_1を0にする } } PlaySound(SOUND_DOWN) ;//音を鳴らす Off(OUT_A+OUT_C);//回り終わる Wait(50); OnRev(OUT_A);//回り始める OnFwd(OUT_C); Wait(400-tmax_1);//二回目に見つけた明るい光源の方向を向く Off(OUT_A+OUT_C);//止まる start shot;//shotのタスクを動かし始める Wait(500);//撃つまで待つ //撃つ PlaySound(SOUND_UP) ; //音を鳴らす OnRev(OUT_A);//回り始める OnFwd(OUT_C); Wait(tmax_1-tmax_2);//初めに見つけた明るい光源の方向を向く Off(OUT_A+OUT_C);//撃つまで待つ //撃つ Wait(50); PlaySound(SOUND_FAST_UP) ;//音を鳴らす Wait(30);//待つ PlaySound(SOUND_LOW_BEEP) ; //音を鳴らす } task shot(){ OnRev(OUT_B);//撃つ動作を始める Wait(SHOT_TIME); Off(OUT_B); Wait(20); OnRev(OUT_B); Wait(SHOT_TIME); Off(OUT_B);//撃つ動作終了 } **工夫した点 [#ma86b126] -撃つための動作を別のタスクに分けて行い時間のロスを少なくした。 -一つの光源を何度も認識させないように一番明るいところを認識してから大幅にセンサーの値が小さくなってから次の光源を認識するようにした **今後改善すべき点 [#d4716cab] -プログラムをもっと綺麗に整理するべきだと思った。 -プログラムを作っている最中にこんがらがってしまう時が何度かあったので、しっかりと今どういうプログラムを作っているのかを考えながら作りたい。 *プログラムの作成(みのう) [#qc38e448] **課題 [#p894b682] -懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば一定の距離(懐中電灯から30cm以上離れた距離)まで近づいて懐中電灯を狙ってブロックを投げる。 **作成したプログラム [#t44c767d] // 定数定義 #define TURN_ONCE 430 #define SHOT_TIME 1480 #define THRESHOLD 45 // 変数宣言 int max_bright; int mb_count; int turn_direction; int shot_count; task main() { SetSensor(SENSOR_1, SENSOR_TOUCH); SetSensor(SENSOR_2, SENSOR_LIGHT); SetSensor(SENSOR_3, SENSOR_TOUCH); // 懐中電灯の方向を探す max_bright = 0; mb_count = 0; ClearTimer(0); while(FastTimer(0)<TURN_ONCE) { OnFwd(OUT_A); OnRev(OUT_C); if(max_bright < SENSOR_2) { max_bright = SENSOR_2; mb_count = FastTimer(0); } } Off(OUT_A+OUT_C); // 懐中電灯の方向を向く ClearTimer(0); while(FastTimer(0)<TURN_ONCE-mb_count) { OnRev(OUT_A); OnFwd(OUT_C); } Off(OUT_A+OUT_C); // 懐中電灯の方向を追いかける SetSensorMode(SENSOR_2, SENSOR_MODE_RAW); turn_direction = 0; max_bright = 0; shot_count = 0; ClearTimer(0); while(shot_count <= 1) { if(turn_direction == 0) { OnFwd(OUT_A); Float(OUT_C); if(max_bright < SENSOR_2) { max_bright = SENSOR_2; } else if(max_bright-THRESHOLD > SENSOR_2) { // 暗くなったら回転方向逆転 max_bright = SENSOR_2; turn_direction = 1; ClearTimer(0); } } else if(turn_direction == 1) { Float(OUT_A); OnFwd(OUT_C); if(max_bright < SENSOR_2) { max_bright = SENSOR_2; } else if(max_bright-THRESHOLD > SENSOR_2) { // 暗くなったら回転方向逆転 max_bright = SENSOR_2; turn_direction = 0; ClearTimer(0); } } if(FastTimer(0) > 500) { // 5秒以上一定以上の明るさの場合は停止し発射 Off(OUT_A+OUT_C); start shot; shot_count++; Wait(500); ClearTimer(0); Wait(10); } } } task shot() { // 発射のタスク OnRev(OUT_B); Wait(SHOT_TIME); Off(OUT_B); } **工夫した点 [#vc92e1c0] -2発目のホイールの発射に時間がかかるため別のタスクにし、メインのタスクに影響が出ないようにした **今後改善すべき点 [#ka3a1c86] -まだ懐中電灯を追いかける部分が怪しいので、ハードウェアの変更も含めて改善する必要がある *反省・感想 [#ue4eeb2e] -プログラムを修正していていくと自分でどこがどうなっているのか分からなくなってしまうことがある。なので、複雑であっても誰が見ても分かるようなプログラムを作りたいと思った。(新谷) -ホイールを2発発射させるという構造を考えるのが意外に難しく時間がかかってしまった。そのため懐中電灯を追いかけるところのハードウェアとソフトウェアについて考える余裕がなかった。(みのう) *コメントをどうぞ [#we62d096] #comment