3つのモーターを
に用いて書道ロボットを製作した。
ペンと車体は一体化しており車体を動かすことで文字を書くようにした。
上記のようにペンと車体を一体化したため、車体を大きく動かさなければならなくなった。 そのため車体の動きや、ペンと地面との摩擦などで少しずつずれが生じてしまい書くたびに文字が変化するという事態が起こってしまった。
ペンが車体の前についているので車体の向きを変更するたびにペンの位置がずれてしまうため,プログラミングの段階で、車体の大きさを考慮しなければならなかった。
車体を動かすモーターに力の差が生じたため、直線のつもりが左に寄っていってしまい方向転換の際に、まっすぐ進まないことを考慮し、少し多めに回転させるなどの工夫をしたプログラムを作らなければならなかった。
前進をしながら文字を書こうとすると、うまくペンが地面と接触せずたくさんの点が並ぶという事態が発生してしまったので、文字を書くときはなるべく後進を利用したり、筆圧を調整するなどの工夫をした。
「聡」という漢字を書くロボットを製作しようとしたが、画数が多く車体の方向転換が多いので少しずつずれが生じることから、書き順を変更することにした。 「聡」という漢字をみると、「耳」「公」「心」と分けることができる。
「耳」を書くとき、方向転換をなるべく減らすために横線を一気に4本引くことにした。(「耳」の 一画目、三画目、四画目、五画目)その後六画目、二画目を書くことでずれを最小限に抑えることが できた。
「公」を書くとき、「耳」とは違い垂直ではなかったので「公」の一画目と三画目を先に書き、角度 の違う二画目と四画目を後回しにした。 「心」は書き順通りに書いたが、「心」の四画目と「公」の二画目と四画目の角度を同じにしても違 和感がなかったので、「心」を書いた後「公」の四画目と二画目を書いた。
#define go OnFwd(OUT_AC); #define up OnRev(OUT_B);Wait(10);Off(OUT_B); #define down OnFwd(OUT_B);Wait(10);Off(OUT_B); #define left OnFwd(OUT_C);OnRev(OUT_A); #define right OnFwd(OUT_A);OnRev(OUT_C); #define back OnRev(OUT_AC); task main() { down; go;Wait(45);//「耳」一画目 up; back;Wait(40); right;Wait(90);Off(OUT_AC); go;Wait(15); left;Wait(90);Off(OUT_AC); down; go;Wait(15);//「耳」三画目 up; back;Wait(30); right;Wait(90);Off(OUT_AC); go;Wait(15); left;Wait(90);Off(OUT_AC); down; go;Wait(15);//「耳」四画目 up; back;Wait(45); right;Wait(90);Off(OUT_AC); go;Wait(15); left;Wait(90);Off(OUT_AC); down; go;Wait(30);Off(OUT_AC);//「耳」五画目 up; go;Wait(70); left;Wait(95);Off(OUT_AC); back;Wait(60); down; back;Wait(70);//「耳」六画目 up; go;Wait(30); left;Wait(90);Off(OUT_AC); go;Wait(15); right;Wait(90);Off(OUT_AC); down; go;Wait(50);//「耳」二画目 up; right;Wait(50); go;Wait(25); left;Wait(20); down; back;Wait(25);//「公」一画目 up; right;Wait(90);Off(OUT_AC); go;Wait(15); left;Wait(90);Off(OUT_AC); down; go;Wait(20);//「公」三画目前半 up; go;Wait(60); right;Wait(55);Off(OUT_AC); back;Wait(35); down; back;Wait(25);//「公」三画目後半 up; go;Wait(75); right;Wait(52);Off(OUT_AC); back;Wait(20); down; back;Wait(15);//「心」一画目 up; left;Wait(90);Off(OUT_AC); go;Wait(25); right;Wait(90);Off(OUT_AC); go;Wait(15); down; go;Wait(30);//「心」二画目 left;Wait(10);Off(OUT_AC); up; right;Wait(10);Off(OUT_AC); back;Wait(20); left;Wait(90);Off(OUT_AC); go;Wait(15); right;Wait(90);Off(OUT_AC); down; go;Wait(15);Off(OUT_AC);//「心」三画目 up; left;Wait(90);Off(OUT_AC); go;Wait(25); right;Wait(90);Off(OUT_AC); down; back;Wait(15);//「心」四画目 up; back;Wait(10); down; back;Wait(15);//「公」四画目 up; left;Wait(90);Off(OUT_AC); go;Wait(25); right;Wait(90);Off(OUT_AC); down; go;Wait(25);//「公」二画目 Off(OUT_AC); }
車体とペンを一体化してしまったことで、プログラムが多くなってしまったり方向転換が増えることで、ずれが大きくなってしまうので、ペンと車体は分離することが好ましかった。 何度も、繰り返しのプログラミング言語を利用する場面はあったのだが、利用しなかったためにプログラムが長くなり見づらくなってしまった。 書くたびに字体が変化し、書くことができないことやレポート上にアップした画像もきれいに線がつ ながっていないなど様々な問題点は残ってしまったが、なんとか読めるレベルまで持っていくことが できた。