*目次 [#sbce686f] #contents *1,トレースマシンとは? [#caccecd9] トレースマシンとは、光センサーを使うことにより、外部の明るさを感知し、黒線の上を動くことのできるロボット。前回の書道ロボットでは初めからプログラミングされている動作を実行するのに対し、今回のトレースマシンは、外部からの明るさという情報によって動きが変わる。 **光センサー [#u5fe34ab] #ref(./hikari!.jpg,100%,ok) *2,コース [#q6cd109e] #ref(./course.jpg,100%,course) *3,コースの攻略ポイント [#cf23e64f] -カーブ -交差点 -衝突時 -音楽 **カーブ [#m9f320a2] #ref(./cabu.jpg,100%,cabu) OnFwd(OUT_A)//右に曲がる Off(OUT_C) until(SENSOR_1<40)//センサ−1が黒に入るまで OnFwd(OUT_C)//左に曲がる Off(OUT_A) until(SENSOR_3<40)//センサー3が黒に入るまで これで、黒線の上を走行することが可能になった **交差点 [#s811f504] #ref(./cross.jpg,100%,cross) OnFwd(OUT_A+OUT_C); until((SENSOR_1<50)&&(SENSOR_3<50));//両方白のとき直進 OnFwd(OUT_A+OUT_C); until((SENSOR_1>40)&&(SENSOR_3>40));//両方黒のとき直進 **衝突時 [#tb85bcba] タッチセンサーを使うことにより、衝突したときに、数秒間停止するプログラムを組んだ。 #ref(./yokoarm.jpg,75%,arm) #ref(./sannrinn2.JPG,75%,ararm) until(SENSOR_2==1);//衝突したら OnRev(OUT_A+OUT_C);Wait(100);//1秒後進する Off(OUT_A+OUT_C); OnFwd(OUT_A+OUT_C); **音楽 [#rc78e852] ゼルダの伝説 時のオカリナ &size(20){ゼルダの子守唄}; #define Do 523//ド #define Re 587//レ #define Mi 659//ミ #define Fa 698//ファ #define So 784//ソ #define Ra 880//ラ #define Si 988//シ #define KDo 1047//高音ド #define KRe 1175//高音レ #define KMi 1319//高音ミ #define KSo 1568//高音ソ #define KRa 1760//高音ラ task play_music() { while(true) { PlayTone(Si,75) ; Wait(77); PlayTone(KRe,45); Wait(47); PlayTone(Ra,90); Wait(95); PlayTone(So,15); Wait(17); PlayTone(Ra,13); Wait(16); PlayTone(Si,75); Wait(77); PlayTone(KRe,45); Wait(48); PlayTone(Ra,90); Wait(115); PlayTone(Si,70); Wait(77); PlayTone(KRe,45); Wait(47); PlayTone(KRa,65); Wait(67); PlayTone(KSo,39); Wait(42); PlayTone(KMi,55); Wait(57); PlayTone(KDo,23); Wait(25); PlayTone(Si,23); Wait(25); PlayTone(Ra,70); Wait(75); Wait(35); } } task main() { SetSensor(SENSOR_1, SENSOR_TOUCH); start play_music ; OnFwd(OUT_A+OUT_B); until (SENSOR_1 == 1); stop play_music ; Off(OUT_A+OUT_B); } わかる人はわかるデス。最後音が合ってないかもしれないと思う。制作者/杉G 本当はFF7のファンファーレを流したかった。 *4,全体プログラム [#p8026d1b] これまでの、カーブ、交差点、衝突を組み合わせると・・・ task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_TOUCH); while(true) { OnFwd(OUT_A+OUT_C); until((SENSOR_1>40)&&(SENSOR_3>40)); OnFwd(OUT_A); Off(OUT_C); until(SENSOR_1<40); OnFwd(OUT_C); Off(OUT_A); until(SENSOR_3<40); OnFwd(OUT_A+OUT_C); until((SENSOR_1<50)&&(SENSOR_3<50)); until(SENSOR_2==1); OnRev(OUT_A+OUT_C);Wait(100); Off(OUT_A+OUT_C); OnFwd(OUT_A+OUT_C); } } *5,工夫点 [#nb5a6eb5] -光センサーをどの位置につけるか。黒線を挟むように作るか、黒線の上を通るように作るかで悩んだ。結論としては、写真を見て分かるように、黒線を挟むようにつけた。理由としては、黒線の太さは2cmで、はみ出た瞬間に曲がるプログラムを組むため、あまりにも小刻みな動きをしてしまうため。黒線を挟むことで、多少ぎざぎざな動きになるものの、直進とあまり変わらない速度で動くことが可能になった。 -タッチセンサーをどこにつけるか。前か後ろか。それぞれにメリット、デメリットがある。前につけると、重さが前に偏ってしまう。後ろにつけると、読み取る位置が後ろになってしまい、黒線上を動く時に、不思議な感じになってしまう。もしくはタイヤを逆回転させなければならない。これを決めた、最大の理由は、前につけるとカブトムシに見える! -やはり交差点。「両方が黒線に入ったら直進させる」と思いついたときは爽快だった。 *6,感想 [#jd2c2c85] -今回は、前回のプログラミングとは異なり、細かい微調整がいらず面倒なことはあまりなかった(そのぶん、プログラミングにIfやwhileなどがでてくることになったが・・・ )ので、心折れることなく、最後まで完成させることができた。 -感想は乾燥であってはならない。サハラ砂漠ほどの乾燥ならば、それは乾燥をこえて、観想となるだろう。しかし、渋谷のような乾燥であってはならない・・・乾燥・・・乾燥という言葉が生まれるには、潤った場所がなければならない。もしくは、過去に乾燥という状態がなければならない。ということは、おそらく、どこにでも潤っている状態があったはず。そしてすべてが乾燥してしまうはずがない。絶対にどこかにオアシスがあるはずである。乾燥していると一見見える場所にも、そこにオアシスがあるかもしれない。 今日、温泉に行った。外人がいる。シャンプー忘れたみたいだ・・・どうぞ・・・ 僕もオアシスになれるかな・・・ -DIVE INじゃないですか -アドバイス等お願いします! -- [[10L]] &new{2007-06-20 (水) 09:49:58}; -個々のプログラムの解説と、全体のプログラムとの関係がよくわからない?のですが。 -- [[まいける(TA)]] &new{2007-06-21 (木) 10:29:00}; #comment