#contents *課題1:書道ロボット【吉】【台】 [#d78eb597] 『吉』と『台』の文字を筆順に従ってA4の紙にそれぞれ書く。~ その際、ペン以外のものはキットに付属されている部品を使わなければならない。~ また。書き順はなるべく正確になるようにプログラムする。 *ロボットの紹介 [#bac8d4d2] タイヤを使用して進む。~ 後輪が回転し、前輪は回転しやすくするため、滑車の車輪を使用した。~ ペンは2つのタイヤで挟み込むようにして持たせ、そのタイヤを回転させることによって~ 上げ下げを行う。~ 後輪は滑車でできており、机の上など滑りやすいところでは非常に曲がりやすい。~ 前から見た写真~ #ref(./071107_164432.jpg,50%,前から見た写真) ~ ペンを持たせた写真~ #ref(./071107_165351.jpg,50%,ペンを持たせた写真) ~ 横から見た写真~ #ref(./071108_155006.jpg,50%,横から見た写真)~ 後ろから見た写真~ #ref(./071108_154826.jpg,50%,後ろから見た写真)~ *プログラム [#l1a55a5c] 『吉』の字のプログラム #define CAVE_TIME 65 //90度曲がるための時間 #define TURN_TIME 130 //180度曲がるための時間 #define PEN_TIME 5 //ペンを上げるための時間 #define LONG_ONE 120 //進む時間その1 #define LONG_TWO 100 //進む時間その2 #define LONG_THREE 40 //進む時間その3 #define LONG_FOUR 80 //進む時間その4 task main() { SetPower(OUT_A,2); //吉の字一画目のプログラム SetPower(OUT_C,2); OnFwd (OUT_A+OUT_C); Wait(LONG_ONE); Off(OUT_A+OUT_C); OnRev(OUT_B); Wait(PEN_TIME); Off(OUT_B); OnFwd (OUT_A+OUT_C); //吉の字二画目に移動するためのプログラム Wait(1); OnRev(OUT_A); Wait(CAVE_TIME); OnFwd (OUT_A+OUT_C); Wait(LONG_THREE); OnRev(OUT_A); Wait(CAVE_TIME); OnFwd (OUT_A+OUT_C); Wait(60); OnRev(OUT_A); Wait(CAVE_TIME); Off(OUT_A+OUT_C); OnFwd(OUT_B); //吉の字二画目のプログラム Wait (PEN_TIME); Off(OUT_B); OnFwd (OUT_A+OUT_C); Wait(LONG_TWO); Off(OUT_A+OUT_C); OnRev(OUT_B); Wait(PEN_TIME); Off(OUT_B); OnFwd (OUT_A+OUT_C); //吉の字三画目に移動するためのプログラム Wait(1); OnRev(OUT_C); Wait(CAVE_TIME); OnFwd (OUT_A+OUT_C); Wait(LONG_THREE); OnRev(OUT_A); Wait(TURN_TIME); Off(OUT_A+OUT_C); OnFwd(OUT_B); //吉の字三画目のプログラム Wait(PEN_TIME); Off(OUT_B); OnFwd (OUT_A+OUT_C); Wait(LONG_FOUR); Off(OUT_A+OUT_C); OnRev(OUT_B); Wait(PEN_TIME); Off(OUT_B); OnFwd (OUT_A+OUT_C); //吉の字四画目に移動するためのプログラム Wait(1); OnRev(OUT_C); Wait(CAVE_TIME); OnFwd (OUT_A+OUT_C); Wait(20); OnRev(OUT_C); Wait(CAVE_TIME); OnFwd (OUT_A+OUT_C); Wait(LONG_FOUR); OnRev(OUT_A); Wait(CAVE_TIME); Off(OUT_A+OUT_C); OnFwd(OUT_B); //吉の字四画目のプログラム Wait(PEN_TIME); Off(OUT_B); OnFwd (OUT_A+OUT_C); Wait(LONG_THREE); Off(OUT_A+OUT_C); OnRev(OUT_B); Wait(PEN_TIME); Off(OUT_B); OnFwd (OUT_A+OUT_C); //吉の字五画目に移動するためのプログラム Wait(1); OnRev(OUT_C); Wait(TURN_TIME); OnFwd (OUT_A+OUT_C); Wait(LONG_THREE); OnRev(OUT_C); Wait(CAVE_TIME); Off(OUT_A+OUT_C); OnFwd(OUT_B); //吉の字五画目のプログラムその1 Wait(PEN_TIME); Off(OUT_B); OnFwd (OUT_A+OUT_C); Wait(LONG_FOUR); Off(OUT_A+OUT_C); OnRev(OUT_B); Wait(PEN_TIME); Off(OUT_B); OnFwd (OUT_A+OUT_C); Wait(1); OnRev(OUT_C); Wait(CAVE_TIME); Off(OUT_A+OUT_C); OnFwd(OUT_B); //吉の字五画目のプログラムその2 Wait(PEN_TIME); Off(OUT_B); OnFwd (OUT_A+OUT_C); Wait(LONG_THREE); Off(OUT_A+OUT_C); OnRev(OUT_B); Wait(PEN_TIME); Off(OUT_B); OnFwd (OUT_A+OUT_C); //吉の字六画目に移動するためのプログラム Wait(1); OnRev(OUT_C); Wait(CAVE_TIME); OnFwd (OUT_A+OUT_C); Wait(LONG_FOUR); OnRev(OUT_C); Wait(TURN_TIME); Off(OUT_A+OUT_C); OnFwd(OUT_B); //吉の字六画目のプログラム Wait(PEN_TIME); Off(OUT_B); OnFwd (OUT_A+OUT_C); Wait(LONG_FOUR); Off(OUT_A+OUT_C); } 『台』の字のプログラム (ただし、一つの直線を一画とする) #define MOVE_TIME 20 //ペンを上げ下げする時間 #define SetPower(OUT_A,2) //モーターの出力 #define SetPower(OUT_C,2) task main() { OnFwd(OUT_A+OUT_C); //台の字一画目の直線 Wait(100); Off(OUT_A+OUT_C); OnRev(OUT_B); //ペンを上げる Wait(MOVE_TIME); Off(OUT_B); OnRev(OUT_A); //二画目を書く為の方向転換 OnFwd(OUT_C); Wait(80); Off(OUT_A+OUT_C); OnFwd(OUT_B); //ペンを下ろす Wait(MOVE_TIME); Off(OUT_B); OnFwd(OUT_A+OUT_C); //二画目の直線 Wait(110); Off(OUT_A+OUT_C); OnRev(OUT_B); //ペンを上げる Wait(MOVE_TIME); Off(OUT_B); OnRev(OUT_A); //三画目を書く為の方向転換 その1 OnFwd(OUT_C); Wait(80); Off(OUT_A+OUT_C); OnFwd(OUT_A+OUT_C); //三画目を書く為の移動 Wait(30); Off(OUT_A+OUT_C); OnRev(OUT_C); //三画目を書く為の方向転換 その2 OnFwd(OUT_A); Wait(120); Off(OUT_A+OUT_C); OnFwd(OUT_B); //ペンを下げる Wait(MOVE_TIME); Off(OUT_B); OnFwd(OUT_A+OUT_C); //三画目の直線 Wait(60); Off(OUT_A+OUT_C); OnRev(OUT_B); //ペンを上げる Wait(MOVE_TIME); Off(OUT_B); OnRev(OUT_C); //四画目を書く為の方向転換 その1 OnFwd(OUT_A); Wait(80); Off(OUT_A+OUT_C); OnFwd(OUT_A+OUT_C); //四画目を書く為の移動 Wait(100); Off(OUT_A+OUT_C); OnRev(OUT_A); //四画目を書く為の方向転換 その2 OnFwd(OUT_C); Wait(60); Off(OUT_A+OUT_C); OnFwd(OUT_B); //ペンを下ろす Wait(MOVE_TIME); Off(OUT_B); OnFwd(OUT_A+OUT_C); //四画目の直線 Wait(65); Off(OUT_A+OUT_C); OnRev(OUT_B); //ペンを上げる Wait(MOVE_TIME); Off(OUT_B); OnRev(OUT_A); //五画目を書く為の方向転換 OnFwd(OUT_C); Wait(60); Off(OUT_A+OUT_C); OnFwd(OUT_B); //ペンを下ろす Wait(MOVE_TIME); Off(OUT_B); OnFwd(OUT_A+OUT_C); //五画目の直線 Wait(80); Off(OUT_A+OUT_C); OnRev(OUT_B); //ペンを上げる Wait(MOVE_TIME); Off(OUT_B); OnRev(OUT_A); //六画目を書く為の方向転換 OnFwd(OUT_C); Wait(60); Off(OUT_A+OUT_C); OnFwd(OUT_B); //ペンを下げる Wait(MOVE_TIME); Off(OUT_B); OnFwd(OUT_A+OUT_C); //六画目の直線 Wait(65); Off(OUT_A+OUT_C); OnRev(OUT_B); //ペンを上げる Wait(MOVE_TIME); Off(OUT_B); OnRev(OUT_A); //七画目を書く為の方向転換 OnFwd(OUT_C); Wait(60); Off(OUT_A+OUT_C); OnFwd(OUT_B); //ペンを下げる Wait(MOVE_TIME); Off(OUT_B); OnFwd(OUT_A+OUT_C); //七画目の直線 Wait(80); Off(OUT_A+OUT_C); } *製作過程 [#ue110446] はじめはキャタピラのついた車体だったが線がぶれるためタイヤに変更。~ タイヤに変更してもペンの固定した位置が悪かったため、隙間が非常に大きかった。~ また、曲がるのが非常に苦手な車体になってしまった。~ この問題を改善するために、後輪を滑車にして滑るようにした。~ ペンを固定する位置を車体の中心部に持っていくようにした。~ だが、地面の少しの違いで曲がる角度に差が出たり、隙間を完全になくすことはできなかった。~ **苦労した点 [#y938dd2f] +ペンを安定させるために、なるべく幅の大きいタイヤを選ばなくてはならなかったため、~ 一番長い穴の開いている棒状のパーツでも安定した固定をすることができなかった。~ +モーターの所為か、ロボが直進しないので直線を書かせる事が難しかった。~ +ペンだけを動かすのではなく、ペンを持ったロボ本体が動く仕組みなので、中央にペンが~ 設置されていないロボは回転する度書きだす位置が変わってしまい、上手に書かす事にとても~ 苦労した。~ +はじめはペンを持たせる部分が前方にあり線と線の隙間が大きかったが、なるべく、車体の中心~ につけるように改良したためいくらかよくなった。 **工夫した点 [#x0fcffcd] +ペンの上げ下げには柔らかく幅の広いタイヤを用い、人の持ち方に近づけた。~ +本来駆動に使うタイヤや部品をペン持ちに使った為、駆動部を殆ど説明書に頼らず自力で作った。~ +車体は、なるべく分解しないように丈夫に作った。 *感想 [#e4a99e33] うみわたり:ロボを思い通りに動かすのは予想以上に大変だった。一秒で動く距離や、90度曲がる~ 桑名:ロボを思い通りに動かすのは予想以上に大変だった。一秒で動く距離や、90度曲がる~ 秒数などをきちんと測ってからプログラムしても、その時々で走り方が変わるので結局上手に書く事は~ 出来なかった。次はロボとプログラム両方の問題を解決して、上手に熟したい。~ 吉沢:曲がるときによって、曲がる角度が違ったり、ペンを真ん中に持たせられなかったため誤差が~ 大きかった。車体の改良が必要だと思った。次回はよりよい車体を作りたい。~ よろしければコメントをお願いします -もっと良い評価になるには説明が不足していいます。 -- [[クノ]] &new{2007-11-07 (水) 19:34:17}; よろしければコメントをお願いします #comment