[[2007b/A1]] ----- CENTER:size(22){課題3:光を追いかけブロックを投げるロボ}; ----- RIGHT:訪れてくれた人の数 &counter(all); LEFT:メニュー #contents 懐中電灯の光を追い、その方向へブロックを投げるロボットの作成。 *課題 [#i156ad79] インストの「top secret」を参考にして、ブロック(一番太いホイール)を投げるロボットを作成し、以下の動きをするようにプログラムを作成せよ。~ (重複しないように一人一つ以上のプログラムを作成すること)~ LEFT:テーマ1、全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。~ LEFT:テーマ2、懐中電灯をゆっくり動かしたとき懐中電灯に向かって進む。~ LEFT:テーマ3、懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。~ ただし、モータ、光センサ、タッチセンサはそれぞれ2個まで使用可。懐中電灯の代わりに携帯のライトなどを利用してもよい。 *ロボ紹介 [#va7c6a65] ** 全体 [#edc93fae] #ref(Image297.jpg) カッコいいでしょ!! 無駄なパーツ??そんなものはありません!!(笑) ** 駆動部分 [#tcf7c561] #ref(Image293.jpg) モーターが2個までしか使えないため、1つをタイヤにもう1つを投擲部に使いました。 そのためタイヤにはディファレンシャルギアを採用!!1つのモーターで左右への転回を実現。 ** ラチェット部分 [#u5a8604b] #ref(Image294.jpg) ギアの回転の逆流を防ぐため、ラチェットを付けました。 ** キャスター部分 [#fa815519] #ref(Image304.jpg) キャスターの奥光センサーの青いブロックが見えますか? このロボは光センサーを下に付けているんです。 ** 投石部分 [#i0fb60b0] #ref(Image302.jpg) 後ろの尻尾に接続されたモーターを動かすと・・・ #ref(Image301.jpg) 発射!! * プログラム [#j0d5c156] ** テーマ1、 [#u94b7269] *a [#tf88a431] task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_TOUCH); SetSensor(SENSOR_3,SENSOR_LIGHT); while(true) {Off(OUT_B); while(SENSOR_3>SENSOR_1) {OnRev(OUT_B);Wait(10); } while(SENSOR_3<SENSOR_1) {OnFwd(OUT_B);Wait(10); } if((SENSOR_1>50)&&(SENSOR_3>50)) {while(SENSOR_3>SENSOR_1) {OnRev(OUT_B);Wait(10); } while(SENSOR_3<SENSOR_1) {OnFwd(OUT_B);Wait(10); } if((-5<SENSOR_1)&&(SENSOR_1-SENSOR_3<5)) {Off(OUT_C);Off(OUT_B); Wait(60); OnRev(OUT_C);Wait(15); OnFwd(OUT_C);Wait(3); Off(OUT_C);}Wait(100); } } } } *b [#k7f286ac] #define THRESHOLD 40 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); while(true) { if(SENSOR_1 > THRESHOLD) { if(SENSOR_3 > THRESHOLD) { Off(OUT_B);Wait(300); if(SENSOR_1+SENSOR_3 > THRESHOLD) { OnRev(OUT_C);Wait(15); OnFwd(OUT_C);Wait(1); Off(OUT_C);Wait(100); } } if(SENSOR_3 < THRESHOLD) { OnFwd(OUT_B);Wait(15); Off(OUT_B); } } if(SENSOR_1 < THRESHOLD) { if(SENSOR_3 > THRESHOLD) { OnRev(OUT_B);Wait(15); Off(OUT_B); } if(SENSOR_3 < THRESHOLD) { OnRev(OUT_B);Wait(15); Off(OUT_B); } } } } **テーマ2、 [#uc9eab7c] *a [#n53fb021] task main(){ SetSensor(SENSOR_1, SENSOR_LIGHT); SetSensor(SENSOR_3, SENSOR_LIGHT); while(true){ if(SENSOR_1<=30&&SENSOR_3<=30){ OnFwd(OUT_A); Wait(100); } else if(-15<=SENSOR_1-SENSOR_3&&SENSOR_1-SENSOR_3<=15){ OnFwd(OUT_A); Wait(50); OnRev(OUT_A); Wait(50); Off(OUT_A); } else if(SENSOR_1-SENSOR_3>15){ OnFwd(OUT_A); Wait(40); Off(OUT_A); } else{ OnRev(OUT_A); Wait(40); Off(OUT_A); } } } *b [#bf917c89] #define THRESHOLD 40 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); while(true) { if(SENSOR_1 > THRESHOLD) { if(SENSOR_3 > THRESHOLD) { Off(OUT_B);Wait(300); if(SENSOR_1+SENSOR_3 > THRESHOLD) { Off(OUT_B);Wait(300); while(SENSOR_1+SENSOR_3 < THRESHOLD) { OnFwd(OUT_B);Wait(15); OnRev(OUT_B);Wait(15); } Off(OUT_B); } } if(SENSOR_3 < THRESHOLD) { OnFwd(OUT_B);Wait(15); Off(OUT_B); } } if(SENSOR_1 < THRESHOLD) { if(SENSOR_3 > THRESHOLD) { OnRev(OUT_B);Wait(15); Off(OUT_B); } if(SENSOR_3 < THRESHOLD) { OnRev(OUT_B);Wait(15); Off(OUT_B); } } } } **テーマ3、 [#a2ef2433] *a [#fab526a7] task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); while(true) { if(SENSOR_1 > 30) { if(SENSOR_3 > 30) {Off(OUT_B);Wait(300); if(SENSOR_1+SENSOR_3 > 30) {Off(OUT_B);Wait(300); while(true) {while(SENSOR_1+SENSOR_3 < 30) {OnFwd(OUT_B);Wait(15); OnRev(OUT_B);Wait(15); } Off(OUT_C);Wait(100); if(SENSOR_1+SENSOR_3 > 30) {OnRev(OUT_C);Wait(15); OnFwd(OUT_C);Wait(1); Off(OUT_C);Wait(100); } } } } if(SENSOR_3 < 30) {OnFwd(OUT_B);Wait(15); Off(OUT_B); } } if(SENSOR_1 < 30) {if(SENSOR_3 > 30) {OnRev(OUT_B);Wait(15); Off(OUT_B); } if(SENSOR_3 < 30) {OnRev(OUT_B);Wait(15); Off(OUT_B); } } } } *b [#w87cba5d] #define THRESHOLD 40 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); while(true) { if(SENSOR_1 > THRESHOLD) { if(SENSOR_3 > THRESHOLD) { Off(OUT_B);Wait(300); if(SENSOR_1+SENSOR_3 > THRESHOLD) { Off(OUT_B);Wait(300); while(true) { while(SENSOR_1+SENSOR_3 < THRESHOLD) { OnFwd(OUT_B);Wait(15); OnRev(OUT_B);Wait(15); } Off(OUT_C);Wait(100); if(SENSOR_1+SENSOR_3 > THRESHOLD) { OnRev(OUT_C);Wait(15); OnFwd(OUT_C);Wait(1); Off(OUT_C);Wait(100); } } } } if(SENSOR_3 < THRESHOLD) { OnFwd(OUT_B);Wait(15); Off(OUT_B); } } if(SENSOR_1 < THRESHOLD) { if(SENSOR_3 > THRESHOLD) { OnRev(OUT_B);Wait(15); Off(OUT_B); } if(SENSOR_3 < THRESHOLD) { OnRev(OUT_B);Wait(15); Off(OUT_B); } } } } *結果 [#a6e500da] **改善した点 [#qae0af54] -キャスターを若干高めに作り重心を後ろにしました。 -最初はロボが一向に進みませんでした。そこで地面との摩擦を減らすためにタイヤを外しホイールのみで動かせたところ見事動き出しました。 - ** [#c6845256] *感想 [#qe14f300] まだプログラムが未完成です。 *コメント [#f2eb1b1f] よろしければコメントをお願いします #comment