[[2010b]] #contents *メンバー [#je895460] -山崎 -植田 *作成したロボット [#v7a70499] ***今回の課題の特徴 [#ndfb276a] +タイヤを動かすためのモーターが一つしか使えない +ホイールを投げるようなロボットにする そこで、今回のロボットは下の写真のようになりました。 &ref(2010b/A2/課題3右/3d.JPG); &ref(2010b/A2/課題3右/3a.JPG); ***工夫した点 [#bad0b1bc] -全体的にブロックが外れてロボットがばらばらになることがないように、ブロックを連結させる灰色の部品でかなり補強しました。 -モーターに棒を付けて回し、それでホイールを打つようにしました。 -下の写真で赤の丸で囲った部分は、一つ目のホイールを打ち出した後、二つ目のホイールが自動的に落ちるように 二個目のホイールの乗る部分を坂のようにしました。このとき、斜めの部分があるブロ ックを使用しました。 &ref(2010b/A2/課題3右/3c.JPG); 使用したブロック→→→&ref(2010b/A2/課題3右/3f.png); -一つのモーターでタイヤを動かす事ができるようにディファレンシャルギアを使いました。 これによって、ジグザグにではありますが、一つのモーターで走ることができます。 &ref(2010b/A2/課題3右/3e.JPG); &ref(2010b/A2/課題3右/3b.JPG); ***苦労した点 [#e5c3e313] -ディファレンシャルギアを付けるときにギアの数を調整してうまく前に進むロボットを作るのがすごく難しくて、苦労しました。 ギアの数を調整するとき、どうしても、「ここでかみ合ってほしい」と思うギアが、入らなかったり、大きさが合わなかったりで、すごく難しかったです。 -物を投げるロボットなので、どのようにして投げるかで迷いました。結局、打ち出すという形のロボットにしましたが、うまく打ち出してくれなかったりして苦労しました。 -二つのホイールを投げるためには、一つ目のホイールを打った後に、二つ目のホイールが自動的に落ちてこなければいけません。そこで、いろいろ考えました。 その結果、坂のようにして、重力で落ちてくるというのが、一番簡単でいいのではないかと思い、それを採用しました。しかし、坂の位置などで苦労しました。 -パーツをたくさんくっつけていくと、どうしても壊れやすくなってしまいます。その解決にいろいろな部品を使ってみました。 *プログラム [#x96d0775] **ライントレースのプログラム [#v259139e] efine THRETHOLD 40 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); while(true) { if(SENSOR_1>THRETHOLD) { Onfwd(OUT_A); } if(SENSOR_1<THRETHOLD) { OnRev(OUT_A); } } } **山崎のプログラム [#w42ac241] #define time 350 //半周するための時間 task main() { int l_max=0; //光の最大値を定義 int t_max=0; //光が最大値に達するまでの時間 SetSensor(SENSOR_1,SENSOR_LIGHT); ClearTimer(0); while(Timer(0)<=time){ //マシンが半周するまでのプログラム OnRev(OUT_A); if(SENSOR_1>l_max) { l_max=SENSOR_1; t_max=Timer(0); } } while(Timer(0)>time){ //マシンが半周した後 OnFwd(OUT_A); Wait(time-t_max); //光が最大のところに向く Off(OUT_A); OnFwd(OUT_C); //投げる Wait(50); } Off(OUT_C); } **植田のプログラム [#r7e160ef] #define wheel OnFwd(OUT_C);Wait(30);Off(OUT_C); //ホイールを打つ #define turn_r OnFwd(OUT_A); //右折 #define turn_l OnRev(OUT_A); //左折 #define trun_time 400 //光を追う時間 #define STOP Off(OUT_A); //停止 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT);//センサー1は光センサー int light_max=0; //光センサーの最大値 int t_max=0; //センサーが最大値の時刻 ClearTimer(0); //タイマー動作 while ( Timer(0)<trun_time) //タイマーがturn_timeになるまで下の動作を続ける { if(SENSOR_1<light_max) //センサー1が光を感知するまで {turn_r;} //右に回り続ける if(SENSOR_1>light_max) //センサー1がより強い光を感知したら {light_max=SENSOR_1; //最大値を現在の値に t_max=Timer(0); } //現在の値を最大値の時刻に } STOP; Wait(50); OnFwd(OUT_A); //右回りに回転 Wait(t_max); STOP; wheel; //ホイールを投げる } *感想・反省 [#i01a7deb] **山崎 [#a290454b] 今回の課題はとても難しかった。ライントレースにかんしては、カーブはうまくいかない仕様になっています。またプログラムの方もなかなかうまくいかずに苦労した。 **植田 [#f6ab30fc] 今回も時間がなく、ロボットもプログラムもきちんと完成させることができませんでした。特にプログラムは先生の言ってることがいまいち理解できなくて、全く何がしたいのかわからないまま仕上げてしまった感じがあります。次の課題は最後の課題なので、もう少し頑張りたいと思います。 *コメント [#c0024f14] ロボットの方は詳しく説明していて良かったです。プログラムの方はうまく貼れていないのでなおしてください。そして、ロボットがどういう動きをするかという説明だけではなく、どのような意図でその動きをさせるのかという点まで踏み込んだ説明があるとより良いレポートになると思います。 FI