書道ロボットの製作
今回のロボットはX軸・Y軸・Z軸ををそれぞれ前後・左右・ペンの上下と決めて車体を製作した。
車体のメインになる場所なので、「より頑丈により安定的に」を目指した。
四角い形に作っていき、モータを囲うことで重心を中心に置くことで安定させることができた。
後にY軸と組み合わせたところ、Y軸が重く、重心がずれ車体が倒れてしまったので、RIS本体をX軸の上に乗せることでバランスを取り、倒れないように作り変えた。
Z軸を動かす機構なので、「安定」を目指した。
Z軸全体を乗せてスライドさせるために、平たく長い形にした。キャタピラを使うことでベルトコンベアのようにスムーズに横移動ができた。また、キャタピラを裏返して使うことで、Z軸が滑ってしまうなどの不要な動きを無くすことができた。
Y軸の上に乗るので、「小さく軽く」をめざした。
RISならではの平らなギアを使ってペンを上下に動くようにした。
今回ペンは筆ペンを使った。これにより筆圧やペンを下す位置を細かく決める必要がなくなった。ペンはゴムで留めたが、ある程度自由が効くように緩めに留めた。さらに写真を見るとわかるが、ペンの上に隙間をあけた。これによって、筆圧がかかり過ぎてもペンが力を逃がすようになっている。
Y軸の可動範囲を広くするために、Z軸の中に入れることにした。しかしペンが長く、車体に収まらなかった。なのでペンを切り半分以下の長さ(7cm)に加工した。
今回は地名というお題だったので「佐久」という字を書くことにした。
この字は左ハライが多いので、軸の方向を工夫した。これにより左ハライをdefineで置くことができた。
#define X_MAE OnFwd(OUT_A); //X軸を正の向きに動かす #define Y_MAE OnFwd(OUT_B); //Y軸を正の向きに動かす #define Z_SITA OnFwd(OUT_C);Wait(7);Off(OUT_C); //ペンを下ろす #define XY_MAE OnFwd(OUT_AB); //XとY軸を正の向きに動かす #define X_USI OnRev(OUT_A); //X軸を負の向きに動かす #define Y_USI OnRev(OUT_B); //Y軸を負の向きに動かす #define Z_UE OnRev(OUT_C);Wait(7);Off(OUT_C); //ペンを上げる #define W_TIME Wait(100); //1秒待つ
SetPower(OUT_A,3); SetPower(OUT_B,3); SetPower(OUT_C,3); //一画目 Y_MAE; //書き始めの位置へ Wait(18); //移動 Off(OUT_B); //x軸止める W_TIME; //1秒待つ Z_SITA; //ペンを下ろす、移動、止める W_TIME; //1秒待つ XY_MAE; //モータxyを前転 Wait(18); //書く Off(OUT_AB); //モータxyを止める W_TIME; //1秒待つ Z_UE; //ペンを上げる、待つ、止める W_TIME;
X_USI; //二画目 Wait(6); Off(OUT_A); W_TIME; //1秒待つ Y_USI; //Y軸移動 Wait(6); Off(OUT_B); W_TIME; //一秒待つ Z_SITA; //ペンヲ下す W_TIME; //一秒待つ X_MAE; //x軸移動 Wait(18); Off(OUT_A); W_TIME; //一秒待つ Z_UE; //ペンを上げる W_TIME; //一秒待つ
X_USI; //三画目 Wait(18); Off(OUT_A); W_TIME; //一秒待つ Y_USI; //Y軸移動 Wait(5); Off(OUT_B); W_TIME; //一秒待つ Z_SITA; //ペンを下げる W_TIME; //一秒待つ Y_USI; //Y軸移動 Wait(18); Off(OUT_B); W_TIME; //一秒待つ Z_UE; //ペンを上げる W_TIME; //一秒待つ
X_USI; //四画目 Wait(5); Off(OUT_A); W_TIME; //一秒待つ Y_MAE; //Y軸移動 Wait(5); Off(OUT_B); W_TIME; //一秒待つ Z_SITA; //ペンを下げる W_TIME; //一秒待つ XY_MAE; //XY軸移動 Wait(13); Off(OUT_AB); W_TIME; //一秒待つ
Y_USI; //五画目 Wait(18); Off(OUT_B); W_TIME; //一秒待つ Z_UE; //ペンを上げる W_TIME; //一秒待つ
Y_MAE; //六画目 Wait(9); Off(OUT_B); W_TIME; //一秒待つ Z_SITA; //ペンを下げる W_TIME; //一秒待つ X_MAE; //X軸移動 Wait(9); Off(OUT_A); W_TIME; //一秒待つ Z_UE; //ペンを上げる W_TIME; //一秒待つ
Y_MAE; //七画目 Wait(9); Off(OUT_B); W_TIME; //一秒待つ Z_SITA; //ペンを下げる W_TIME; //一秒待つ Y_USI; //Y軸移動 Wait(18); Off(OUT_B); W_TIME; //一秒待つ Z_UE; //ペンを上げる W_TIME; //一秒待つ
XY_MAE; //一画目 Wait(5); Off(OUT_AB); W_TIME; //一秒待つ Z_SITA; //ペンを下げる W_TIME; //一秒待つ XY_MAE; //XY軸移動 Wait(13); Off(OUT_AB); W_TIME; //一秒待つ Z_UE; //ペンを上げる W_TIME; //一秒待つ
X_USI; //二画目(1) Wait(9); Off(OUT_A); W_TIME; //一秒待つ Y_USI; //Y軸移動 Wait(9); Off(OUT_B); W_TIME; //一秒待つ Z_SITA; //ペンを下げる W_TIME; //一秒待つ Y_USI; //Y軸移動 Wait(13); Off(OUT_B); W_TIME; //一秒待つ
XY_MAE; //二画目(2) Wait(20); Off(OUT_AB); W_TIME; //一秒待つ Z_UE; //ペンを上げる W_TIME; //一秒待つ
X_USI; //三画目 Wait(13); Off(OUT_A); W_TIME; //一秒待つ Y_USI; //Y軸移動 Wait(13); Off(OUT_B); W_TIME; //一秒待つ Z_SITA; //ペンを下げる W_TIME; //一秒待つ X_MAE; //x軸移動 Wait(13); Y_USI; //Y軸移動 Wait(13); Off(OUT_AB); W_TIME; //一秒待つ Z_UE; //ペンを上げる
#define X_MAE OnFwd(OUT_A); #define Y_MAE OnFwd(OUT_B); #define Z_SITA OnFwd(OUT_C);Wait(7);Off(OUT_C); #define XY_MAE OnFwd(OUT_AB); #define X_USI OnRev(OUT_A); #define Y_USI OnRev(OUT_B); #define Z_UE OnRev(OUT_C);Wait(7);Off(OUT_C); #define W_TIME Wait(100);
task main(){ SetPower(OUT_A,3); SetPower(OUT_B,3); SetPower(OUT_C,3); Y_MAE; //書き始めの位置へ Wait(18); //移動 Off(OUT_B); //x軸止める W_TIME; Z_SITA; //ペンを下ろす、移動、止める W_TIME; XY_MAE; //モータxyを前転 Wait(18); //書く Off(OUT_AB); //モータxyを止める W_TIME; Z_UE; //ペンを上げる、待つ、止める W_TIME; X_USI; Wait(6); //二画目 Off(OUT_A); W_TIME; Y_USI; Wait(6); Off(OUT_B); W_TIME; Z_SITA; W_TIME; X_MAE; Wait(18); Off(OUT_A); W_TIME; Z_UE; W_TIME; X_USI; //三画目 Wait(18); Off(OUT_A); W_TIME; Y_USI; Wait(5); Off(OUT_B); W_TIME; Z_SITA; W_TIME; Y_USI; Wait(18); Off(OUT_B); W_TIME; Z_UE; W_TIME; X_USI; //四画目 Wait(5); Off(OUT_A); W_TIME; Y_MAE; Wait(5); Off(OUT_B); W_TIME; Z_SITA; W_TIME; XY_MAE; Wait(13); Off(OUT_AB); W_TIME; Y_USI; //五画目 Wait(18); Off(OUT_B); W_TIME; Z_UE; W_TIME; Y_MAE; //六画目 Wait(9); Off(OUT_B); W_TIME; Z_SITA; W_TIME; X_MAE; Wait(9); Off(OUT_A); W_TIME; Z_UE; W_TIME; Y_MAE; //七画目 Wait(9); Off(OUT_B); W_TIME; Z_SITA; W_TIME; Y_USI; Wait(18); Off(OUT_B); W_TIME; Z_UE; W_TIME;
XY_MAE; //一画目 Wait(5); Off(OUT_AB); W_TIME; Z_SITA; W_TIME; XY_MAE; Wait(13); Off(OUT_AB); W_TIME; Z_UE; W_TIME; X_USI; //二画目(1) Wait(9); Off(OUT_A); W_TIME; Y_USI; Wait(9); Off(OUT_B); W_TIME; Z_SITA; W_TIME; Y_USI; Wait(13); Off(OUT_B); W_TIME; XY_MAE; //二画目(2) Wait(20); Off(OUT_AB); W_TIME; Z_UE; W_TIME; X_USI; //三画目 Wait(13); Off(OUT_A); W_TIME; Y_USI; Wait(13); Off(OUT_B); W_TIME; Z_SITA; W_TIME; X_MAE; Wait(13); Y_USI; Wait(13); Off(OUT_AB); W_TIME; Z_UE; }
文字を書くことはできたが、誰が見ても読めるようなクオリティの字を書くことはできなかった。
原因として、X軸の製作時にパーツを多く使いすぎてしまい、別の場所でちょうど良い部品を使えず、あり合わせの部品での製作となり、安定性が欠けてしまった。 Y軸のギアに力がかかりすぎたことでギアが外れてしまうということが起きた。これによりY軸方向の動きが鈍くなり、うまく書くことができなかった。