インストの「top secret」を参考にして、白いホイールを投げるロボットを作成し、以下の動きをするようにプログラムを作成せよ。 (重複しないように一人一つ以上のプログラムを作成すること)
1 全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。
2 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。
3 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば50cmの距離まで近づいてブロックを投げる。
モーター、光センサー、タッチセンサーはそれぞれ2個まで使用可。
モーターが2個までしか使えないので走らせるので1個、ブロックを投げさせるために1個使う、計2個でいくことにした
ディファレンシャルギアを用いることにより左右で違う回転をしてもちゃんと動くようにした。
原理としては左右のタイヤが同一方向に回転するときは外側の濃いグレーのパーツ全体が回り
左右で違う時は内側のギアが回転しずれを調整するようになっている。
光センサーの感覚が狭いと脱線しやすかったので
センサーの感覚を広げることで感知する範囲が広がり、脱線しにくくなった。
アームにブロックを乗せ、上から振り下ろすようにして物を投げるようにした
ここのチームは3人なので1人1つプログラムを担当するようにした
1 全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。 水上担当
2 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。 辻担当
3 懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば50cmの距離まで近づいてブロックを投げる。 吉村担当
#define RUN_TIME 300 //一周する時間 task main() {int i,max; //i,maxを定義 SetSensor(SENSOR_1,SENSOR_LIGHT); //センサ1を光センサーに設定 max=0; //光度の値の変数:一番明るかったところを記憶するための変数 ClearTimer(1); // Timer(1) をリセット while(FastTimer(1) < RUN_TIME){ //FastTimer(1)がRUN_TIME以下の時に繰り返す OnFwd(OUT_A); //進行方向左に回転する if(SENSOR_1 >= max){ // より明るいところを発見した場合 ClearTimer(0); // Timer(0) をリセット max=SENSOR_1; //maxの値は光センサ } //一周回る間に一番明るいところがmaxに記憶され、Timer(0)はその地点からスタートする。 } OnRev(OUT_A); //逆回転する Wait(FastTimer(0)); //一番明るい位置まで回転 Off(OUT_A); //一番明るい位置で停止 OnFwd(OUT_C); //ブロックを投げる Wait(5); Off(OUT_C);} //終了 } }
#define THRESHOLD 65 //光の明るさを定義する task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1を光センサーの定義する SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3を光センサーの定義する SetPower(OUT_A,7); //モーターの出力を7にする while(true){ if(SENSOR_1 > THRESHOLD){ OnFwd(OUT_A); //左に光が強いとき左に回る } if(SENSOR_1 < THRESHOLD){ OnRev(OUT_A); //右に光が強いとき右に回る } if((SENSOR_1 > THRESHOLD) && (SENSOR_3 > THRESHOLD)) { Off(OUT_A); OnFwd(OUT_C); Wait(20); Off(OUT_C); //左右のセンサーが明るさの定義値より強い明るさのとき物を投げる } if((SENSOR_1 < THRESHOLD) && (SENSOR_3 < THRESHOLD)) { OnFwd(OUT_A); } //左右のセンサーに光があたっていないとき回転して光をさがす } }
#define THRESHOLD 42 //光の明るさの規定値1を42に設定 #define THRESHOLD 51 //光の明るさの規定値2を51に設定 task main () { SetSensor(SENSOR_1,SENSOR_LIGHT); //光センサを1にセットする SetSensor(SENSOR_3,SENSOR_LIGHT); //光センサを3にセットする SetPower(OUT_A,7); //モーターの出力を7に設定する while(true) { while((SENSOR_1 < THRESHOLD1) && (SENSOR_3 < THRESHOLD1)) //光センサ1とセンサ3が同時に規定値の光を感知できないとき { OnFwd(OUT_A); Wait(150); //左に向きを変える動作をする。 Off(OUT_A); } while((SENSOR_1 >= THRESHOLD1) && (SENSOR_3 < THRESHOLD1)) //光センサ1は十分な光を感知するが、3はそれに足りないとき { OnFwd(OUT_A); Wait(50); //左に少しだけ向きを変える動作をする 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が同時に規定値1より多くしかし規定値2に満たない光を感知したとき { OnFwd(OUT_A); //右に少し Wait(10); OnRev(OUT_A); //左に少し Wait(10); Off(OUT_A); //蛇行しながら前に進んで止まる動作をする } while((SENSOR_1 >= THRESHOLD2) && (SENSOR_3 >= THRESHOLD2)) //センサ1、センサ2が同時に規定値2以上の光を感知したとき { OnFwd(OUT_C); //止まってる上体でアームを振り下ろしブツを前に投げる。 Wait(5); Off(OUT_C);} //以上 } }
}
・とりあえず走らせてみようとして走らせてはみたものの全然前に走ってくれなかったこと
・みんなの都合が合わなくて集まることがあまりないまま1週間迎えてしまった
・プログラムの意味を理解しながらやればかなりはやくプログラムを組めたと思う
・ディファレンシャルギアで目指せ4輪駆動!・・・やりようによってはできる気がするんですが考えるのが大変ですねー
・やはり1週間は短すぎる気がした。チーム全員で集まることができる日が少ないのをなんとかしたいと思った。 by 辻
・一週間では短い気がした。プログラムがだんだん複雑になってきて作るのが大変だが、ロボコンは何とか成功させたい。 by 水上
・システムが微妙にちがうロボを1からつくって、デリケートなプログラム組んでそれを1週間以内は拷問だったですよ。まあ詰まっててがんばった1週間でした。 by吉村
コメントよろしくお願いします
プログラムについて
1:相対的に光の強さが最大の方向に投げられるとなお良いです。
2:懐中電灯が止まることをどう認識すればよいか考えるといいと思います。
訪問者 本日1 昨日0 合計&counter([total|today|yesterday]);