*目次 [#edaaf49e] #contents *課題3 懐中電灯に向かってブロックを投げるロボットの製作 [#bf1993b2] 以下の動きをするロボットとプログラムを作成した。 1.全方向から懐中電灯の方向を探し出し、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。~ 2.懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。~ 3.懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば50cmの距離まで近づいてブロックを投げる。~ ※ただし、モータ、光センサ、タッチセンサはそれぞれ2個まで使用可。懐中電灯の代わりに携帯のライトなどを利用してもよい。 **ロボット製作 [#h46cb510] #ref(2008a/A1/課題3左/ギヤ.jpg,70%,ギア); ディフェレンシャル・ギア~ 今回はタイヤを回すためのモータを1つしか使うことができないので、このギアを使った。 #ref(2008a/A1/課題3左/全体3.jpg,70%,全体); 全体を撮った写真~ 前輪が自由に動く三輪タイプにすることで、スムーズな動きをできるようにした。 #ref(2008a/A1/課題3左/横3.jpg,70%,横); 横からの写真~ バランスを考えた形にした。 #ref(2008a/A1/課題3左/前3.jpg,70%,前); 前からの写真~ センサを車体の隙間に入れることでスッキリとした形になった。 #ref(2008a/A1/課題3左/投げ3.jpg,70%,投げ); #ref(2008a/A1/課題3左/投げ2.jpg,70%,投げ); 投げる部分の写真~ ストッパーをつけてホイールが地面につかないようにした。 **プログラム[#je38350b [#vbc8b6d4] 部屋の明るさが25〜35だったため電灯との境の値を40とした。 ***1.全方向から懐中電灯の方向を探し出し、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。 [#y00c984b] #define THRESHOLD 40//光の強さを定義 sub throw()//ホイールを投げる動作 { OnFwd(OUT_C); Wait(100); Off(OUT_C); } task main () { SetSensor(SENSOR_1,SENSOR_LIGHT);//光センサーを1にセット SetSensor(SENSOR_3,SENSOR_LIGHT);//光センサーを3にセット while(true) { while((SENSOR_1 < THRESHOLD) && (SENSOR_3 < THRESHOLD)) //光センサー1、3が共に光を感知しないとき { OnFwd(OUT_A);//右回り Wait(100); Off(OUT_A); } while((SENSOR_1 >= THRESHOLD) && (SENSOR_3 < THRESHOLD))//光センサー1は光を感知するが、3は感知しないとき { OnFwd(OUT_A);//右回り Wait(100); Off(OUT_A); } while((SENSOR_1 < THRESHOLD) && (SENSOR_3 >= THRESHOLD))//光センサー3は光を感知するが、1は感知しないとき { OnRev(OUT_A);//左回り Wait(30); Off(OUT_A); } while((SENSOR_1 >= THRESHOLD) && (SENSOR_3 >= THRESHOLD))//光センサー1、3共に光を感知するとき { throw();//ホイールを投げる } } } ***2.懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。 [#r04b6cd9] 電灯に近づくと光は強くなるので、「#define THRESHOLD2 45」を使い、電灯が止まったということを認識させた。 #define THRESHOLD1 40//光の強さを定義 #define THRESHOLD2 45//光の強さを定義 sub throw()//ホイールを投げる動作 { OnFwd(OUT_C); Wait(100); Off(OUT_C); } task main () { SetSensor(SENSOR_1,SENSOR_LIGHT);//光センサーを1にセット SetSensor(SENSOR_3,SENSOR_LIGHT);//光センサーを3にセット while(true) { while((SENSOR_1 < THRESHOLD1) && (SENSOR_3 < THRESHOLD1)) //光センサー1、3が共に光を感知しないとき { OnFwd(OUT_A);//右回り Wait(100); Off(OUT_A); } while((SENSOR_1 >= THRESHOLD1) && (SENSOR_3 < THRESHOLD1))//光センサー1は光を感知するが、3は感知しないとき { OnFwd(OUT_A);//右回り Wait(100); Off(OUT_A); } while((SENSOR_1 < THRESHOLD1) && (SENSOR_3 >= THRESHOLD1))//光センサー3は光を感知するが、1は感知しないとき { OnRev(OUT_A);//左回り Wait(30); Off(OUT_A); } while((THRESHOLD1 <= SENSOR_1 <= THRESHOLD2) && (THRESHOLD1 <= SENSOR_3 <= THRESHOLD2))//光センサー1、3共に光を感知するとき { OnFwd(OUT_A); Wait(10); OnRev(OUT_A); Wait(10); Off(OUT_A); } while((SENSOR_1 >= THRESHOLD2) && (SENSOR_3 >= THRESHOLD2))//光センサー1、3共に光を強く感知するとき { throw();//ホイールを投げる } } } ***3.懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば50cmの距離まで近づいてブロックを投げる。 [#p5afae6b] 電灯から50cmのところで光の強さを計測すると48だった。したがって、「#define THRESHOLD2 48」を使った。 #define THRESHOLD1 40//光の強さを定義 #define THRESHOLD2 48//光の強さを定義 sub throw()//ホイールを投げる動作 { OnFwd(OUT_C); Wait(100); Off(OUT_C); } task main () { SetSensor(SENSOR_1,SENSOR_LIGHT);//光センサーを1にセット SetSensor(SENSOR_3,SENSOR_LIGHT);//光センサーを3にセット while(true) { while((SENSOR_1 < THRESHOLD1) && (SENSOR_3 < THRESHOLD1)) //光センサー1、3が共に光を感知しないとき { OnFwd(OUT_A);//右回り Wait(100); Off(OUT_A); } while((SENSOR_1 >= THRESHOLD1) && (SENSOR_3 < THRESHOLD1))//光センサー1は光を感知するが、3は感知しないとき { OnFwd(OUT_A);//右回り Wait(100); Off(OUT_A); } while((SENSOR_1 < THRESHOLD1) && (SENSOR_3 >= THRESHOLD1))//光センサー3は光を感知するが、1は感知しないとき { OnRev(OUT_A);//左回り Wait(30); Off(OUT_A); } while((THRESHOLD1 <= SENSOR_1 <= THRESHOLD2) && (THRESHOLD1 <= SENSOR_3 <= THRESHOLD2))//光センサー1、3共に光を感知するとき { OnFwd(OUT_A); Wait(10); OnRev(OUT_A); Wait(10); Off(OUT_A); } while((SENSOR_1 >= THRESHOLD2) && (SENSOR_3 >= THRESHOLD2))//光センサー1、3共に光を48以上感知するとき { throw();//ホイールを投げる } } } **苦労・工夫した点 [#q5c103dd] -モータと本体をつなぐ線の接触が悪くて大変だった。ブロックをうまく使い何とか動いた。 -はじめはディフェレンシャル・ギアを使ったロボットの仕組みを理解するのが難しかったが、何度もロボットやプログラムを改良し使いこなすことができた。 -光センサーを二つ付けたのを活かし光をより精度良く探せるようにした。 -補助輪をつけたことで車体のバランスもとれ、動きがスムーズになった。 **感想 [#y8b23b5c] -今回は時間が少なくてとても大変だった。 -最初モーターを二つしか使えないという条件は難しすぎると思っていたが、色々と工夫をして何とかなったと思う。 -ロボコンでは今まで学んだ事を活かしてロボットを作っていきたい。 **コメントをお願いします [#n08a6ee6] #comment