2.次に改良を加えたのが前輪である。
3.投げる機構
4.ディファレンシャルギアのベースと本体、投げる機構を組み合わせるて一応のロボが完成したかに思えた。しかし、投げたときの反動が大きかったことと、本体を縦につけたため固定性がなかったことが原因で写真のように本体がのけぞってしまう。
5.見た目の工夫もしてみようと思った。
課題1 全方向から懐中電灯の方向を探し出し、懐中電灯にブロックを投げる。担当:りさちゃん
#define THRESHOLD 60 //閾値 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //SENSOR1が光センサであると宣言 SetSensor(SENSOR_3,SENSOR_LIGHT); //SENSOR2が光センサであると宣言 while(true){ if((SENSOR_1>THRESHOLD)||(SENSOR_3>THRESHOLD)){ //懐中電灯を見つけたら Off(OUT_A); ブロックを投げる OnFwd(OUT_B); Wait(50); Off(OUT_B); }else{ //旋回する OnFwd(OUT_A); Wait(80); } } }
課題2 光を見つけて愚直にGO//製作杉G
sub turn_left () { OnFwd(OUT_B); Wait(10); } sub turn_right() { OnRev(OUT_B); Wait(10); } #define THRESHORD 40 sub go()//まっすぐ動かすためかなり無理矢理 {よってギザギザ走行 repeat(50){ OnFwd(OUT_B); Wait(3); OnRev(OUT_B); Wait(3); OnFwd(OUT_B); Wait(3); OnRev(OUT_B); Wait(3); } } task main() { SetSensor(SENSOR_1,SENSOR_LIGHT);//センサー1は光センサーであると宣言 SetSensor(SENSOR_3,SENSOR_LIGHT);//センサ−3は以下略 while(true) { if(SENSOR_1>=THRESHORD&&SENSOR_3>=THRESHORD&&SENSOR_1>SENSOR_3) { turn_left() ; }//センサー1と3が基準以上で、1の方が3より強いとき if(SENSOR_1>=THRESHORD&&SENSOR_3>=THRESHORD&&SENSOR_1<SENSOR_3){ turn_right() ; }//センサー1と3が基準以上で、3の方が1より強いとき if(SENSOR_1<THRESHORD&&SENSOR_3>THRESHORD){ turn_right() ; }//センサー1が基準より下で、3が基準より上のとき if(SENSOR_1>THRESHORD&&SENSOR_3<THRESHORD){ turn_left (); }//センサー1が基準より上、3が基準より下のとき if(SENSOR_1<=THRESHORD&&SENSOR_3<=THRESHORD&&SENSOR_1<SENSOR_3){ turn_right() ; }//センサー1と3が基準以下で、3の方が1より強いとき if(SENSOR_1<=THRESHORD&&SENSOR_3<=THRESHORD&&SENSOR_1>SENSOR_3){ turn_left() ; }//センサー1と3が基準以下で、1の方が3より強いとき if(SENSOR_1>=60&&SENSOR_3>=60){ Off(OUT_B); }//センサー1と3が強く光を感知したとき if(SENSOR_1=SENSOR_2){ go(); }//とりあえず、両方のセンサーが同じ強さを感知したとき }懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。/ 担当・もっちゃん
#define AROUND_TIME 225 //一周にかかる時間 int light_max=0; int time_max=0; int i; //forループのためにおいた変数 int i_min=0,i_max=5 //iの最小値と最大値を指定 sub throw() //投げる機構を動かすサブルーチン { OnFwd(OUT_A);Wait(045);Off(OUT_A); } task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサ−1が光センサーであると宣言 SetSensor(SENSOR_3,SENSOR_LIGHT); //センサ−3が光センサーであると宣言 ClearTimer(0); //タイマーを0にする
OnFwd(OUT_B); //左回りに動き出す
while(FastTimer(0)<AROUND_TIME) //タイマーが一周する時間より小さいとき { if(SENSOR_1>light) { light_max=SENSOR_1; //最も強い光を探す time_max=FastTimer(0); //最も強い光を見つけるまでにかかった時間をFastTimer(0)に記憶させる } } OnFwd(OUT_B); //この動作で最も強い光を方向を向いているはずである Wait(time); for(i=I_min; i <i_max;) //iが1から5の間のとき繰り返す { if((SENSOR_1>SENSOR_3)&&(SENSOR_1>50)) //サンサー1がセンサー3より大きく、50以上のとき { OnRev(OUT_B);Wait(030);Off(OUT_B); //右回りに動く } if((SENSOR_1<SENSOR_3)&&(SENSOR_3>50)) //センサー3がサンサー1より大きく、50以上のとき { OnFwd(OUT_B);Wait(030);Off(OUT_B); //左周りに動く } if((SENSOR_1>50)&&(SENSOR_3>50)) //サンサー1、センサー3ともに50以上のとき { OnRev(OUT_B);Wait(020);Off(OUT_B); //左右に動きながら全身する OnFwd(OUT_B);Wait(020);Off(OUT_B); i++; //そのときにiを1増やす } if((SENSOR_1<30)&&(SENSOR_3<30)) //サンサー1、センサー3ともに30以下のとき { while(FastTimer(0)<AROUND_TIME) //再び一周して最も明るいところを探し、 { そのときかかった時間を記憶する if(SENSOR_1>light) { light_max=SENSOR_1; time_max=FastTimer(0); } } Off(OUT_B); //forループが終了したらモーターを止める throw() //投げる }