目次
A3の紙に相棒の似顔絵を描くロボットの作成。
前と後の写真です。あくまでも上の写真が前です!前後反対に見えるかもしれませんが…
Aを左側のタイヤに、Cを右側のタイヤに、そして、Bをペン上下のために使用しました。
後にはSYOU特製のウインチが...実はコード巻くのに重要な役割を果たしています。
あと、結構ボタンが押しやすいです。
横の写真です。最初は本体と、制御部分が微妙にズレていて、不安定でしたが、黒長いブロックで、だいぶ補強できました。
また、大きいタイヤを重い方にもってくることでより安定性が増しました。
斜前と斜後の写真です。ここからだとペンが真ん中にあることがよくわかると思います。
ペンの写真です。ペンは王道マジックペンを使用しております。これが一番描きやすいですね。
仕組みは、写真向かって左のタイヤのみモーターで動きます。タイヤなのでホールド性抜群です。
これが改造前のロボット、ペンを下げた状態です。ロボット後のプーリーにゴムでペンを取り付けていました。
また、ペンを固定するため描いている時はずっとモーターを入れっぱなしにして、ペンを右のブロックに押し当てるという乱暴な?システムをとっていました。
これが改造前のロボット、ペンを上げた状態です。ペン上げるための回転数が難しく、下手をするとぶっ飛びました。
シンプルでなかなか良いシステムだったのですが、どうしてもペンを下げる時に擦ってしまい断念しました。
やはり、ペンを中心に持ってくる様に改造するのに一番苦労しました。
最初はモーターにプーリーをつけ、そこにペンをゴムで固定する方式をとっていましたが、
不安定であるのと、ペンを下ろす時に少し地面を擦るので、タイヤで上げ下げするシステムに変更しました。
これにより、ホールド性が向上し、ペンの上下も楽に行えるようになりました。
また、ペンをロボットの中心に近づけることで、いろいろな円が描けるようになりました。
なるべくシンプルで綺麗なロボットになるようにしました。特にSYOU特製のウインチは傑作です。
あと、なるべく細かく補強しました。
//似顔絵を描くプログラム #define T OUT_A+OUT_C //TはAとBのモーターを同時に:前進,後進用 #define R OUT_C //RでCのモーターだけを:左に曲がる用 #define L OUT_A //LでAのモーターだけを:右に曲がる用 #define P OUT_B //PでBのモーターを:ペンの上下用 sub pen_down() //ペンを下げるためのサブルーチン { SetPower(P,3); OnFwd(P); Wait(20); Off(P); } sub pen_up() //ペンを上げるためのサブルーチン { SetPower(P,3); OnRev(P); Wait(20); Off(P); } sub draw_curve() //カーブを描くためのサブルーチン { SetPower(L,7); SetPower(R,0); OnFwd(T); Wait(135); Off(T); } task main() { //輪郭を描く pen_down(); //ペン降下 draw_curve(); //カーブを描く OnFwd(L);Wait(270);Off(L); //円を描く draw_curve(); //カーブを描く pen_up(); //ペン上昇 Wait(200); //髪の毛を描く位置まで移動 OnFwd(L);OnRev(R);Wait(75);Off(T); //方向転換 OnRev(T);Wait(90);Off(T); //後進 Wait(200); //髪の毛を描く pen_down(); //ペン降下 OnFwd(T);Wait(150);Off(T); //直進 OnFwd(L);OnRev(R);Wait(110);Off(T); //方向転換 OnFwd(T);Wait(120);Off(T); //前進 pen_up(); //ペン上昇 Wait(200); //右目を描く位置まで移動 OnFwd(R);OnRev(L);Wait(60);Off(T); //方向転換 OnRev(T);Wait(30);Off(T); //後退 Wait(200); //右目を描く pen_down(); //ペン降下 OnFwd(L);OnRev(R);Wait(500);Off(T); //小さな円を描く pen_up(); //ペン上昇 Wait(200); //左目を描く位置まで移動 OnRev(T);Wait(85);Off(T); //後退 Wait(200); //右目を描く pen_down(); //ペン降下 OnFwd(L);OnRev(R);Wait(500);Off(T); //小さな円を描く pen_up(); //ペン上昇 Wait(200); //鼻を描く位置まで移動 OnFwd(T);Wait(15);Off(T); //前進 OnFwd(L);OnRev(R);Wait(125);Off(T); //方向転換 Wait(200); //鼻を描く pen_down(); //ペン降下 OnFwd(L);Wait(10);Off(L); //カーブを描く OnFwd(T);Wait(40);Off(T); //前進 OnFwd(L);OnRev(R);Wait(180);Off(T); //方向転換 OnRev(T);Wait(50);Off(T); //後退 pen_up(); //ペン上昇 Wait(200); //口を描く位置まで移動 OnFwd(L);OnRev(R);Wait(120);Off(T); //方向転換 OnRev(T);Wait(80); //後退 OnFwd(L);OnRev(R);Wait(100); //方向転換 OnRev(T);Wait(60);Off(T); //後退 Wait(200); //口を描く pen_down(); //ペン降下 OnFwd(T);Wait(80);Off(T); //前進 pen_up(); //ペン上昇 }
task main() { OnFwd(OUT_B);Wait(5);//(set pen) Off(OUT_B); OnFwd(OUT_A);Off(OUT_C);Wait(700);//(face outline) Off(OUT_A); OnRev(OUT_B);Wait(1);//(rize pen) Off(OUT_B); OnRev(OUT_A);OnFwd(OUT_C);Wait(40);//(turn for heir) OnRev(OUT_A);Off(OUT_C);Wait(30);//(fair for not confuse in face) Off(OUT_A); OnFwd(OUT_B);Wait(5);//(set pen) Off(OUT_B); OnFwd(OUT_A);Off(OUT_C);Wait(425);//(fair) Off(OUT_A); OnRev(OUT_B);Wait(5);//(rize pen) Off(OUT_B); OnRev(OUT_A);OnFwd(OUT_C);Wait(40);//(turn for grass) OnFwd(OUT_A+OUT_C);Wait(50);//(grass for not confuse in face) OnFwd(OUT_A);OnRev(OUT_C);Wait(128);//(turn for heir) Off(OUT_A+OUT_B+OUT_C);Wait(100); OnFwd(OUT_A+OUT_C);Wait(10);//(grass bar) Off(OUT_A+OUT_B+OUT_C);Wait(100); OnFwd(OUT_B);Wait(5);//(set pen) Off(OUT_A+OUT_B+OUT_C);Wait(100); Off(OUT_B); OnFwd(OUT_A+OUT_C);Wait(7);//(grass bar) OnRev(OUT_B);Wait(1);//(rize pen) Off(OUT_B); OnFwd(OUT_A+OUT_C);Wait(40);//(grass for not confuse grass renz) OnFwd(OUT_B);Wait(4);//(set pen) Off(OUT_B); OnFwd(OUT_A);OnRev(OUT_C);Wait(330);//(grass renz) OnRev(OUT_B);Wait(1);//(rize pen) Off(OUT_B); OnFwd(OUT_A+OUT_C);Wait(40);//(grass for not confuse grass renz) OnFwd(OUT_B);Wait(4);//(set pen) Off(OUT_B); OnFwd(OUT_A);OnRev(OUT_C);Wait(330);//(grass renz) OnFwd(OUT_A+OUT_C);Wait(7);//(grass bar) OnRev(OUT_B);Wait(1);//(rize pen) Off(OUT_B); OnRev(OUT_A+OUT_C);Wait(47);//(nosue for not confuse face) OnRev(OUT_A);OnFwd(OUT_C);Wait(80);//(nosue for not confuse face) OnFwd(OUT_A+OUT_C);Wait(4);//(nosue for not confuse face) Off(OUT_A); OnFwd(OUT_B);Wait(4);//(set pen) Off(OUT_B); OnFwd(OUT_A+OUT_C);Wait(10);//(nosue) Off(OUT_A); OnRev(OUT_B);Wait(1);//(rize pen) Off(OUT_B); OnFwd(OUT_A+OUT_C);Wait(4);//(mouce for not confuse face) OnFwd(OUT_B);Wait(4);//(set pen) Off(OUT_B); OnFwd(OUT_A);OnRev(OUT_C);Wait(70);//(grass renz) OnRev(OUT_A);OnFwd(OUT_C);Wait(120);//(grass renz) Off(OUT_A+OUT_B+OUT_C); }
関数とかの使いどころが分かりませんでした。
waitの設定が日々変化するのがつらいところでした。
せっかく書いたプログラムの横のコメントが文字化けしたのが嫌でした。
転倒するのを防ぐためにoffを多用しました。
ずれるのを防ぐためにできるだけつなげてかけるようにしました。
SYOUに似ているとかいうレベルではありません…
口の位置まで移動するのが難しかったです。最後は力技で時間を変えて何回も調整しました。
髪の毛の上の部分が描けなかったのが心残りではあります…
特徴がメガネだけだというのはいかがなものかとは思いました。
練習ではうまくいったのに本番では鼻とかがずれたのはいい思い出です。
最初は右も左もわからず、写真も貼れなかったんですが、なんとか書き上げることができました。こうやって振り返ってみるのもいいものですね。
最初はどうなることかとおもいましたが、結構ハイレベルな絵が描けたと思います。プログラムは別として…
時間はかなりかけたつもりです。SYOUも何回も一緒に残ってくれてありがとう!
プログラムを整理しようと思ったけど関数の意味がわからなかったのはいい思い出です。
その場で回転して、方向を変える時にペンの位置がずれてしまう。
関数などを使いこなせなかった。
1回転、前進の距離などの誤差をプログラムを実行する前にプログラムの頭で変更できるようにしたかった。
①ウインチの説明や。