[[2007b/MemberOnly/進行状況A]] ----- CENTER:COLOR(crimson):&size(22){課題3:懐中電灯に向かってブロックを投げるロボット}; ----- RIGHT:訪れてくれた人の数 &counter(all); LEFT:目次 #contents *目的 [#c29ec5e6] 一番明るい方向を向き、その方向へブロックを投げるロボットを作る。 *課題 [#k0cadf90] インストの「top secret」を参考にして、ブロック(一番太いホイール)を投げるロボットを作成し、以下の動きをするようにプログラムを作成せよ。~ (重複しないように一人一つ以上のプログラムを作成すること)~ LEFT:1、全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。~ LEFT:2、懐中電灯をゆっくり動かしたとき懐中電灯に向かって進む。~ LEFT:3、懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。~ ただし、モータ、光センサ、タッチセンサはそれぞれ2個まで使用可。懐中電灯の代わりに携帯のライトなどを利用してもよい。~ &ref(./DSC_0020.JPG,17%,ホイール);~ 使用したホイール *ロボット [#x7a07961] &ref(./DSC_0001.JPG,25%,正面); &ref(./DSC_0003.JPG,25%,横);~ 正面 横~ &ref(./DSC_0004.JPG,25%,横); &ref(./DSC_0006.JPG,25%,ななめ);~ 横 ななめ~ **駆動部 [#u2147b5e] &ref(./DSC_0011_3.jpg,25%,全体);~ 後方にキャスターを設置して三輪で動くようにした。~ 動くスピードが速いと一番明るい方向ををうまく発見できないのでゆっくりと動くように49.6×28のタイヤを使用。~ &ref(./DSC_0010.JPG,25%,ギア); &ref(./DSC_0022.JPG,25%,ギア);~ ギアを立体的に収納し、駆動部を小さくした。~ &ref(./DSC_0017_2.jpg,25%,横); &ref(./DSC_0019_2.jpg,25%,横);~ ラチェットが赤矢印の方向にはギアが回転しないようにギアを抑えてくれる。~ よって、黄色矢印方向にのみマシンが進むようになり、一つのモータで左右に動けるようになる。~ ラチェットがひっくりかえらないようにストッパーをつけた。~ 左右でギア比を等しくするために右の写真ではギアを斜めに装着させた。~ **投擲部 [#i159d7db] &ref(./DSC_0009.JPG,20%,横); &ref(./DSC_0008_2.jpg,20%,横); &ref(./2DSC_0007_2.jpg,20%,横);~ 遠心力を利用して飛ばすような機構を採用した。~ 徹底的に軽量化を行い、少ない力でホイールを飛ばすようにした。~ 右の写真の赤い矢印の方向に回転しホイールを投げます。~ 小さいホイールならば1mほど投げられます。~ **光センサー部 [#t4fb00a2] &ref(./DSC_0013.JPG,25%,センサ); &ref(./DSC_0006_2.jpg,25%,全体);~ 前方に二つ並べて設置した。~ センサとセンサに角度をつけると一番明るいところを正確に発見できないと思ったので角度はつけませんでした。 **特徴 [#a3b07262] ギアを斜めに装着している側のギアの噛み合いが少し悪かったのだが、地面に置いて走らせるとRCXの重さで車軸がゆがみ、ギアの噛み合いが異常に悪くなるのため、車軸を支える部品をつけた。このせいで片側が豪華に見える。~ &ref(./DSC_0015.JPG,25%,片側); *ソースプログラム [#h5697724] **一番明るい方向を向き、その方向へブロックを投げるプログラム [#j1c9d25e] #define RUN_TIME 300 task main(){ int i,j,max; SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); SetPower(OUT_C,7); max=0; ClearTimer(1); while(FastTimer(1) < RUN_TIME){ OnFwd(OUT_C); if(SENSOR_1+SENSOR_3 >= max){ ClearTimer(0); max=SENSOR_1+SENSOR_3; } } OnRev(OUT_C); Wait(FastTimer(0)); Off(OUT_C); PlayTone(450,5); OnFwd(OUT_A); Wait(40); Off(OUT_A); } **懐中電灯を動かした方へ進ませるプログラム [#k71f582b] #define THRESHOLD 60 #define RUN_TIME 100 task main(){ int i; SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); ClearTimer(0); while(FastTimer(0) < RUN_TIME){ if(SENSOR_1 >= THRESHOLD && SENSOR_3 >= THRESHOLD){ OnFwd(OUT_C); Wait(50); OnRev(OUT_C); Wait(50); } if(SENSOR_1 < THRESHOLD && SENSOR_3 < THRESHOLD){ OnFwd(OUT_C); } if(SENSOR_1 > THRESHOLD && SENSOR_3 > THRESHOLD){ OnRev(OUT_C); } if(SENSOR_1 < THRESHOLD && SENSOR_3 < THRESHOLD){ Off(OUT_C); } } } *結果 [#l07cb80f] **結果 [#kece8608] **苦労した点 [#f65e0dd9] -まず、どのような方法でブロックを投げるか決めるのに苦労した。最初は何回も回転させてから~ 飛ばす方法を採用したが、飛ぶ方向を制御するのが難しく、あまり遠くに飛ばなかったので不~ 採用となった。~ -ギア比を合わせるためのギアの配置が大変だった。斜めにギアを配置したため、RCXの重さで~ 車軸が曲がり、ギアがかみ合わなくなってしまうことが発覚し、改善方法としてタイヤを小さい物~ に変更し、車軸を支える部品を装着した。 **工夫した点 [#q943f434] -投擲部を軽くして、簡単にホイールを飛ばせる様にした。 -車軸が曲がらないように支えを付けたこと。 ***ブロックの投げ方 [#l0fcefc1] 投擲部を軽くして、簡単にホイールを飛ばせる様にした。大きいホイールの場合は60cm程飛び、小さいホイールでは1mぐらい投げれた。 *今後の課題 [#h4e58359] LEFT:ギアを斜めにつけているところの噛み合いをよくしなければならない。 *課題3を終えて [#f5734004] 吉澤~ ディファレンシャル・ギアを作るのが大変だった。ギア比を合わせたり、ラチェットをうまく設置する場所がなかったり、重さでギアがかみ合わなくなったり、問題がたくさん発生し苦労しました。モーター一つで左右に動かせるこの技術はすごいと思うが、あまり使いたくない。