[[戻る>2005/A6]] [[課題1>2005/練習問題#kadai1]] * 問題点 [#hb90ce88] - ペンをどうやって持たせるか - ペンをどうやって上げ下げするか - どうやれば綺麗に文字が書けるか * 試作ロボット [#ca485764] - 試作1 -- 歯車で腕を持ち上げたり下げたりしようとした。 うまく噛み合わず動かなくて失敗 * 最終的なロボットとプログラム [#k8684c6b] -歯車が噛み合わなかった点を反省して、ゴムで腕を上げ下げさせるようにした。 -それでも、手動で腕を動かした後はうまく動かなくなるので、ウォーミングアップ用のプログラム(腕を上げ下げさせる)を作った。 **各自のプログラム [#r9e76aa2] -K.M sub arms_down() sub arms_down() //腕を下げる動作 { OnFwd(OUT_B); Wait(100); Off(OUT_B); } sub arms_up() sub arms_up() //腕を上げる動作 { OnRev(OUT_B); Wait(100); Off(OUT_B); } sub turn_right() sub turn_right() //右に曲がる動作 { OnFwd(OUT_A); OnRev(OUT_C); Wait(85); Off(OUT_A+OUT_C); } sub turn_left() sub turn_left() //左に曲がる動作 { OnFwd(OUT_C); OnRev(OUT_A); Wait(85); Off(OUT_A+OUT_C); } task main() { arms_down(); OnFwd(OUT_A); arms_down(); //腕を下げてペンを紙へ付ける OnFwd(OUT_A); //ここから右旋回で右の1画目を書く OnRev(OUT_C); Wait(70); Off(OUT_A+OUT_C); arms_up();//1 arms_up();// //1画目のはらい終了、ペンを上げる OnFwd(OUT_A); OnFwd(OUT_A); //2画目の準備 OnRev(OUT_C); Wait(16); Off(OUT_A+OUT_C); OnFwd(OUT_A+OUT_C); OnFwd(OUT_A+OUT_C); Wait(42); Off(OUT_A+OUT_C); turn_right(); OnRev(OUT_A+OUT_C); Wait(142); Off(OUT_A+OUT_C); arms_down(); arms_down(); //ペンを下げて2画目へ OnRev(OUT_A+OUT_C); Wait(152); Off(OUT_A+OUT_C); arms_up();//2 arms_up(); //2画目終了、ペンを上げる OnFwd(OUT_A+OUT_C); OnFwd(OUT_A+OUT_C); //3画目の準備 Wait(213); Off(OUT_A+OUT_C); turn_right(); OnRev(OUT_A+OUT_C); Wait(131); Off(OUT_A+OUT_C); arms_down(); arms_down(); //ペンを下げて3画目を書く OnRev(OUT_A+OUT_C); Wait(48); Off(OUT_A+OUT_C); arms_up();//3 arms_up(); //3画目終了、ペンを上げる OnFwd(OUT_A+OUT_C); OnFwd(OUT_A+OUT_C); //4画目の準備 Wait(148); Off(OUT_A+OUT_C); turn_left(); OnRev(OUT_A+OUT_C); Wait(100); Off(OUT_A+OUT_C); arms_down(); arms_down(); //ペンを下げて4画目へ OnRev(OUT_A+OUT_C); Wait(69); Off(OUT_A+OUT_C); arms_up();//3.5 arms_up(); //4画目の曲がりまで終了、ペンを上げる OnFwd(OUT_A+OUT_C); OnFwd(OUT_A+OUT_C); //4画目の曲がりからスタートの準備 Wait(100); Off(OUT_A+OUT_C); turn_right(); OnRev(OUT_A+OUT_C); Wait(100); Off(OUT_A+OUT_C); arms_down(); arms_down(); //ペンを下げて4画目の続きへ OnRev(OUT_A+OUT_C); Wait(48); Off(OUT_A+OUT_C); arms_up();//4 arms_up(); //4画目終了、ペンを上げる OnFwd(OUT_A+OUT_C); OnFwd(OUT_A+OUT_C); //5画目の準備 Wait(100); Off(OUT_A+OUT_C); turn_left(); OnRev(OUT_A+OUT_C); Wait(31); Off(OUT_A+OUT_C); arms_down(); arms_down(); //ペンを下げて5画目へ OnRev(OUT_A+OUT_C); Wait(69); Off(OUT_A+OUT_C); arms_up();//5 arms_up(); //5画目終了、ペンを上げる OnRev(OUT_A); OnRev(OUT_A); //1回転回って喜びを表現(無意味) OnFwd(OUT_C); Wait(340); Off(OUT_A+OUT_C); } -AI sub pen_down(){// 腕を下げる Off(OUT_A+OUT_C); OnFwd(OUT_B); Wait(100); Off(OUT_B); } sub pen_up(){// 腕を上げる Off(OUT_A+OUT_C); OnRev(OUT_B); Wait(100); Off(OUT_B); } void go(int t){// まっすぐ走る OnFwd(OUT_A+OUT_C); Wait(t); } void back(int t){// バックする OnRev(OUT_A+OUT_C); Wait(t); } task main(){ pen_down(); OnFwd(OUT_A); OnRev(OUT_C); Wait(70); pen_up();// 一画目 OnFwd(OUT_C); OnRev(OUT_A); Wait(70); back(30); OnFwd(OUT_A); Wait(70); OnFwd(OUT_C); Wait(10); OnRev(OUT_A); Wait(70); pen_down(); go(180); pen_up();// 二画目 back(120); OnFwd(OUT_A); Wait(74); back(50); OnFwd(OUT_C); Wait(10); pen_down(); go(70); pen_up();// 三画目 OnFwd(OUT_C); OnRev(OUT_A); Wait(70); OnRev(OUT_C); Wait(100); pen_down(); go(100); pen_up();// 四画目 go(100); OnFwd(OUT_A); OnRev(OUT_C); Wait(70); OnRev(OUT_A); Wait(100); pen_down(); go(100); pen_up();// 四画目その2 go(100); OnRev(OUT_C); Wait(70); OnFwd(OUT_C); Wait(10); pen_down(); back(100); pen_up();// 五画目 } * 反省点 [#kb41a65b] - 一秒間に走る距離と、何秒で回転するかを計ったが、電池の消耗→交換によりズレが生じてしまった #comment