目次 [#l572f633]
各チームで作成したコースを3周するロボットを製作せよ。交差点のうちの一つには500mlの空の紙パックをおき、次のような動作するプログラムを作成せよ。(他のメンバーと重ならないように一人一つのプログラムを作成する)
1. 紙パックを迂回する、あるいは紙パックをもとの位置に戻したのちコースに戻って進む (交差点を通過後、紙パックが元の位置にあればよい) 2. 紙パックを次の交差点まで運んで行き、その交差点に紙パックを残してさらに黒い線に沿って進む
Simple is best!ということでコースはなるべく簡単にしました。
今回は各プログラムにつきパーツをかえてロボットをつくりました。
牛乳パックはこのようにモーターBを使ってロボットの腕で抱きつく(?)みたいにつかみます。
ロボットの本体は、小回りが利くようになるべく小さく、かつ頑丈に創りました。
バンパーは、テコの原理を用いて、なるべく低くしました。 by堀内(課題2の1)
牛乳パックが軽すぎて、タッチセンサーの制度を決めるのが難しかったのですが、そこはあえて牛乳パックには反応しないようにタッチセンサーを鈍くして、他のロボットとぶつかったときだけ反応するようにしました。 by恵(課題2の2)
#define GO OnFwd(OUT_A+OUT_C); //前に進む #define LEFT OnRev(OUT_A); OnFwd(OUT_C); //左に曲がる #define RIGHT OnRev(OUT_C); OnFwd(OUT_A); //右に曲がる #define RUN_TIME 8000 //走る時間 task main () { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_TOUCH); SetSensor(SENSOR_1,SENSOR_LIGHT); //センサーの設定 ClearTimer(0); //タイマーの時間をクリアする int BORDER; BORDER = 0; //交差点の名前と、番号の設定 while (FastTimer(0)<=RUN_TIME) //80秒になるまで { if (SENSOR2=1) //センサー2(タッチセンサー)が反応すれば { Off(OUT_A+OUT_C); Wait(500); //まず止まって5秒待つ } if (BORDER==1||BORDER==5||BORDER==9) //1,5,9番目の交差点を通ると { OnFwd(OUT_B); Wait(80); Off(OUT_B); //モーターBを使い牛乳パックをつかむ } if (BORDER==2||BORDER==6||BORDER==10) //2,6,10番目の交差点を通ると { GO; Wait(100); //若干前へ進み LEFT; Wait(130); //180度回り OnRev(OUT_B); Wait(80); //モーターBで掴んでいた牛乳パックを離す RIGHT; Wait(130); //また180度回りまた黒い線を追う } if ( SENSOR_1 > 40 && SENSOR_3 > 40 ) //センサー1とセンサー3が両方白なら { GO //前へ進む } if ( SENSOR_1 < 40 && SENSOR_3 > 40 ) //センサー1が黒、センサー3が白なら { LEFT //左に曲がる } if ( SENSOR_1 > 40 && SENSOR_3 < 40 ) //センサー1が白、センサー3が黒なら { RIGHT //右に曲がる } if ( SENSOR_1 < 40 && SENSOR_3 < 40 ) //センサー1とセンサー3が両方黒なら { BORDER==BORDER+1; //BORDERに1を足して GO //前へ進む } } Off(OUT_A+OUT_B+OUT_C); //全てのモーターを止めて終了 }
#define turn_left OnFwd(OUT_C);OnRev(OUT_A);Wait(90);Off(OUT_A+OUT_C); //左に回る #define turn_right OnFwd(OUT_A);OnRev(OUT_C);Wait(70);Off(OUT_A+OUT_C); //右に回る task main () { SetSensor ( SENSOR_1, SENSOR_LIGHT ); SetSensor ( SENSOR_2, SENSOR_TOUCH ); SetSensor ( SENSOR_3, SENSOR_LIGHT ); int flag=0; while(flag<12){ //交差点を12回通過する if (( SENSOR_1 > 40) && (SENSOR_3 > 40 )) { OnFwd(OUT_A+OUT_C); } //センサー1とセンサー3が白のとき直進する if(( SENSOR_1 < 40) && (SENSOR_3 > 40 )) { OnRev(OUT_A); OnFwd(OUT_C); } //センサー1が黒でセンサー3が白のとき左に回る if(( SENSOR_1 > 40) && (SENSOR_3 < 40 )) { OnRev(OUT_C); OnFwd(OUT_A); } //センサー1が白でセンサー3が黒のとき右に回る if(( SENSOR_1 < 40) && (SENSOR_3 < 40 )) { OnFwd(OUT_A+OUT_C); flag++; } //両方のセンサーが黒のときflagに1をたして直進する if (SENSOR_2==1) //タッチセンサーに触れた場合 { OnRev(OUT_A+OUT_C);Wait(80);Off(OUT_A+OUT_C); //後ろに下がる turn_right; OnFwd(OUT_A+OUT_C);Wait(120);Off(OUT_A+OUT_C); //前に進む turn_left; OnFwd(OUT_A+OUT_C);Wait(120);Off(OUT_A+OUT_C); //前に進む } } Off(OUT_A+OUT_C); //終了 }
んー、なんか、ロボットの制作するのが意外と時間を食ったし、プログラムも若干、苦労しました;; でも自分的には、けっこうできた方だと思います。by恵
プログラムが自分にとってはとても難しかったです。 by堀内