書道ロボット「木」、「水」の作成
・四画以上の漢字を書く
・書き順を守る
・ペン以外キットに含まれているものだけでつくる
・ゴムは切れやすく高価なため丁寧に扱う
前方から見た図、黄色のパーツの間にゴムでペンを固定
アームを下げたとき アームを上げたとき
前後にペンを動かすことにより、人の腕に近い角度で字を書くことができるようにした。欠点としてはペンをマシンの中心で上下させるロボットに比べ、ブレが大きく、時間の調整が大変だった。タイヤを近づけることにより小回りがきくようにした。
・初期はアームを左右に動かすようにしていたが、前後の方がペンのずれが小さいのでそのように変えた。
・輪ゴムを1本ではなく複数クロスさせることによりペンをより強く固定できた。
・不要な部品を極力減らすことにより、モーターに負荷をかけさせず誤差を少なくした。
・アームが上がっているときに見える緑のパーツにより、ペンの角度が垂直になるよう調整できた。
・前輪が紙を巻き込むことが判明したため実際は写真とタイヤの前後を変えました。
木を書き順通りに書きます。移動はその場で回転したあと、直進するようにしました。
#define PEN_TIME 20 //ペンを上げている時間 sub pendown() //ペンを下ろす { OnFwd(OUT_B); Wait(20); Off(OUT_B); } sub penup() //ペンを上げる { OnRev(OUT_B); Wait(20); Off(OUT_B); } sub turn_right() //方向転換 { OnFwd(OUT_A); OnRev(OUT_C); } task main() { SetPower(OUT_B,2); //モーターB、ペンの上下機構の出力を2に設定 pendown(); //1画目「ー」部分 turn_right(); Wait(130); Off(OUT_A+OUT_C); penup(); OnFwd(OUT_A+OUT_C); //線を書かずに2画目「|」へと移動 Wait(120); turn_right(); Wait(150); OnFwd(OUT_A+OUT_C); Wait(170); Off(OUT_A+OUT_C); pendown(); //2画目 turn_right(); Wait(220); Off(OUT_A+OUT_C); penup(); turn_right(); //線を書かずに後退、3画目「/」へと移動 Wait(184); Off(OUT_A+OUT_C); turn_right(); Wait(180); OnRev(OUT_A+OUT_C); Wait(145); pendown(); //3画目「/」 turn_right(); Wait(100); Off(OUT_A+OUT_C); penup(); OnRev(OUT_A+OUT_C); //ペンを上げ、次の4画目「\」のため向きを変える Wait(177); Off(OUT_A+OUT_C); turn_right(); Wait(130); OnFwd(OUT_A+OUT_C); Wait(97); pendown(); //4画目「\」 turn_right(); Wait(100); Off(OUT_A+OUT_C); penup(); //ペンを持ち上げて終了「木」完成 }
#define PEN_TIME 20 //ペンを上げている時間 sub pendown() //ペンを下ろす { OnFwd(OUT_B); Wait(20); Off(OUT_B); } sub penup() //ペンを上げる { OnRev(OUT_B); Wait(20); Off(OUT_B); } sub turn_right() //方向転換 { OnFwd(OUT_A); OnRev(OUT_C); } task main() { SetPower(OUT_B,2); //モーターB、ペンの上下機構の出力を2に設定 pendown(); //1画目「ー」部分 turn_right(); Wait(60); Off(OUT_A+OUT_C); turn_right(); //線を書かずに2画目「|」へと移動 Wait(50); turn_right(); Wait(150); OnFwd(OUT_A+OUT_C); Wait(170); Off(OUT_A+OUT_C); pendown(); //2画目 turn_right(); Wait(220); Off(OUT_A+OUT_C); penup(); turn_right(); //線を書かずに後退、3画目「/」へと移動 Wait(184); Off(OUT_A+OUT_C); turn_right(); Wait(180); OnRev(OUT_A+OUT_C); Wait(145); pendown(); //3画目「/」 turn_right(); Wait(100); Off(OUT_A+OUT_C); penup(); OnRev(OUT_A+OUT_C); //ペンを上げ、次の4画目「\」のため向きを変える Wait(177); Off(OUT_A+OUT_C); turn_right(); Wait(130); OnFwd(OUT_A+OUT_C); Wait(97); pendown(); //4画目「\」 turn_right(); Wait(100); Off(OUT_A+OUT_C); penup(); //ペンを持ち上げて終了「水」完成 }
時間が一つ一つの動きで異なるのでプログラムが長くなってしまった。しかしサブルーチンを使うことで、分量が減り全体として見やすくなった。またペンの動きが激しくなってしまったので、セットパワーでモーターの出力を変えた。
コメントをどうぞ [#ad6c3dfc]