そこで、今回のロボットは下の写真のようになりました。
二個目のホイールの乗る部分を坂のようにしました。このとき、斜めの部分があるブロ ックを使用しました。
これによって、ジグザグにではありますが、一つのモーターで走ることができます。
ギアの数を調整するとき、どうしても、「ここでかみ合ってほしい」と思うギアが、入らなかったり、大きさが合わなかったりで、すごく難しかったです。
その結果、坂のようにして、重力で落ちてくるというのが、一番簡単でいいのではないかと思い、それを採用しました。しかし、坂の位置などで苦労しました。
#define 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); } } }
#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); }
#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; //ホイールを投げる }
今回の課題はとても難しかった。ライントレースにかんしては、カーブはうまくいかない仕様になっています。またプログラムの方もなかなかうまくいかずに苦労した。
今回も時間がなく、ロボットもプログラムもきちんと完成させることができませんでした。特にプログラムは先生の言ってることがいまいち理解できなくて、全く何がしたいのかわからないまま仕上げてしまった感じがあります。次の課題は最後の課題なので、もう少し頑張りたいと思います。
ロボットの方は詳しく説明していて良かったです。プログラムの方はうまく貼れていないのでなおしてください。そして、ロボットがどういう動きをするかという説明だけではなく、どのような意図でその動きをさせるのかという点まで踏み込んだ説明があるとより良いレポートになると思います。 FI
プログラム部分を修正してください。TAKA