書道ロボットを作り,自分にゆかりのある場所の漢字2文字(10角以上)を書く。
自分の地元の地名の「中洲」を選んだ.
全体像はこちら.
御覧のように,X,Y,Z軸を用いて動くようにした.なお,ギア比をなるべくX軸とY軸が同じになるように調整した.
ラックという部品を使って,モーターの回転運動を直線運動にして動かした.
車体を前後させることにより動かした.前後移動のみなのでモーターを一つ使用し,後輪のみを駆動させた.
モーターの回転をピン棒と中空棒(接合部品)でつないで回転をつなぎ,プーリによって平行四辺形の形を変えることでペンを上下させた.
実際に作ったもの
「中」の字は真ん中の四角を一筆書きで書き、最後に真ん中の線を引いた。「洲」の字は先にさんずいの点上2つをfor文で右下がりになるように書き、下の点を右上がりになるように書いた。つぎに「州」の部分を書き順通りにかいた。以下の図は色でプログラムの塊ごとに分けてある.
ペンの上げ下げを担うZ軸の制御は変更しやすくするためにマクロを使用して簡略化する.また,X軸方向とY軸方向のギア比がほぼ同じことを利用して,waitの時間を座標値に当てはめて制御する(下図参照).実際的には,現在の場所から何秒動くかという制御をしている.
マクロを利用して書くときに楽になるようにした。(マクロで簡略化した内容は、A,B,Cの正転・逆転の入出力、waitの表記及び時間になる。詳細は下記にて。)以下、使用したプログラムと解説。
#define A OnFwd(OUT_A); //前進 #define Ab OnRev(OUT_A); //後進 #define As Off(OUT_A); //停止 #define B OnFwd(OUT_B); //横移動 #define Bb OnRev(OUT_B); //横移動 #define Bs Off(OUT_B); //停止 #define PU OnFwd(OUT_C);Wait(50);Off(OUT_C); //ペン上げ #define PD OnRev(OUT_C);Wait(50);Off(OUT_C); //ペン下げ #define W Wait //Waitの略 #define Ta 50 //時間1 #define Tb 100 //時間2 #define Tc 25 //時間3 #define Td 13 //時間4
以上が使用したマクロの内容になる。C端子でペンの上げ下げをさせるため一括で制御して、PenUp、PenDown、の略語で表している。また、A、B端子の2端子はそれぞれY軸、X軸の制御にあたり、正転を無印、逆転をbackのb、停止をstopのsをつけて大文字と小文字の組み合わせで表した。簡略化のためにwaitはwを使って簡略化し、waitの時間はTa〜Tdを使用して制御がしやすいようにした。
task main() { PD //1文字目開始:一画目の四角形 A W(Ta); As B W(Tb); Bs Ab W(Ta); As Bb W(Tb); Bs PU //四角形終わり Ab //中心の縦の棒 W(Tc); As B W(Ta); Bs PD A W(Tb); As //1文字目終了
以上までが一文字目のプログラムになる。
PU //2文字目の位置合わせ開始 A W(Tc); As Bb W(Ta); Bs //位置合わせ完了
上のプログラムは、一文字目に重ねないために位置調整をするプログラムである。
int a=0; //2文字目開始 for(a=0;a<2;a++){ //aはループ用変数、さんずいの点上2つ PD A B W(Tc); As Bs PU A W(Td); As Bb W(Tc); Bs } //さんずいの上2点終わり A //さんずい最後の点開始 W(Tc); As PD Ab B W(Tc); As Bs PU //さんずい終わり
ここまでが、「洲」の字のさんずいを書くプログラムである。
Ab //位置合わせ開始 W(Tc*2+Td*2); As B W(Tc-Td); Bs //位置あわせ終了
上は、「州」の字を書き始めるために位置を調整するプログラムになる。
A //「州」開始 W(Tc); As PD A W(Ta); As PU Ab W(Ta+Tc); As B W(Td); Bs PD A W(Tb-Td); Bb W(Td); As Bs PU Ab W(Tb-Td/4); As B W(Td*2); Bs //ここまでが「州」の左側の「リ」の部分 for(a=2;a<4;a++){ //残りはfor文を使用してループさせて書く. A W(Tc); As PD A W(Ta); As PU Ab W(Ta+Tc); As B W(Td); Bs PD A W(Tb); As PU Ab W(Tb-Td/4); As B W(Td); Bs } } //完成!
XYZ型にするためにそれぞれにあったきこうを選ぶことができたので良かったと思う.時々ギアの関係でブロックがかみ合わず,タイやの大きさや本体の形を変更することを余儀なくされた.しかし,最終的にはバランスの良い形に収めることができたので良かった.
X軸とY軸のギア比をそろえたことが功を奏してうまく制御することができたのは良かった.しかし,最初に書いたプログラムでは,「洲」の字がなぜか座標を一定にしていたにもかかわらず,右肩上がりに書かれてしまった.しかし,「州」の字の位置を合わせるプログラムのwait時間を修正したらちゃんときれいに書いてくれたので良かった.また,マクロを使うことでとても書くことが簡単になったので良かった.