#contents *課題2:黒い線に沿って動くロボット [#h67938aa] 各チームで作成したコースを1周するロボットを製作せよ。交差点以外のコース上に350mlの空の空き缶を2個以上おき、空き缶にぶつかった時には次のような動作するプログラムを作成せよ。(他のメンバーと重ならないように一人一つのプログラムを作成する) 1. 空き缶をコース上に戻して再びコースに戻って進む 2. 空き缶を次の交差点まで運んで行き、その交差点に空き缶を残してさらにコースに沿って進む 3. 奇数回目に空き缶に遭遇したら、その場で反転して進み、偶数回目に遭遇したら、空き缶を押しのけて進む *メンバー [#ed57a102] ・馬場将寿 ・小笠原和貴 *コース [#rd30c042] あまり複雑ではありません。 #ref(./100621_1650~01.jpg,100%,コース); *ロボットの説明 [#t2343907] 土台に光センサー、タッチセンサー、アームをつけました。 光センサーは土台にのすぐ近くにつけ、安定させました。 #ref(./100621_1725~02.jpg,100%,光センサー); タッチセンサーはダブルバンパーにしました。 #ref(./100621_1725~01.jpg,100%,タッチセンサー); アームは缶をしっかり持てるようにし、シンプルに仕上げました。 #ref(./100621_1724~02.jpg,100%,アーム); **問題点 [#w004bf99] アームが不安定で、すぐに車体からとれてしまった。 また、重心が前に傾いてしまう。 **工夫した点 [#uf4f1bc3] 取れないようにアームを補強をして、さらに後ろに重りを付けた。 #ref(./100622_1057~01.jpg,100%,アーム補強); 車輪をつけたのがポイントです。 #ref(./100622_1059~01.jpg,100%,重り); **完成したロボット [#c9a88ad2] 以上よりロボットが完成した。 #ref(./100622_1100~01.jpg,100%,ロボット完成); #ref(./100622_1059~03.jpg,100%,ロボット完成); *プログラム [#b13a8218] **馬場のプログラム [#g6c76d65] 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); //停止する } **小笠原のプログラム [#o40023ad] 1. 空き缶をコース上に戻して再びコースに戻って進む #define THRESHOLD 45 #define turn_180 OnFwd(OUT_A);OnRev(OUT_C);Wait(150);Off(OUT_A+OUT_C);Wait(100); int i; int t; task main (){ i=0; t=0; SetSensor(SENSOR_1,SENSOR_LIGHT); //光センサー SetSensor(SENSOR_2,SENSOR_TOUCH); //タッチセンサー SetSensor(SENSOR_3,SENSOR_LIGHT); //光センサー while (t<6) { if (SENSOR_1 > 40&&SENSOR_3 < 45) { OnFwd(OUT_A); OnRev(OUT_C); } if (SENSOR_1< 40&&SENSOR_3 > 45) { OnFwd(OUT_C); OnRev(OUT_A); } if (SENSOR_1 > 40&&SENSOR_3 > 45) { OnFwd(OUT_A+OUT_C); } if (SENSOR_1 < 40&&SENSOR_3 < 45) { OnFwd(OUT_C+OUT_A); } } if(SENSOR_1>THRESHOLD){ if(SENSOR_3>THRESHOLD){ OnFwd(OUT_A+OUT_C); //直進 } else{ OnFwd(OUT_A);OnRev(OUT_C); //左折 } if(SENSOR_1<THRESHOLD){ if(SENSOR_3>THRESHOLD){ OnFwd(OUT_C);OnRev(OUT_A); //右折 } OnFwd(OUT_C);OnRev(OUT_A); t++; //交差点 if(i==0){ OnFwd(OUT_A+OUT_C); Wait(30); i++; } else{ OnFwd(OUT_A); Off(OUT_C); } if(SENSOR_2==1){ if(SENSOR_1>THRESHOLD){ if(SENSOR_3>THRESHOLD){ OnFwd(OUT_B); Wait(20); //アーム閉じる turn_180; OnRev(OUT_B); Wait(50); OnRev(OUT_A+OUT_C); Wait(80); turn_180; i=i+1; } Off(OUT_A+OUT_C); } }}} } *反省点 [#n79e6e32] とにかく前回よりロボット作成とプログラムが格段と難しくなっていたので 、かなり苦労した。 あまりよく缶がはさめなかったので、もっと確実に挟める工夫が必要だと思った。 プログラムをもっと簡略にできると思った。 *感想 [#z747a562] 今回は二人でも、チームでも集まれたのは良かった。 とにかく難しかったけど、やりがいがあったし、楽しかった。 *コメントをどうぞ。 [#ec06ff04] #comment