目次
コードが長いものを使うしかなかったので、タイヤに巻き込まれないようにまとめた。ペンがずれないように支えもつけた。
モーターが動くとタイヤも連動して動くようにした。しかしこの装置は少し挟む力が弱く、長い時間タイヤを動かすとペンをつかまなくなってしまうので調整が難しかった。輪ゴムは一本だと弱い上に負荷をかけすぎると切れそうだったので二本使用した。また、写真には取り忘れたが分解・組み立てもしやすいように作られている。
今回は下図のような絵を書くようにプログラミングした。(始点は左上の点)
定義それぞれについて解説する。
#define tyokkaku 111
ロボット本体を直角に旋回させるために定義した数値だが、床の滑り具合や電池の残量によって変化したので毎回数値を変える必要があった。
#define kaiten1(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_AC);
ロボット本体を時計回りに直角に回転させる。
#define kaiten2(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t);Off(OUT_AC);
ロボット本体を反時計回りに直角に回転させる。
#define zensin(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC);
ロボット本体をt秒間前進させる。
#define pen_up OnRev(OUT_B);Wait(20);Off(OUT_B);
ペンを上げる。
#define pen_down OnFwd(OUT_B);Wait(20);Off(OUT_B);
ペンを下げる。
#define soroeru(t) OnRev(OUT_AC);Wait(t);Off(OUT_AC);
ロボット本体を旋回させた後ペン先の始点と終点を揃えるために定義した。
#define write(t) pen_down;zensin(t);pen_up;
t秒間線を書く動作を定義した。
#define magarisusumu1(t) kaiten1(tyokkaku);soroeru(58);write(t);
ロボット本体を直角に旋回させてt秒間線を書く動作を定義した。
プログラムについて解説する。
task main() { write(81);//頭のてっぺん zensin(52); kaiten1(75); soroeru(59); write(42);//髪の毛右斜め上 zensin(62); kaiten1(40); soroeru(60); write(132);//髪の毛右側 zensin(63); magarisusumu1(20); zensin(62); magarisusumu1(117); zensin(61); kaiten2(67);//前髪の角度 soroeru(70); write(47);//前髪右側を書く zensin(62); kaiten2(70);//前髪の角度 soroeru(65); write(37);//前髪左側を書く zensin(62); kaiten2(47); soroeru(70); write(117); zensin(62); magarisusumu1(20); zensin(62); magarisusumu1(130);//髪の毛左側 zensin(62); kaiten1(65); soroeru(63); write(39);//髪の毛完成
ここまでで髪の毛の部分を書き上げる。髪の毛右側とか左側というのは髪パーツの一番外側のタテ線のことである。ここは一か所がずれると全体がずれていくのでプログラミングするのに時間がかかった。正直に言うともう少しコンパクトにしたかった。同じような命令が続いていて見た目が悪い。
zensin(77); kaiten1(160); zensin(148);//本来の輪郭よりちょっと長めに kaiten2(tyokkaku); soroeru(65); write(65);//輪郭を書く
輪郭を書く。一本線だが始点と終点が髪の毛の部分と合わないと顔のパーツもずれていくので細かく調整した。
kaiten2(100); zensin(20);//口の高さまで kaiten2(100); soroeru(100);//口の端まで write(36);//口を書く
口を書く。顔の中心に書けるように時間を調整した。書く時間が長すぎたり曲がる角度がずれたりするとニヒルな笑みを浮かべた絵になってしまうので丁寧に調整した。
kaiten1(tyokkaku); soroeru(30); write(20);//左目を書く soroeru(20); kaiten2(tyokkaku); zensin(40);//中心が右目になるように kaiten1(tyokkaku); write(20);//右目を書く }
目を書いて完成。目は口がずれない限り顔の中におさまるようになっている。