- 追加された行はこの色です。
- 削除された行はこの色です。
[[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
}
}