2017a/Member/Kenty/Mission1
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2017a/Member]]
#contents
* 課題概要 [#t0945512]
課題1は、15cm四方の中に「松本での新生活を表す漢字...
~ 詳しくは[[2017a/Mission1]]を参照。
** 選んだ漢字 [#uf147406]
大学生になり、自由な時間が多くなる分、自分で自分の生活...
~ 書き順は次のようにした。これは後でするプログラムの説明...
#ref(./「律」書き順.png,50%,書き順と形)
書き順が正しい書き順と違っているのは、4・5・6画目を...
* ロボット本体の説明 [#l8443962]
ロボットを組み立てるときにまず考えたことは、できるだけ...
~ そこで、旋回の動作を行わない機構を考えることにした。旋...
~ 以上のことから直線運動のみで字を書くことのできる機構に...
#ref(./ロボット全体.JPG,20%,ロボット全体)
** 車体部分 [#k0c22acf]
ロボット本体は前後移動のみで良いため、モータは1個とキ...
~ 初めは振動が大きいのではないかと不安もあったが、補助輪...
#ref(./キャタピラ.JPG,20%,キャタピラ部分)
** アーム・ペン保持部 [#b314981e]
アーム部分は、ピニオンギアとラックを使用して駆動させて...
*** アーム支え [#d0cd6752]
製作の途中で、アームが伸びてロボットから離れると先端の...
~ &ref(2017a/Member/Kenty/Mission1/アーム支え1.JPG,10%,...
&ref(2017a/Member/Kenty/Mission1/アーム支え2.JPG,10%,ア...
*** ギア部分 [#s70f2839]
ペンの上げ下げはモーターの回転をウォームギア(ギア比1:...
~ モータに関しては、【アーム全体】の写真で確認してほしい。
#ref(./ギア部.JPG,10%,ギア部分)
*** ペン保持部 [#j4af1ec0]
ペンはシンプルに輪ゴムで取り付けている。
#ref(./ペン保持部.JPG,30%,ペン保持部);
*** アーム全体 [#w3d38c6e]
&ref(2017a/Member/Kenty/Mission1/アーム.JPG,20%,アーム全...
* プログラム [#xa05481a]
プログラムについては、変数宣言・マクロ・サブルーチン、...
** 変数宣言・マクロ・サブルーチン[#f00b6555]
#define UD_TIME 100 //ペンの上げ下げのための時間(1秒)
int dif_y , dif_x; //現在の場所から次の場所までのX軸方向...
int leng_y , leng_x; //線の長さ(時間)
sub Set_RU() //ペンを書きはじめの位置にセット<右上>
{
OnFwd(OUT_A);
Wait(dif_y);
Off(OUT_A);
OnFwd(OUT_C);
Wait(dif_x);
Off(OUT_C);
}
sub Set_RD() //ペンを書きはじめの位置にセット<右下>
{
OnRev(OUT_A);
Wait(dif_y);
Off(OUT_A);
OnFwd(OUT_C);
Wait(dif_x);
Off(OUT_C);
}
sub Set_LU() //ペンを書きはじめの位置にセット<左上>
{
OnFwd(OUT_A);
Wait(dif_y);
Off(OUT_A);
OnRev(OUT_C);
Wait(dif_x);
Off(OUT_C);
}
sub Set_LD() //ペンを書きはじめの位置にセット<左下>
{
OnRev(OUT_A);
Wait(dif_y);
Off(OUT_A);
OnRev(OUT_C);
Wait(dif_x);
Off(OUT_C);
}
sub Pen_Up() //ペンを持ち上げる
{
OnRev(OUT_B);
Wait(UD_TIME);
Off(OUT_B);
}
sub Pen_Down() //ペンを下ろす
{
OnFwd(OUT_B);
Wait(UD_TIME);
Off(OUT_B);
}
sub Write_Line_Fwd() //線を引く:正方向(下→上、左→右)
{
OnRev(OUT_A);
Wait(leng_y);
Off(OUT_A);
OnFwd(OUT_C);
Wait(leng_x);
Off(OUT_C);
}
sub Write_Line_Rev() //線を引く:逆方向(上→下、右→左)
{
OnFwd(OUT_A);
Wait(leng_y);
Off(OUT_A);
OnRev(OUT_C);
Wait(leng_x);
Off(OUT_C);
}
グローバル変数とマクロに関しては、コメント文で説明でき...
~ サブルーチンに関しては大きく分けて3種類、全部で8個設定...
*** Set_RU()・Set_RD()・Set_LU()・Set_LD() [#l97f1441]
ペンを各線の書き始めの位置へ移動させる。移動する方向で...
*** Pen_Up()・Pen_Down() [#jd6d0f1f]
名前の通りペンの上げ下げを行うためのものである。UD_TIME...
*** Write_Line_Fwd()・Write_Line_Rev() [#z6079570]
線を引くためのものである。ロボットを初めに左下において...
** メインタスク [#i19640ec]
当たり前のことだが、漢字(他の文字もそうだが...)を書く...
~ ペンを持ち上げる→書き始めの位置・線の長さを指定→書き始...
~ 実際に使用したのは次のプログラムである。詳しい説明はプ...
task main()
{
int str_cnt=0; //画数
int i=0; //for文用変数
/*-----1画毎ループ 10回繰り返し-----*/
for(i=1;i<11;i++){
str_cnt++; //画数+1→次の画へ
/*-----ペンを持ち上げる 1・5・6画目以外-----*/
else if(str_cnt==2){ Pen_Down(); }
else if(str_cnt==3){ Pen_Down(); }
else if(str_cnt==4){ Pen_Down(); }
else if(str_cnt==7){ Pen_Down(); }
else if(str_cnt==8){ Pen_Down(); }
else if(str_cnt==9){ Pen_Down(); }
else if(str_cnt==10){ Pen_Down(); }
/*-----0.1秒待ち-----*/
Wait(10);
/*-----ペンセットの位置・線の長さを指定-----*/
if(str_cnt==1){
dif_x=20; dif_y=100;
leng_x=15; leng_y=15;
}
else if(str_cnt==2){
dif_x=15; dif_y=0;
leng_x=15; leng_y=15;
}
else if(str_cnt==3){
dif_x=10; dif_y=13;
leng_x=0; leng_y=90;
}
else if(str_cnt==4){
dif_x=30; dif_y=105;
leng_x=35; leng_y=0;
}
else if(str_cnt==5){
dif_x=0; dif_y=0;
leng_x=0; leng_y=40;
}
else if(str_cnt==6){
dif_x=0; dif_y=0;
leng_x=35; leng_y=0;
}
else if(str_cnt==7){
dif_x=15; dif_y=20;
leng_x=60; leng_y=0;
}
else if(str_cnt==8){
dif_x=40; dif_y=35;
leng_x=20; leng_y=0;
}
else if(str_cnt==9){
dif_x=35; dif_y=20;
leng_x=55; leng_y=0;
}
else if(str_cnt==10){
dif_x=28; dif_y=100;
leng_x=0; leng_y=120;
}
/*-----0.1秒待ち-----*/
Wait(10);
/*-----ペンをセット(書き始めの位置へ移動)-----*/
if(str_cnt==1){Set_RU();}
else if(str_cnt==2){Set_RD();}
else if(str_cnt==3){Set_RU();}
else if(str_cnt==4){Set_RU();}
else if(str_cnt==7){Set_LU();}
else if(str_cnt==8){Set_LD();}
else if(str_cnt==9){Set_LD();}
else if(str_cnt==10){Set_LU();}
/*-----0.1秒待ち-----*/
Wait(10);
/*-----ペンを下ろす(5・6画目はそのまま続けて書く)-...
if(str_cnt!=5){
if(str_cnt!=6){
Pen_Down();
}
}
/*-----0.1秒待ち-----*/
Wait(10);
/*-----線描画(1・2画目は斜め、6画目は直線(逆方向)...
if(str_cnt==1){
OnRev(OUT_A);
OnRev(OUT_C);
Wait(leng_x);
Off(OUT_AC);
}
else if(str_cnt==2){
OnRev(OUT_A);
OnRev(OUT_C);
Wait(leng_x);
Off(OUT_AC);
}
else if(str_cnt==6){ Write_Line_Rev(); }
else{ Write_Line_Fwd(); }
/*-----0.1秒待ち-----*/
Wait(10);
} //end for
Pen_Up(); //最後にペンを持ち上げて終了
} //end main
~ テキストには載っていなかったが、自分で調べてfor文も使...
~ for文で1周するたびに変数“str_cnt”に+1することで画数...
~ また、【選んだ漢字】のところでも説明しているが、4・5...
* 考察 [#h1addc95]
** 実際にロボットで書いた漢字「律」 [#rfbb2915]
#ref(./漢字「律」.JPG,20%,実際に書いた字)
全体的にはバランス良く字が書けているように思うが、行人...
~ また、偏と旁が上下にずれてしまっているのだが、これは斜...
* 感想 [#cdec8edc]
問題として解決せずに残ってしまった点や反省点もいくつか...
~ 今回の課題で製作のコツも少しずつだが分かってきたように...
終了行:
[[2017a/Member]]
#contents
* 課題概要 [#t0945512]
課題1は、15cm四方の中に「松本での新生活を表す漢字...
~ 詳しくは[[2017a/Mission1]]を参照。
** 選んだ漢字 [#uf147406]
大学生になり、自由な時間が多くなる分、自分で自分の生活...
~ 書き順は次のようにした。これは後でするプログラムの説明...
#ref(./「律」書き順.png,50%,書き順と形)
書き順が正しい書き順と違っているのは、4・5・6画目を...
* ロボット本体の説明 [#l8443962]
ロボットを組み立てるときにまず考えたことは、できるだけ...
~ そこで、旋回の動作を行わない機構を考えることにした。旋...
~ 以上のことから直線運動のみで字を書くことのできる機構に...
#ref(./ロボット全体.JPG,20%,ロボット全体)
** 車体部分 [#k0c22acf]
ロボット本体は前後移動のみで良いため、モータは1個とキ...
~ 初めは振動が大きいのではないかと不安もあったが、補助輪...
#ref(./キャタピラ.JPG,20%,キャタピラ部分)
** アーム・ペン保持部 [#b314981e]
アーム部分は、ピニオンギアとラックを使用して駆動させて...
*** アーム支え [#d0cd6752]
製作の途中で、アームが伸びてロボットから離れると先端の...
~ &ref(2017a/Member/Kenty/Mission1/アーム支え1.JPG,10%,...
&ref(2017a/Member/Kenty/Mission1/アーム支え2.JPG,10%,ア...
*** ギア部分 [#s70f2839]
ペンの上げ下げはモーターの回転をウォームギア(ギア比1:...
~ モータに関しては、【アーム全体】の写真で確認してほしい。
#ref(./ギア部.JPG,10%,ギア部分)
*** ペン保持部 [#j4af1ec0]
ペンはシンプルに輪ゴムで取り付けている。
#ref(./ペン保持部.JPG,30%,ペン保持部);
*** アーム全体 [#w3d38c6e]
&ref(2017a/Member/Kenty/Mission1/アーム.JPG,20%,アーム全...
* プログラム [#xa05481a]
プログラムについては、変数宣言・マクロ・サブルーチン、...
** 変数宣言・マクロ・サブルーチン[#f00b6555]
#define UD_TIME 100 //ペンの上げ下げのための時間(1秒)
int dif_y , dif_x; //現在の場所から次の場所までのX軸方向...
int leng_y , leng_x; //線の長さ(時間)
sub Set_RU() //ペンを書きはじめの位置にセット<右上>
{
OnFwd(OUT_A);
Wait(dif_y);
Off(OUT_A);
OnFwd(OUT_C);
Wait(dif_x);
Off(OUT_C);
}
sub Set_RD() //ペンを書きはじめの位置にセット<右下>
{
OnRev(OUT_A);
Wait(dif_y);
Off(OUT_A);
OnFwd(OUT_C);
Wait(dif_x);
Off(OUT_C);
}
sub Set_LU() //ペンを書きはじめの位置にセット<左上>
{
OnFwd(OUT_A);
Wait(dif_y);
Off(OUT_A);
OnRev(OUT_C);
Wait(dif_x);
Off(OUT_C);
}
sub Set_LD() //ペンを書きはじめの位置にセット<左下>
{
OnRev(OUT_A);
Wait(dif_y);
Off(OUT_A);
OnRev(OUT_C);
Wait(dif_x);
Off(OUT_C);
}
sub Pen_Up() //ペンを持ち上げる
{
OnRev(OUT_B);
Wait(UD_TIME);
Off(OUT_B);
}
sub Pen_Down() //ペンを下ろす
{
OnFwd(OUT_B);
Wait(UD_TIME);
Off(OUT_B);
}
sub Write_Line_Fwd() //線を引く:正方向(下→上、左→右)
{
OnRev(OUT_A);
Wait(leng_y);
Off(OUT_A);
OnFwd(OUT_C);
Wait(leng_x);
Off(OUT_C);
}
sub Write_Line_Rev() //線を引く:逆方向(上→下、右→左)
{
OnFwd(OUT_A);
Wait(leng_y);
Off(OUT_A);
OnRev(OUT_C);
Wait(leng_x);
Off(OUT_C);
}
グローバル変数とマクロに関しては、コメント文で説明でき...
~ サブルーチンに関しては大きく分けて3種類、全部で8個設定...
*** Set_RU()・Set_RD()・Set_LU()・Set_LD() [#l97f1441]
ペンを各線の書き始めの位置へ移動させる。移動する方向で...
*** Pen_Up()・Pen_Down() [#jd6d0f1f]
名前の通りペンの上げ下げを行うためのものである。UD_TIME...
*** Write_Line_Fwd()・Write_Line_Rev() [#z6079570]
線を引くためのものである。ロボットを初めに左下において...
** メインタスク [#i19640ec]
当たり前のことだが、漢字(他の文字もそうだが...)を書く...
~ ペンを持ち上げる→書き始めの位置・線の長さを指定→書き始...
~ 実際に使用したのは次のプログラムである。詳しい説明はプ...
task main()
{
int str_cnt=0; //画数
int i=0; //for文用変数
/*-----1画毎ループ 10回繰り返し-----*/
for(i=1;i<11;i++){
str_cnt++; //画数+1→次の画へ
/*-----ペンを持ち上げる 1・5・6画目以外-----*/
else if(str_cnt==2){ Pen_Down(); }
else if(str_cnt==3){ Pen_Down(); }
else if(str_cnt==4){ Pen_Down(); }
else if(str_cnt==7){ Pen_Down(); }
else if(str_cnt==8){ Pen_Down(); }
else if(str_cnt==9){ Pen_Down(); }
else if(str_cnt==10){ Pen_Down(); }
/*-----0.1秒待ち-----*/
Wait(10);
/*-----ペンセットの位置・線の長さを指定-----*/
if(str_cnt==1){
dif_x=20; dif_y=100;
leng_x=15; leng_y=15;
}
else if(str_cnt==2){
dif_x=15; dif_y=0;
leng_x=15; leng_y=15;
}
else if(str_cnt==3){
dif_x=10; dif_y=13;
leng_x=0; leng_y=90;
}
else if(str_cnt==4){
dif_x=30; dif_y=105;
leng_x=35; leng_y=0;
}
else if(str_cnt==5){
dif_x=0; dif_y=0;
leng_x=0; leng_y=40;
}
else if(str_cnt==6){
dif_x=0; dif_y=0;
leng_x=35; leng_y=0;
}
else if(str_cnt==7){
dif_x=15; dif_y=20;
leng_x=60; leng_y=0;
}
else if(str_cnt==8){
dif_x=40; dif_y=35;
leng_x=20; leng_y=0;
}
else if(str_cnt==9){
dif_x=35; dif_y=20;
leng_x=55; leng_y=0;
}
else if(str_cnt==10){
dif_x=28; dif_y=100;
leng_x=0; leng_y=120;
}
/*-----0.1秒待ち-----*/
Wait(10);
/*-----ペンをセット(書き始めの位置へ移動)-----*/
if(str_cnt==1){Set_RU();}
else if(str_cnt==2){Set_RD();}
else if(str_cnt==3){Set_RU();}
else if(str_cnt==4){Set_RU();}
else if(str_cnt==7){Set_LU();}
else if(str_cnt==8){Set_LD();}
else if(str_cnt==9){Set_LD();}
else if(str_cnt==10){Set_LU();}
/*-----0.1秒待ち-----*/
Wait(10);
/*-----ペンを下ろす(5・6画目はそのまま続けて書く)-...
if(str_cnt!=5){
if(str_cnt!=6){
Pen_Down();
}
}
/*-----0.1秒待ち-----*/
Wait(10);
/*-----線描画(1・2画目は斜め、6画目は直線(逆方向)...
if(str_cnt==1){
OnRev(OUT_A);
OnRev(OUT_C);
Wait(leng_x);
Off(OUT_AC);
}
else if(str_cnt==2){
OnRev(OUT_A);
OnRev(OUT_C);
Wait(leng_x);
Off(OUT_AC);
}
else if(str_cnt==6){ Write_Line_Rev(); }
else{ Write_Line_Fwd(); }
/*-----0.1秒待ち-----*/
Wait(10);
} //end for
Pen_Up(); //最後にペンを持ち上げて終了
} //end main
~ テキストには載っていなかったが、自分で調べてfor文も使...
~ for文で1周するたびに変数“str_cnt”に+1することで画数...
~ また、【選んだ漢字】のところでも説明しているが、4・5...
* 考察 [#h1addc95]
** 実際にロボットで書いた漢字「律」 [#rfbb2915]
#ref(./漢字「律」.JPG,20%,実際に書いた字)
全体的にはバランス良く字が書けているように思うが、行人...
~ また、偏と旁が上下にずれてしまっているのだが、これは斜...
* 感想 [#cdec8edc]
問題として解決せずに残ってしまった点や反省点もいくつか...
~ 今回の課題で製作のコツも少しずつだが分かってきたように...
ページ名: