[[池尻のノート>2005/C1/池尻]] *四角形[#hed12ed1] **プログラム [#eff22c62] #define MOVE_TIME 145 task main() { OnFwd(OUT_A); OnFwd(OUT_C); Wait(300); OnFwd(OUT_A); OnRev(OUT_C); Wait(MOVE_TIME); OnFwd(OUT_A); OnFwd(OUT_C); Wait(300); OnFwd(OUT_A); OnRev(OUT_C); Wait(MOVE_TIME); OnFwd(OUT_A); OnFwd(OUT_C); Wait(300); OnFwd(OUT_A); OnRev(OUT_C); Wait(MOVE_TIME);#define MOVE_TIME 145 } **感想 [#bcdd5024] まあまあ簡単やった。 *課題1:書道ロボット(右) [#hed12ed1] **プログラム [#eb9aea6c] #define MOVE_TIME 18 //90度回るために必要な時間 sub lift_up() //リフトを上げるためのサブルーチン { Wait(40); OnRev(OUT_B); Wait(50); Off(OUT_B); } sub lift_down() //リフトを下げるためのサブルーチン { Wait(40); OnFwd(OUT_B); Wait(50); Off(OUT_B); } sub go_straight() //直進するためのサブルーチン { Wait(50); repeat(3){ OnFwd(OUT_A); OnFwd(OUT_C); Wait(10); Off(OUT_A+OUT_C); Wait(10);} } sub turn_right() //右に曲がるためのサブルーチン { Wait(50); OnFwd(OUT_A); OnRev(OUT_C); Wait(MOVE_TIME); Off(OUT_A+OUT_C); } sub turn_left() //左に曲がるためのサブルーチン { Wait(50); OnRev(OUT_A); OnFwd(OUT_C); Wait(MOVE_TIME); Off(OUT_A+OUT_C); } task main() { Wait(50); //連続して動かすと徐々に誤差がでるため OnFwd(OUT_A); //全ての行動の前には基本的に0、5秒間を開ける OnFwd(OUT_C); // Wait(10); //最初の「ノ」の字の飛び出る部分です Off(OUT_A+OUT_C); Wait(50); //タイヤを片方固定、もう一方を動かして、 OnFwd(OUT_A); //タイヤの間隔を利用し「ノ」の曲線部分を表現 Wait(40); Off(OUT_A); turn_right(); lift_up(); //筆を上げる Wait(50); OnFwd(OUT_A); OnFwd(OUT_C); Wait(20); Off(OUT_A+OUT_C); OnFwd(OUT_C); Wait(5); Off(OUT_C); turn_right(); lift_down(); Wait(50); //モーターの左右のパワーバランスが良くないの repeat(4){ //で、小刻み、且つ微調整を行う OnFwd(OUT_A); OnFwd(OUT_C); Wait(10); Off(OUT_A+OUT_C); Wait(10);} Wait(50); OnFwd(OUT_A); OnRev(OUT_C); Wait(30); Off(OUT_A+OUT_C); lift_up(); Wait(50); repeat(4){ //モーターの左右のパワーバランスが良くないの OnFwd(OUT_A); //で、小刻み、且つ微調整を行う。さっきも書いたね! OnFwd(OUT_C); Wait(10); Off(OUT_A+OUT_C); Wait(10);} Wait(50); //「口」の字に到達 OnRev(OUT_A); OnFwd(OUT_C); Wait(12); Off(OUT_A+OUT_C); lift_down(); go_straight(); lift_up(); Wait(50); repeat(4){ OnRev(OUT_A); OnRev(OUT_C); Wait(5); Off(OUT_A+OUT_C); Wait(10);} turn_left(); //サブルーチンのオンパレード lift_down(); go_straight(); turn_right(); go_straight(); turn_right(); lift_up(); go_straight(); turn_right(); turn_right(); lift_down(); go_straight(); } **感想[#md163209] マシンのバランスが悪いためか、直進が右にカーブしてしまう機能を持っていたため、改良に改良を重ねた。それと、ペンを上下させるためのリフトを作るのが苦労した。 *課題2:壁に沿って動くロボット[#hed12ed1] **プログラム [#eb9aea6c] task main() { SetSensor(SENSOR_1,SENSOR_TOUCH); SetSensor(SENSOR_3,SENSOR_TOUCH); while(true) { if ( SENSOR_3 == 1 ) { OnFwd(OUT_A+OUT_C); } //センサー3が押されている間直進 if(( SENSOR_3 == 0 )&&( SENSOR_1 == 0 )) { OnFwd(OUT_A); Off(OUT_C); } //センサーが押されていないと右へ if ( SENSOR_1 == 1 ) { OnFwd(OUT_C); OnRev(OUT_A); Wait(90); } //センサー1が押されると左へ } } **感想[#md163209] なかなかセンサーが反応せえへんかったから、どうにかして反応させんのが大変やった。 *黒い線に沿って動くロボット(モーター2個、センサー1個) [#hed12ed1] **プログラム [#eb9aea6c] #define T 40 task main () { SetSensor(SENSOR_2,SENSOR_LIGHT); while (true) { if (SENSOR_2 < T) { OnFwd(OUT_A); Off(OUT_C); } else { Off(OUT_A); OnFwd(OUT_C); } } } **感想 [#h445ee01] 黒線上に光センサがある場合でもロボットは直進せんかった。 *光センサー(モーター2個、センサー前後に1個) [#hed12ed1] **プログラム [#eb9aea6c] #define T 40 task main () { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); while (true) { if ((SENSOR_1 < T) &&(SENSOR_3 < T)){ OnFwd(OUT_A); OnFwd(OUT_C); } if (SENSOR_1 < T){ OnFwd(OUT_A); Off(OUT_C); }if(SENSOR_3 < T){ Off(OUT_A); OnFwd(OUT_C); } } }