つっちー&しゅーた
僕たちは最初「なんか強そう・・・」とかゆう理由でキャタピラのマシンを作りました。
で、似顔絵を書くに当ってデカいし少し動きづらいので、タイヤの方に変えようと一時期思いましたが、やはり最初の印象は強かったのか、またタイヤは動きが早すぎてうまく描けないんじゃないかと判断しキャタピラのままでいくことを決心しました。
ペンはZEBRAのマッキーを使用しました。
固定の仕方としては、最初はタイヤを用いた固定法を考えたのですが、どこにどうゆう風に取り付けたらいいのかわからず挫折しました。
なのでこのような感じで、付属部品を駆使して、モーターを取り付け、ペンを付属のゴムで巻き付けるシンプルなものしました。なんせ本体がデカいっすから(泣)
描き方はモーターを回転して上げ下げさせるごく単純な方法ですが、これを作るのにまた意外と苦労しましたf(^_^);
作り始めた初期の頃、モーターでペンを下げて描く時にペンへの力が足りないのか線が点線になってしまったり、薄くなってしまったりしてました。
そこで、「じゃあもっと力を加えて濃くはっきりしてやろう!!」と素晴らしい発想をし、描いている間もモーターを回転させた状態にしておく手法を取りました。
しかし↓↓
今度はモーターを取り巻く付属部品に力がかかり、崩壊・・・(・o・;)↓↓
その後あれこれ考えた末、描いてる間ペンに適当な圧力をかけてくれる素晴らしい部品を発見しました。それこそまたまた付属のゴムでした(笑)
今回は本当に付属のゴムが僕たちを救ってくれました(;^_^A
ゴムによってペンに左斜め下方向に力をかけ、ペンを下に押さえつけました。
これが僕らなりの工夫です。
ペンの固定位置が悪かったような気がします。
ロボットの動きとペンの動きが違ったのでプログラミング時に苦労しました。
なのでもう少し固定位置を考えるべきでした。
マクロを使い長かったプログラムが、短くなりました。
#define go_straight(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C); //↑前に進む #define pen_up OnFwd(OUT_B);Wait(20);Off(OUT_B);//ペンを上げる #define pen_down OnRev(OUT_B);Wait(20);Off(OUT_B);//ペンを下げる task main() { OnFwd(OUT_A); OnRev(OUT_C); //輪郭を書く Wait(720); //ペンがロボットの回転軸からかなり離れたところにあるので Off(OUT_A+OUT_C); //その場で回転するだけでかなり大きい円が描けます。 pen_up; OnRev(OUT_C); //ここもペンがロボットの斜め後ろに付いているので、 Wait(405); //片方だけキャタピラを動かして方向転換をするだけで Off(OUT_A+OUT_C); //ちょうど目ぐらいの高さにペン先がきます。 //あとは直進しながらタイミングよくペンを上下させるだけで目が描けます pen_down; go_straight(16); //右目を書く pen_up; go_straight(16); Off(OUT_A+OUT_C); pen_down; go_straight(16); //左目を書く pen_up; Off(OUT_A+OUT_C); OnFwd(OUT_C); //ここでも方向転換をするだけで Wait(400); //ペン先がちょうど鼻の位置に来ます Off(OUT_A+OUT_C); pen_down; //後はペンを下げて OnRev(OUT_A+OUT_C); Wait(30); //鼻を書くだけです Off(OUT_A+OUT_C); pen_up; //最後にちゃんとペンを上げて Off(OUT_A+OUT_C); //終了です }
僕もマクロを用いて少しは省略できました↑↑
#define pen_up OnFwd(OUT_B);Wait(30);Off(OUT_B); //ペンを上げる。 #define pen_down OnRev(OUT_B);Wait(30);Off(OUT_B); //ペンを下げる。 task main() { pen_down; OnFwd(OUT_A); OnRev(OUT_C); Wait(660); Off(OUT_A+OUT_C); //輪郭を描く。 pen_up; OnFwd(OUT_A); OnRev(OUT_C); Wait(180); Off(OUT_A+OUT_C); OnRev(OUT_A+OUT_C); Wait(110); Off(OUT_A+OUT_C); pen_down; OnFwd(OUT_A+OUT_C); Wait(50); Off(OUT_A+OUT_C); //左目を描く。 pen_up; OnFwd(OUT_A+OUT_C); Wait(20); Off(OUT_A+OUT_C); pen_down; OnFwd(OUT_A+OUT_C); Wait(50); Off(OUT_A+OUT_C); //右目を描く。 pen_up; OnFwd(OUT_A); OnRev(OUT_C); Wait(200); Off(OUT_A+OUT_C); pen_down; OnFwd(OUT_A); OnRev(OUT_C); Wait(120); Off(OUT_A+OUT_C); //口を描く。 pen_up; }
円を書いたはずなのにつながっていません(>_<) 色々といじくり回しているうちに時間が無くなり結局これになちゃいました。 もっと、計画的に取り組めば良かったと思います。
やっぱりキャタピラの振動で、微妙に点線になってしまいました↓
でも結構似てると思います!!
キャタピラ独特のズレに苦労しました。同じプログラミングでも一回ごとにズレが出てしまい、waitの時間設定がとても大変でした。 このせいで、前髪のギザギザや、楕円に近い顔の輪郭等をあきらめざるを得ませんでした また、直線からカーブ カーブから直線がうまくできず、大変でした。 でも久しぶりにこの課題で一つのことにパートナーと取り組むとゆうことをして、チームワークの大事さなどがわかりました。これからも頑張ります!!
なにかありましたら、コメントお願いします。
#define go_straight(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);
のようにすれば、go-straight(時間)とするだけですみます
penupやpenduの次に必ずwait(20)を入れるならそれもマクロに組み込んだほうがよいと思います。