ロボットの全体図
ロボットの構造は大きく分けると以下のようになる。
紙を押し出すロボット
ペンを動かすロボット
これら二つのロボットを別々に動かし、文字を書く。紙を押し出すロボットの上にレールの役割を果たすレゴブロックがあり、その上をペンを持ったロボットが走るという仕組みになっている。
このアイデアは、プリンターの構造がヒントとなった。
また、ロボットの移動の時など、反動でペンが意図しない向きに動き、文字がずれてしまうことを防ぐため、地面平行な向きに対してはペンが動かないように固定し、垂直方向への動きしかできないようにした。
モーターを使って、ペンを垂直方向へ動かすのはたいへんだった。写真から分かるように、ギアを組み合わせてその動きができるように調整した。
OnRev(OUT_B,20); OnFwd(OUT_C,10); Wait(800); Off(OUT_BC); up; //ペンを上げる down; //ペンを下げる OnRev(OUT_B,20); OnRev(OUT_C,10); Wait(800); Off(OUT_BC); up; //ペンを上げる
これらの一連のプログラムによって、「金」の屋根の部分を書き上げる。このロボットはx軸、y軸の方向に対しては一つのモーターだけで動かすことができるが、金のような斜め線がある漢字の場合、2つのモーターを、ベクトルの合成をする要領で同時に動かす必要がある。
down; //ペンを下げる OnRev(OUT_B,20); OnRev(OUT_C,10); Wait(400); Off(OUT_BC); up; //ペンを上げる
down; //ペンを下げる OnRev(OUT_B,20); OnFwd(OUT_C,10); Wait(400); Off(OUT_BC); up; //ペンを上げる
上記2つのプログラムは、「金」の点の部分を書くプログラムです。
#define SPEED 20 #define up OnFwd(OUT_A,80);Wait(200);Off(OUT_A); //ペンを上げる #define down OnRev(OUT_A,80);Wait(210);Off(OUT_A); //ペンを下げる task main() { OnRev(OUT_B,20); OnFwd(OUT_C,10); Wait(800); Off(OUT_BC); up; down; OnRev(OUT_B,20); OnRev(OUT_C,10); Wait(800); Off(OUT_BC); up; OnFwd(OUT_B,SPEED); Wait(300); Off(OUT_B); down; OnFwd(OUT_B,SPEED); Wait(800); Off(OUT_B); up; OnRev(OUT_B,SPEED); Wait(500); Off(OUT_B); down; OnRev(OUT_C,SPEED); Wait(500); Off(OUT_C); up; OnFwd(OUT_C,SPEED); Wait(333); Off(OUT_C); OnRev(OUT_B,SPEED); Wait(400); Off(OUT_B); down; OnFwd(OUT_B,SPEED); Wait(800); Off(OUT_B); up; OnRev(OUT_C,SPEED); Wait(333); Off(OUT_C); down; OnRev(OUT_B,SPEED); Wait(900); Off(OUT_B); up; OnFwd(OUT_B,SPEED); Wait(900); Off(OUT_B); OnFwd(OUT_C,SPEED); Wait(170); Off(OUT_C); down; OnRev(OUT_B,20); OnRev(OUT_C,10); Wait(400); Off(OUT_BC); up; OnRev(OUT_B,SPEED); Wait(300); Off(OUT_B); down; OnRev(OUT_B,20); OnFwd(OUT_C,10); Wait(400); Off(OUT_BC); up; }
成功したこともありましたが、本番においては、微調整がうまくいかず、失敗してしまいました。 写真は成功した時のものです。
最初の筆の置き方を失敗するとうまく書けずに、ずれてしまう。本番の時、ペンを置く位置や、わずかな紙のくせ、電池の電圧低下など、様々な要因によって、失敗してしまうということが分かった。 そういった小さな要因でも結果が変わらない、あるいはその要因一つ一つを改善していくことが必要だと感じました。 また、ロボットを作る時にプログラムを工夫するのはもちろんですが、ロボットの機械本体に工夫をこらすことで、ソフトを簡単にすることも、様々な動きを可能にするとういこともできるのだなと思いました。