目次 #contents *課題 黒い線をトレースするプログラム [#y4bccc89] **ロボットの構造の工夫 [#ufd8c21e] このロボットの雛形は、マインドストームの四輪駆動型ロボットです #ref(2009a/A9/課題2右/200906191624000.jpg) ・黒線を太くすることで、センサーの感度を実質的に引き上げました。 ・また、前輪と後輪を入れ替えることで機動力を得ます。 ・両端にある光センサーの幅を狭くすることで、左右にぶれることを少なくしました。 #ref(2009a/A9/課題2右/200906191624001.jpg) #ref(2009a/A9/課題2右/200906191625000.jpg) これが我が『ザ宅配』が行く道です。 **ロボットの基本的なプログラム [#t078adcd] ・光センサーを利用してライントレースのプログラムを書く。 ・タッチセンサーを利用した牛乳パックの回避。牛乳パックを運ぶためのプログラムを作る。 ・完成。 **それぞれのプログラム [#ob93befe] ***これがハるのプログラムです。 [#q46756d2] #define THRESHOLD 40 #define RUN_TIME 1800 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_TOUCH); ClearTimer(0); まず、ちゃんと三周で止まるように、起動時間を三分に設定しました。 while(Timer(0)<=RUN_TIME){ if(SENSOR_1>THRESHOLD){ if(SENSOR_3>THRESHOLD){ OnFwd(OUT_A+OUT_C); } else{ OnFwd(OUT_A); Off(OUT_C); } } else{ if(SENSOR_3>THRESHOLD){ OnFwd(OUT_C); Off(OUT_A); } } ここまでは、ライントレースのプログラム。 if (SENSOR_2 == 1) { OnRev(OUT_A+OUT_C); Wait(50); Off(OUT_A+OUT_C); OnRev(OUT_B); Wait(50); Off(OUT_B); OnFwd(OUT_A+OUT_C); Wait(300); Off(OUT_A+OUT_C); OnFwd(OUT_A); OnRev(OUT_C); Wait(250); Off(OUT_A+OUT_C); OnFwd(OUT_B); Wait(50); Off(OUT_B); OnFwd(OUT_A); OnRev(OUT_C); Wait(250); } } Off(OUT_A+OUT_C); } 最後に、牛乳パックを感知>ホールド>進んでから反転>パージして復帰 このプログラムを付け加え、完了です。 ***これがカヲルのプログラムです。 [#q848c14c] #define THRESHOLD 40 void turn_left() 左に向きを変えることを定義する { OnRev(OUT_A); OnFwd(OUT_C); Wait(100); } void turn_right() 右に向きを変えることを定義する { OnRev(OUT_C); OnFwd(OUT_A); Wait(95); } task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_TOUCH); while(true){ if(SENSOR_1>THRESHOLD){ 左の光センサーが白紙上 if(SENSOR_3>THRESHOLD){ かつ右の光センサーが白線上 OnFwd(OUT_A+OUT_C); 直進する } else{ かつ右の光センサーが黒線上 OnFwd(OUT_A); 右へ曲がる Off(OUT_C); } } else{ 左の光センサーが黒戦上 if(SENSOR_3>THRESHOLD){ かつ右の光センサーが白線上 OnFwd(OUT_C); 左へ曲がる Off(OUT_A); } } if (SENSOR_2 == 1) タッチセンサーが反応する { OnRev(OUT_A+OUT_C); バックする Wait(50); turn_left(); 牛乳パックを避けるため左へ曲がる OnFwd(OUT_A); 直進する Wait(130); turn_right(); 牛乳パックを避けるため右へ曲がる OnFwd(OUT_C); 直進する Wait(280); turn_right(); 牛乳パックを避けるため右へ曲がる OnFwd(OUT_C); 直進する Wait(130); turn_left(); 左へ曲がる OnRev(OUT_A+OUT_C); バックする Wait(90); } } } **感想 [#h9aa55d6] ***ハる [#od7fa6db] 家に持って帰ったのは今回が初めてでした。牛乳パックをホールドするアームの設計は、かなり考えた末に現在のような形になりました。 また、集会を記録するプログラミングは、変数を記録するプログラムがまだわからなかったので断念し、タイマーを利用することになりました。 今回、NQCを自分のパソコンでも使えるようになったので、今後の課題はもっと楽になると思います。 ***カヲル [#yd028789] 今回は本当に苦労しました。工夫したところは上記にもありますが、光センサーの幅を狭くしてどの角度から牛乳パックに当たっても正面で当たるようにしたところです。プログラミングに関しては牛乳パックを避けるにあたって、移動距離を最小限に収めたところです。プログラミングの最後のバックする動作は交差後の黒線がすぐに曲がっているため、バックして黒線上に光センサーがくるようにしたところです。 - ホームページ完成しました。見てください -- [[カヲル]] &new{2009-06-19 (金) 17:38:45}; #comment