[[2018a/Member]] #contents * 課題 [#p7a5139d] ** 書道ロボットの製作 [#fb6c75c9] 自分にゆかりのある場所の漢字2文字(10角以上)を書く。 ** 選んだ文字 [#x34f62be] 中洲 * 製作したロボット [#nf7a848c] 漢字を書くために作ったロボットは、座標系(X軸、Y軸、Z軸)を使用して制御した。 X軸方向はギア及び縦ギアを使用し、Y軸方向は車体を前後させることで動かし、Z軸方向はモーターの回転をプーリで伝え、平行四辺形の反対の辺を動かすことで制御した。また、X座標系、Y座標系はそれぞれを時間に換算して制御した。以下写真。 * 書き方[#p878c777] 「中」の字は真ん中の四角を一筆書きで書き、最後に真ん中の線を引いた。「洲」の字は先にさんずいの点上2つをfor文で右下がりになるように書き、下の点を右上がりになるように書いた。つぎに「州」の部分を書き順通りにかいた。 * プログラムの内容[#m4e6fb86] defineを利用して書くときに楽になるようにした。(defineで簡略化した内容は、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 以上が使用したdefineの内容になる。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 } 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++){ 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 } }