*目次 [#p29d7ff8]
#contents
*ロボット本体の説明 [#k9798d32]
**全体像 [#ycd6a7fe]
#ref(./s_DSCmfkjf_0129.JPG,全体像)
私たちのグループではプログラムをより簡単にするために、x軸y軸でペンを動かすロボットを組み立てた。そのために3つしかないモーターをx軸用、y軸用、ペンの上下用に使用した。
~今回、私は「前期」の「期」を担当した。下の写真が書いた字である。
#ref(./s_DSC_0136.JPG,全体像)
**台車 [#o3709025]
全体像の写真を見ての通り、右前側のペンが取り付けられているところが重くなるため、電池が入ったボックスを出来るだけ左後方に置きバランスをとるようにした。
**ペンの横移動 [#d28d9258]
レールはペンを左右に移動するためのものである。モーターにつながっている二つのタイヤと何もつながっていない2つのタイヤの4つのタイヤで構成されており、その上をアームが横移動する。その時にタイヤからずれたり落下しないように側面と上側にブロックを取り付けた。(下の写真では上側のブロックは外されている)
#ref(./s_DSCfkldfkl0135.JPG,50,arm)
**ペンの上げ下げ [#i3fc097c]
まずペンの固定はゴムで止めた。(写真上)また普通にギアを取り付けただけでは勢いよくペンが上下してぶっとんでしまうため、うまくギアを組み合わせて回転数を減らし上下運動をゆっくりさせた。下の写真はモーター部分の写真である。
#ref(./DSC_018.JPG,50,arm)
#ref(./s_D32.JPG,50,arm)
*プログラムの説明 [#h51302c2]
基本のペンの上下のプログラムと前後移動のプログラムを以下のように定義した。相方と共同でプログラムを作成したため、基本同じ定義がなされている。
#define PEN_TIME 100 //ペンを動かす時間
#define PEN_UP OnFwd(OUT_C);Wait(PEN_TIME);Off(OUT_C); //ペンを上げる動作
#define PEN_DOWN OnRev(OUT_C);Wait(PEN_TIME);Off(OUT_C);//ペンを下げる動作
#define FORWARD(FWD_TIME) OnFwd(OUT_A);Wait(FWD_TIME);Off(OUT_A);//前に移動するプログラム
#define BACK(back_time) OnRev(OUT_A);Wait(back_time);Off(OUT_A);//後ろに移動するプログラム
**其 [#d5b3ace5]
#define MIGIUE_GO(migiue_time) OnRev(OUT_B);OnFwd(OUT_A);Wait(migiue_time);Off(OUT_AB);//右上に移動するプログラム
#define NANAME_R PEN_DOWN;OnRev(OUT_AB);Wait(5);Off(OUT_AB);PEN_UP;//右の払いを描くプログラム
#define NANAME_L PEN_DOWN;OnFwd(OUT_A);OnRev(OUT_B);Wait(5);Off(OUT_AB);PEN_UP;//左払いを描くプログラム
sub HANOJI()//ハノ字を書くプログラム
{ NANAME_L;
OnRev(OUT_B);
Wait(5);
Off(OUT_B);
NANAME_R;
}
task main()
{
OnRev(OUT_B);
Wait(20);
Off(OUT_B); //始点に移動するプログラム
PEN_DOWN;
BACK(15);
PEN_UP; //赤�,離廛蹈哀薀�
OnFwd(OUT_B);
Wait(15);Off(OUT_B); //赤�△悵楾圓垢襯廛蹈哀薀�
PEN_DOWN;
FORWARD(15);
PEN_UP; //赤�△離廛蹈哀薀�
OnFwd(OUT_B);OnRev(OUT_A);
Wait(5);
Off(OUT_AB); //青�,飽榮阿垢襯廛蹈哀薀�
PEN_DOWN;
OnRev(OUT_B);
Wait(20);Off(OUT_B);
PEN_UP; //青�,離廛蹈哀薀�
OnFwd(OUT_B);OnRev(OUT_A);
Wait(5);
Off(OUT_AB); //青�△離廛蹈哀薀�
PEN_DOWN;
OnFwd(OUT_B);
Wait(10);
Off(OUT_B);
PEN_UP; //青��のプログラム
BACK(5); //青�い離廛蹈哀薀�
PEN_DOWN;
OnRev(OUT_B);
Wait(10);
Off(OUT_B);
PEN_UP; //青�イ離廛蹈哀薀�
OnRev(OUT_AB);
Wait(5);
Off(OUT_AB); //青�Δ離廛蹈哀薀�
PEN_DOWN;
OnFwd(OUT_B);
Wait(20);Off(OUT_B);
PEN_UP; //青�Г離廛蹈哀薀�
BACK(10); //青�┐離廛蹈哀薀�
HANOJI();//其のハの字を書くプログラム
MIGIUE_GO(20);//月の始点に移動するプログラム
}
#ref(./s_DSC_0155.JPG,全体像)
~書きはじめを右の縦棒からにしたので、のちに左側へ移動することを踏まえ可動域を超えないように調整するために、最初に左側へ移動する距離分をペンを右側へ移動させた。
~4本の横線は一筆書きのようにプログラムを組んだ。理由はそうしたほうがハノ字を書くときにプログラムを組みやすくなるからである。1つ目の横線から2つ目の横線、3つ目の横線から4つ目の横線へ移動するときはx軸とy軸の動きを連動させ斜め移動にした。
(プログラムの横の数字は写真の数字と対応している)
**月 [#l199736a]
void TSUKI (int t)
{
PEN_DOWN;
BACK(3*t);
PEN_UP; //月の1画目
OnRev(OUT_B);
Wait(t);
Off(OUT_B); //1画目の終点から2画目の始点
PEN_DOWN;
FORWARD(3*t);
PEN_UP; //2画目(下から上)
repeat(3) //3本の横線を書くプログラム
{
PEN_DOWN;
OnFwd(OUT_B);
Wait(t+1);Off(OUT_B);
PEN_UP; //横線を引くプログラム
OnRev(OUT_AB);
Wait(t);
Off(OUT_A);
Wait(1);
Off(OUT_B); //次の横線の始点に移動するプログラム
}
task main()
{
TSUKI(7) //月を描くプログラム
}
#ref(./s_DSC_0156.JPG,全体像)
月については「前」の月で作ったプログラムを使用した。同じ長さの横線が三本あるので、repeatを用いて簡略化した。また「前」よりも月の字が小さくなってしまったためtの値を変更した。(其が小さくなってしまいサイズを合わせるため。)月の横棒の長さ(下の2本)がずれてしまったため、誤差を修正するための+1を加えた。
*反省点と感想 [#e52ae42f]
字がとてもふにゃっとしており(特に縦線)、出来があまりよくなかった。もうすこし篇を持つ部分を補強できればよくなったのではないかと思う。また其の部分をもうすこしプログラミングをきれいにできたらよかった。今回を踏まえて、次回はもっとよいものを作りたい。