[[2008a/MemberOnly/進行状況A]] *目次 [#a028092a] #contents *課題2:黒い線に沿ってコースを動くロボット [#bb813bbd] ***目標:コース上の黒い線に沿って動き、コースを三周したら止まるロボットを作る。 [#t72c0bb8] *課題条件[#t57a7c1e] ・交差点で優先側を走っていない場合には、一時停止する。~ ・前方にあるもう一台のロボットに接触した場合には停止して相手のロボットが行き過ぎる、あるいは距離が離れるのを待つ。~ ・コースを3周したら自動的に止まること~ *作成したロボット [#a9a70d70] ロボットの外形~ #ref(2008a/A5/課題2左/HI3B0012.JPG,80%,ロボット)~ 基本構造のロボットの前部に光センサ2個とダブルバンパーをつける。~ 進むパーツはタイヤを用いて、うまくカーブを曲がれる様にした。。 ~ ~ 光センサの部分~ #ref(2008a/A5/課題2左/HI3B0013.JPG,60%,光センサ)~ コースの幅が2.5cmなので、光センサ同士の間隔に注意した。~ 光センサをつける際のパーツを考えた。 ~ ~ *コース紹介 [#u404704c] #ref(2008a/A5/課題2左/HI3B0015.JPG,80%,コース)~ なるべく2.5cmの幅に近づけた。~ カーブのところは少し微調整した。~ 直線部はスピードを早くする、線で混乱させない、ために一部白線にした。~ *作成したプログラム [#re8d5a4a] **プログラム[#h9ad5b27] ライントレースしながら音楽を鳴らすプログラム #define THRESHOLD 40 //閾値を40に設定 #define go OUT_A+OUT_C #define TIMER 2700 #define Re 587 #define Mi 659 #define So 784 #define Ra 880 #define Si 986 #define R 1175 task play_music() //アメージンググレース開始 { while (true) { PlayTone(Re,25); Wait(30); PlayTone(So, 25); Wait(30); PlayTone(So,100); Wait(105); PlayTone(Si,25); Wait(30); PlayTone(So,25); Wait(30); PlayTone(Si,100); Wait(105); PlayTone(Ra, 50); Wait(55); PlayTone(So,100); Wait(105); PlayTone(Mi,50); Wait(55); PlayTone(Re,100); Wait(105); PlayTone(Re,25); Wait(30); PlayTone(So,25); Wait(30); PlayTone(So,100); Wait(105); PlayTone(Si,25); Wait(30); PlayTone(So, 25); Wait(30); PlayTone(Si,100); Wait(105); PlayTone(Ra,25);Wait(30); PlayTone(Si,25); Wait(30); PlayTone(R,200); Wait(205); PlayTone(Si,50); Wait(55); PlayTone(R,100); Wait(105); PlayTone(Si,25); Wait(30); PlayTone(So,25); Wait(30); PlayTone(Si,100); Wait(105); PlayTone(Ra,50); Wait(55); PlayTone(So,100); Wait(105); PlayTone(Mi,50); Wait(55); PlayTone(Re,100); Wait(105); PlayTone(Re,25); Wait(30); PlayTone(So,25); Wait(30); PlayTone(So, 100); Wait(105); PlayTone(Si,25); Wait(30); PlayTone(So,25); Wait(30); PlayTone(Si, 100); Wait(105); PlayTone(Ra,50); Wait(55); PlayTone(So,150); Wait(155); } } task main() { start line_trace; //ライントレーススタート start play_music ; start check_touch; //衝突の感知のスタート } task line_trace() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサ1に光センサを定義 SetSensor(SENSOR_3,SENSOR_LIGHT); //センサ3に光センサを定義 ClearTimer(0); while( Timer(0) <= TIMER ){ if(SENSOR_1 > THRESHOLD){ if(SENSOR_3 > THRESHOLD){ //両方のセンサが白を感知 OnFwd(go); //前進する }else{ //左が白、右が黒を感知 OnFwd(OUT_A);Off(OUT_C); SetPower(OUT_A,5); Off(OUT_A+OUT_C); //左に曲がる } }else{ if(SENSOR_3 > THRESHOLD){ //左が黒、右が白を感知 OnFwd(OUT_C);Off(OUT_A); SetPower(OUT_C,5); Off(OUT_A+OUT_C); //左に曲がる }else{ //両方のセンサが黒を感知 Off(go);Wait(100); //5秒間停止する OnRev(go);Wait (050); //0.5秒間進 OnFwd(go);Wait (120); //1.2秒間前進 } } } } task check_touch() { SetSensor(SENSOR_2,SENSOR_TOUCH); //センサ2にタッチセンサを定義 while(true){ if(SENSOR_2 == 1){ //バンパーが衝撃を感知 stop line_trace; //ライントレース一時停止 Off(go);Wait(300); //3秒間停止する start line_trace; //ライントレース再開 } } *苦労した点・工夫した点 [#xc74e91a] ・光センサをとりつける幅~ ・よく使うプログラムは、定義を用いる。~ ・プログラムの微調整が面倒。~ *未解決な点・今後への課題 [#kb6b2233] ・ギアを速くすると、コースから脱線する。。~ →コースの改善。~ ・交差点で二重に止まる~ →直進する時間を長くする。。~ ・強度が弱い。~ →補強する。特に本体とモーターが着いてる部位を重点的に。~ *課題2を終えての感想 [#x85c3cc5] ・タイマーは試行錯誤して完成させた。満足できるものができたと思う。~ ・とりあえず時間がかかりました。交差点で二重に止まるという問題点が解決できなかったので残念です。 *コメントお願いします。 [#t79251a4] #comment