各チームで作成したコースを1周するロボットを製作せよ。交差点以外のコース上に350mlの空の空き缶を2個以上おき、空き缶にぶつかった時には次のような動作するプログラムを作成せよ。(他のメンバーと重ならないように一人一つのプログラムを作成する)
1. 空き缶をコース上に戻して再びコースに戻って進む 2. 空き缶を次の交差点まで運んで行き、その交差点に空き缶を残してさらにコースに沿って進む 3. 奇数回目に空き缶に遭遇したら、その場で反転して進み、偶数回目に遭遇したら、空き缶を押しのけて進む
・馬場将寿
・小笠原和貴
あまり複雑ではありません。
土台に光センサー、タッチセンサー、アームをつけました。 光センサーは土台にのすぐ近くにつけ、安定させました。
タッチセンサーはダブルバンパーにしました。
アームは缶をしっかり持てるようにし、シンプルに仕上げました。
アームが不安定で、すぐに車体からとれてしまった。 またアームが開くときに歯車がすぐに外れてしまった。 車体の重心が前に傾いてしまう。
アームがとれないように取れないようにブロックで固め、補強をした。 歯車の数を増やし、回転数を落とし、かみ合うようにした。 車輪を車体の後ろに取り付けることで重心の位置を後ろにし、傾かないようにした。 車輪を"重り”として使用したのがポイントです。
以上よりロボットが完成した。
少し大きな車体になってしまったが、しっかり缶を掴める頑丈なロボットに仕上げることができた。
2. 空き缶を次の交差点まで運んで行き、その交差点に空き缶を残してさらにコースに沿って進む
#define THRESHOLD 45 //光センサーの明るさを定義 int t; //変数tを定義 int i; // 変数iを定義
task main() {
t=0; i=0; SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1と3を光センサー、 SetSensor(SENSOR_2,SENSOR_TOUCH); //センサー2をタッチセンサーにする。 SetSensor(SENSOR_3,SENSOR_LIGHT); while(t<6){ //一周したら止まるように設定
if(SENSOR_2==1){ //タッチセンサーに反応したとき if(SENSOR_1>THRESHOLD){ //センサー1が白 if(SENSOR_3>THRESHOLD){ //センサー3が白 OnFwd(OUT_B) Wait(20); //アームを閉じる OnFwd(OUT_A+OUT_C); //直進する } else{ //センサー3が黒 OnFwd(OUT_A);OnRev(OUT_C); //左折する } if(SENSOR_1<THRESHOLD){ //センサー1が黒 if(SENSOR_3>THRESHOLD){ //センサー3が白 OnFwd(OUT_C);OnRev(OUT_A); //右折する } else{ //センサー3が黒 t++; //交差点と認識しt=t+1 if(i=0){ //i=0のとき OnFwd(OUT_A+OUT_C); Wait(30); //線を越える i++; //i=i+1 } else{ //iが0でないとき 次の動作で缶を置く OnFwd(OUT_A+OUT_C); //直進する Wait(110); OnFwd(OUT_A);OnRev(OUT_C); //反転する Wait(130); OnRev(OUT_B); //アームを開く Wait(20); OnRev(OUT_A+OUT_C); //後退する Wait(130); OnFwd(OUT_A);OnRev(OUT_C); //反転する Wait(130); i=0; //i=0を代入 }}}}
else{ //タッチセンサーが反応しないとき if(SENSOR_1>THRESHOLD){ //センサー1が白 if(SENSOR_3>THRESHOLD){ //センサー3が白 OnFwd(OUT_A+OUT_C); //直進する } else{ //センサー3が黒 OnFwd(OUT_A);OnRev(OUT_C); //左折 } if(SENSOR_1<THRESHOLD){ //センサー1が黒 if(SENSOR_3>THRESHOLD){ //センサー3が白 OnFwd(OUT_C);OnRev(OUT_A); //右折 } else{ //センサー1,3が黒 t++; OnFwd(OUT_A+OUT_C); //直進する Wait(50); }}}} Off(OUT_A+OUT_C); //停止する
}
1. 空き缶をコース上に戻して再びコースに戻って進む define white 45 //光センサーの値
task main(){
SetSensor(SENSOR_1, SENSOR_LIGHT); //光センサー左 SetSensor(SENSOR_3, SENSOR_LIGHT); //光センサー右 int t = 0; //3回目に缶に当たった時に停止する
while(t<=2){
if(SENSOR_2==1){ //タッチセンサーが反応 t=t+1; OnRev(OUT_A+OUT_C); Wait(40); Off(OUT_A+OUT_C); OnFwd(OUT_B);//缶をつかむ Wait(20); Off(OUT_B); OnRev(OUT_A);OnFwd(OUT_C);//反転 Wait(150);// Off(OUT_A+OUT_C); OnRev(OUT_A+OUT_C); Wait(50); Off(OUT_A+OUT_C); OnRev(OUT_B);//缶をはなす Wait(20); Off(OUT_B); OnFwd(OUT_A+OUT_C); Wait(40); Off(OUT_B); OnRev(OUT_C);OnFwd(OUT_A); Wait(150);//元の位置に戻る Off(OUT_A+OUT_C); OnFwd(OUT_A+OUT_C); Wait(15); Off(OUT_A+OUT_C); }
if((SENSOR_1 < white) && (SENSOR_3 < white)){ //交差点通過 Off(OUT_A+OUT_C);Wait(50); OnRev(OUT_A+OUT_C);Wait(15); } else if((SENSOR_1 > white) && (SENSOR_3 > white)){ //黒の線上を通過 OnRev(OUT_A+OUT_C); } else if(SENSOR_1 < white){ //左への修正 OnRev(OUT_C); OnFwd(OUT_A); } else if(SENSOR_3 < white){ //右への修正 OnRev(OUT_A); OnFwd(OUT_C); } } Off(OUT_A+OUT_C); } //缶に三回当たると停止
最初はコースさえ回れず、タッチセンサーも反応しなかった。 だがちょっとした修正で改善できる点がたくさんあったので、プログラムの理解にもつながった。カーブを曲がるときにガタガタしてしまうので、スムーズに回れるようにしたい。
とにかく前回よりロボット作成とプログラムが格段と難しくなっていたので 、かなり苦労した。 あまりよく缶がはさめなかったので、もっと確実に挟める工夫が必要だと思った。 プログラムをもっと簡略にできると思った。 音楽を流すなどの新たな工夫が欲しかった。
今回は二人でも、チームでも集まれたのは良かった。 とにかく難しかったけど、やりがいがあったし、楽しかった。