目次
#contents
*ロボットの概要 [#q5187ea5]
**ロボットの選択 [#ib04f6a0]
今回選択した文字は「日体」という文字を書くものを選択した。またロボットは三輪タイヤのものを選択した。~
**ロボットのつくり [#w3c2b2fa]
#ref(image1.jpeg)
ロボットは基本形の三輪型にペンを上げ下げするためのアームを付けたシンプルなものになった。~
またアームの部分は書いている最中ペンがぶれないよう両側から挟み込む形で固定した。~
#ref(image3.png)
上の図の�,任禄颪�とき少しペン先がぐらつくが、�△覆蕕弌⊇颪�ときは下がりながらのため滑らかに書けるようになっている。よって今回のロボットでは�△諒�法で書く方を採用している。
*日体を書くプログラム [#h3913291]
**基本プログラム [#mc53c1c3]
文字を正確に書くためには真っ直ぐな移動が要求される。しかし左右のモーターの速さを同じにしてしまうと直線の移動ができない。そのため、まずは何回かの試行によって直線移動のプログラムを作り、以下のように定義した。
#define btyoku OnRev(OUT_B,55);OnRev(OUT_C,50);Wait(????);Off(OUT_BC);//後進
#define mtyoku OnFwd(OUT_B,55);OnFwd(OUT_C,50);Wait(????);Off(OUT_BC);//前進
※(????)には今後文字を書く上で必要な任意の値が入る。~
また直角に曲がるプログラムも左回りと右回りの両回転も以下のように定義した。
#define kaiten90r OnFwd(OUT_C,50);OnRev(OUT_B,50);Wait(420);Off(OUT_BC);//右回り
#define kaiten90l OnFwd(OUT_B,50);OnRev(OUT_C,50);Wait(420);Off(OUT_BC);//左回り
ペンを上げ下げする動作は以下のように定義した。ただし、ペンを上げる動きをする前に1秒のインターバルを設け、機体の動きが完全停止した後にペンを上げられるように工夫した。
#define down OnFwd(OUT_A,22);Wait(250);Off(OUT_A);
#define up Wait(1000);OnRev(OUT_A,19);Wait(400);Off(OUT_A);
**「日」を書くプログラム [#l93306a4]
日を書くプログラムを以下のように制作した。タイヤ部分とペン先とが離れているためその場で回転しても前の動作でペンを上げた位置に戻らない。よって次の画に入るための移動が必要になった。
#define down OnFwd(OUT_A,22);Wait(250);Off(OUT_A);
#define up Wait(1000);OnRev(OUT_A,19);Wait(400);Off(OUT_A);
#define kaiten90r OnFwd(OUT_C,50);OnRev(OUT_B,50);Wait(420);Off(OUT_BC);
#define kaiten90l OnFwd(OUT_B,50);OnRev(OUT_C,50);Wait(420);Off(OUT_BC);
#define btyoku1 OnRev(OUT_B,55);OnRev(OUT_C,50);Wait(150);Off(OUT_BC);
#define btyoku2 OnRev(OUT_B,55);OnRev(OUT_C,50);Wait(660);Off(OUT_BC);
#define btyoku3 OnRev(OUT_B,55);OnRev(OUT_C,50);Wait(250);Off(OUT_BC);
#define mtyoku1 OnFwd(OUT_B,55);OnFwd(OUT_C,50);Wait(600);Off(OUT_BC);
#define mtyoku4 OnFwd(OUT_B,55);OnFwd(OUT_C,50);Wait(700);Off(OUT_BC);
task main ()
{
down;//一画目はじめ、一文字目はじめ
btyoku1;
up;//一画目おわり
mtyoku1;//移動
kaiten90r;
btyoku2;
down;//二画目はじめ
btyoku3;
up;//二画目おわり
mtyoku1;//移動
kaiten90r;
btyoku2;
down;//三画目はじめ
btyoku1;
up;//三画目おわり
mtyoku1;//移動
kaiten90r;
btyoku2;
down;//四画目はじめ
btyoku3;
up;//四画目おわり
mtyoku4;//移動
kaiten90r;
btyoku2;
down;//五画目はじめ
btyoku1;
up;//五画目おわり,一文字目おわり
}
**体を書くプログラム [#fce5bee8]
画と画との間の移動には日を書くプログラムで用いられたプログラムを利用して移動または書く際に応用した。ただ、細かい調節のためいくつかのプログラムの定義を追加することになった。
#define down OnFwd(OUT_A,22);Wait(250);Off(OUT_A);
#define up Wait(1000);OnRev(OUT_A,19);Wait(400);Off(OUT_A);
#define kaiten90r OnFwd(OUT_C,50);OnRev(OUT_B,50);Wait(420);Off(OUT_BC);
#define kaiten90l OnFwd(OUT_B,50);OnRev(OUT_C,50);Wait(420);Off(OUT_BC);
#define kaiten135l OnFwd(OUT_B,50);OnRev(OUT_C,50);Wait(740);Off(OUT_BC);
#define kaiten30r OnFwd(OUT_C,50);OnRev(OUT_B,50);Wait(260);Off(OUT_BC);
#define btyoku1 OnRev(OUT_B,55);OnRev(OUT_C,50);Wait(150);Off(OUT_BC);
#define btyoku2 OnRev(OUT_B,55);OnRev(OUT_C,50);Wait(660);Off(OUT_BC);
#define btyoku3 OnRev(OUT_B,55);OnRev(OUT_C,50);Wait(250);Off(OUT_BC);
#define btyoku4 OnRev(OUT_B,55);OnRev(OUT_C,50);Wait(600);Off(OUT_BC);
#define btyoku5 OnRev(OUT_B,55);OnRev(OUT_C,50);Wait(90);Off(OUT_BC);
#define mtyoku1 OnFwd(OUT_B,55);OnFwd(OUT_C,50);Wait(600);Off(OUT_BC);
#define mtyoku4 OnFwd(OUT_B,55);OnFwd(OUT_C,50);Wait(700);Off(OUT_BC);
#define mtyoku5 OnFwd(OUT_B,55);OnFwd(OUT_C,50);Wait(100);Off(OUT_BC);
#define mtyoku6 OnFwd(OUT_B,55);OnFwd(OUT_C,50);Wait(25);Off(OUT_BC);
task main ()
}
down;//一画目はじめ、二文字目はじめ
btyoku3;
up;//一画目おわり
mtyoku4;//移動
mtyoku6;
kaiten90r;
btyoku4;
down;//二画目はじめ
btyoku1;
btyoku3;
up;//二画目おわり
mtyoku1;//移動
mtyoku5;
mtyoku6;
kaiten90l;
btyoku3;
btyoku3;
down;//三画目はじめ
btyoku1;
up;//三画目おわり
mtyoku4;//移動
mtyoku5;
mtyoku6;
kaiten90r;
mtyoku6;
kaiten135l;
btyoku2;
down;//四画目はじめ
btyoku3;
up;//四画目おわり
mtyoku1;//移動
kaiten90l;
btyoku1;
btyoku1;
down;//五画目はじめ
btyoku3;
up;//五画目おわり
mtyoku5;//移動
mtyoku5;
mtyoku5;
kaiten30r;
btyoku5;
down;//六画目はじめ
btyoku3;
up;//六画目おわり
mtyoku4;//移動
kaiten30r;
btyoku3;
btyoku3;
down;//七画目はじめ
btyoku3;
up;//七画目おわり、二文字目おわり
}
*まとめ [#kadb3099]
**文字の完成 [#wf9648f1]
#ref(image2.jpeg)
最終的には文字はこのように書くことができた。~
今回は三輪式のものにペンを取り付けただけのものにしたが、機会があればx,y方式にも挑戦してみたい。または、次の課題では、機体を1から作ったもので挑戦したい。関数も自らで調べたり、授業で出てきたものを使っていきたい。
**反省 [#l95f0002]
プログラム面、機体の動作面でも課題の多く残る結果となった。~
+プログラムで関数を利用できなかった点~
関数の理解を深めることによってプログラムをわかりやすくかつ、簡単なものに変えれるようにしたい。~
+スピードが速く線がちょくせんでなかった点~
機体の用途によって適切な調整をできるようにしたい。~
+電池の消耗によってまったく文字が書けなくなってしまう点~
機体の動作スピードを全体的に遅くすることによって解決可能。~