写真のとおりヒトの腕に見立てたロボットを組み立てた。
モーターはそれぞれ
ロボット本体は据え置きでアームの動きだけで書くところへ移動できる。
書ける範囲は限られるが手首と肘の動きの組み合わせで直線も曲線もしっかりと書くことができる。
・肘のモーターの下にタイヤを寝かせて付けることでモーターを動かしてもずれないようにした。
・ペンは円運動で上げ下げするのでペン先を引きずらないようストッパーを取り付けた。
#define up_pen OnRev(OUT_A,10);Wait(700);Off(OUT_A); //ペンを上げる #define down_pen OnFwd(OUT_A,10);Wait(800);Off(OUT_A); //ペンを下げる #define turn_left_b(t) OnRev(OUT_B,20);Wait(t);Off(OUT_B); //手首を左 #define turn_right_b(t) OnFwd(OUT_B,20);Wait(t);Off(OUT_B); //手首を右 #define turn_left_c(t) OnFwd(OUT_C,25);Wait(t);Off(OUT_C); //肘を左 #define turn_right_c(t) OnRev(OUT_C,25);Wait(t);Off(OUT_C); //肘を右 #define all_off Off(OUT_ABC);Wait(1800); //モーターを止め静止 task main () { turn_left_b(900); turn_right_c(200); down_pen; all_off; //最初の位置へ向かう OnRev(OUT_B,20); OnRev(OUT_C,25); Wait(250); all_off; //1 up_pen; turn_left_c(100); down_pen; all_off; //2へ向かう OnRev(OUT_B,20); OnRev(OUT_C,25); Wait(200); all_off; //2 up_pen; turn_left_b(600); turn_left_c(100); down_pen; all_off; //3へ向かう OnFwd(OUT_B,25); OnRev(OUT_C,20); Wait(300); all_off; //3 up_pen; turn_right_b(300); turn_left_c(100) down_pen; all_off; //4へ向かう OnFwd(OUT_B,20); OnRev(OUT_C,20); Wait(400); all_off; //4 OnRev(OUT_B,18); OnRev(OUT_C,25); Wait(650); all_off; //5 OnRev(OUT_B,21); OnFwd(OUT_C,25); Wait(200); Off(OUT_B); Wait(50); all_off; //6 OnFwd(OUT_B,25); OnFwd(OUT_C,20); Wait(250); all_off; //7 up_pen; OnRev(OUT_B,18); OnRev(OUT_C,18); Wait(150); all_off; down_pen; all_off; //8へ向かう OnFwd(OUT_B,14); OnRev(OUT_C,20); Wait(550); all_off; //8 up_pen; OnRev(OUT_B,18); OnRev(OUT_C,20); Wait(500); all_off; down_pen; all_off; //9へ向かう OnRev(OUT_B,17); OnRev(OUT_C,18); //9 Wait(400); all_off; up_pen; turn_right_b(100) turn_left_c(100) down_pen; all_off; //10へ向かう OnRev(OUT_B,20); OnRev(OUT_C,20); Wait(180); all_off; //10 up_pen; turn_right_b(200); turn_right_c(200); down_pen; all_off; //11へ向かう OnRev(OUT_B,15); OnRev(OUT_C,20); Wait(330); all_off; //11 up_pen; turn_left_b(100) turn_left_c(200) down_pen; all_off; //12へ向かう OnFwd(OUT_B,18); OnRev(OUT_C,30); Wait(270); all_off; //12 up_pen; turn_left_b(200) turn_left_c(100) down_pen; all_off; //13へ向かう OnRev(OUT_B,20); Wait(600); all_off; //13 up_pen; OnFwd(OUT_B,13); OnRev(OUT_C,17); Wait(400); all_off; down_pen; all_off; //14へ向かう OnRev(OUT_B,17); OnRev(OUT_C,25); Wait(600); all_off; //14 OnFwd(OUT_B,15); OnRev(OUT_C,20); Wait(400); all_off; //15 OnFwd(OUT_B,20); OnFwd(OUT_C,20); Wait(100); all_off; //16 }
書き順は下の写真の通りである。
肘と手首のモーターを動かす向きと大きさを把握するために下の写真のものを使った。
簡単にアームを再現したものである。 穴に鉛筆を差して字を書くことでモーターを動かす数値をある程度決めることができた。
肘と手首のモーターの動かす向き、大きさ、時間の組み合わせのバリエーションがとても多いのでマクロは使わなかった。
ペンを上げているときは肘と手首を同時に動かす必要はないのでマクロを利用した。
完成した「滉」
数値は同じでもペンを降ろす場所によって描く線が変わるので調整に時間がかかった。
マクロやサブルーチンをあまり使えなかった。変数を使えばできるのではないかと考えたので利用してみたかった。