目次
#contents
*課題の概要 [#z280beca]
今回の課題は「これまで住んだことのある都道府県名、市町村名、地区名などの中から2文字以上のものを選び、それをA4の紙を書くロボットを製作せよ」っというとであった.詳しい説明としては二文字合わせて十画以上で,モーターを使ってペンを動かすということだ.~
私は今回「町田」を書くことにした.
*ロボットの説明 [#m285f2c1]
私はロボットの構造を最初に作った車型のロボットにしてロボットの横にモータを付けて動かすようにした.~
この写真はロボットの全体像の写真である.~
#ref(IMG_0428 (2).JPG)~
なるべく誤差が出ないようにロボットの中心に来るようにペンを設置した.~
このロボットはペンを上下に挙げるのではなく,紙に対して斜めに置くようにした.~
理由は上下にペンを下すと,書くときにペンのブレを防ぎなるべく人が書くような字に似せるようにするためだ.~
写真を見てもらうと地面に対して斜めにペンを設置しているのがわかるだろう.~
ちなみにペンをロボットに固定するのがどうしても不安定になってしまい苦労したが,輪ゴムを使うことにより少しサスペンションの効果もある固定をすることができた.
#ref(IMG_0427 (2).JPG)
*文字の書き順について [#cf7ad6c2]
文字の書き順は,このロボットは回転するとすごく誤差が出るため効率よく描くために,書きやすい順序を採用した.~
町で使う「田」と,二文字目の「田」が同じなので時間を動作する時間を変えるだけだったので少し得した気分になった.~
…の「田」の「口」を書く.~
町の「田」の中の「一」と,町の「丁」の「一」をつなげて書く.~
Dの「田」の中の「|」を書く~
つの「丁」の「|」を書く~
~
~
~
ヅ弔痢峺」を書く~
ε弔痢峺」の中の「一」を書く~
田の「口」の中の「|」を書く~
#ref(IMG_0461 (2).JPG)
*基本プログラム [#k95df716]
今回文字を書くことにあたり,ロボットの構造的にどうしても動くと誤差が出てしまうため一文字一文字調整をしながら書いた.さらに電池のことも考えて調整に調整を重ねた.そのためどうしてもプログラミングがズラズラと続いてしまい,シンプルに描くことができなかった.
**ペンの上げ下げ [#b4b496db]
 #define down OnFwd(OUT_A,10);Wait(700);Off(OUT_A);//ペンをおろす
 #define up  OnRev(OUT_A,10);Wait(700);Off(OUT_A);//ペンをあげる
ペンの上げ下げを行ったとき,ペンを紙に置くイメージで書きたかったためモーターを弱く設定した.こうしたときうまくペンを上げ下げすることに成功した.
**90度回転(右・左) [#gd986657]
 #define cyokkakul OnFwd(OUT_B,30);OnRev(OUT_C,30);Wait(850);Off(OUT_BC);//直角左回転
 #define cyokkakur OnFwd(OUT_C,40);OnRev(OUT_B,40);Wait(650);Off(OUT_BC);//直角右回転
直角で曲がるプログラムを左右で1つずつ作った.電池の消耗で徐々にずれて行ったため調整を重ねた.しかし,電池を交換したときに全然ロボットがいうことを聞かなくなったため,,また調整して90度を見つけた.最終的には上のプログラムに落ち着いた.
**直進 [#sf355d29]
 #define massuguni OnRev(OUT_B,50);OnRev(OUT_C,50);Wait(300);Off(OUT_BC);//直線2
 #define mas sugui OnRev(OUT_B,50);OnRev(OUT_C,50);Wait(530);Off(OUT_BC);//直線1
最初直線を書こうとしたときに,モーターの回転率を30でプログラミングを組んでいたが,どうしても直線ではなく斜めに進んでしまっていた.その誤差を少し手も減らすために試行錯誤したときに回転率を50まで上げた時誤差がかなり少なくなった.そのため回転率を50で組みなおした.
**プログラミングについて [#z28f78c1]
 #define down OnFwd(OUT_A,10);Wait(700);Off(OUT_A);//ペンをおろす
 #define up  OnRev(OUT_A,10);Wait(700);Off(OUT_A);//ペンをあげる
 #define massuguni OnRev(OUT_B,50);OnRev(OUT_C,50);Wait(300);Off(OUT_BC);//直線2
 #define mas sugui OnRev(OUT_B,50);OnRev(OUT_C,50);Wait(530);Off(OUT_BC);//直線1
 #define cyokkakul OnFwd(OUT_B,30);OnRev(OUT_C,30);Wait(850);Off(OUT_BC);//直角1
 #define cyokkakur OnFwd(OUT_C,40);OnRev(OUT_B,40);Wait(650);Off(OUT_BC);//直角2
 #define sikakuni down;massuguni;up;OnFwd(OUT_C,50);OnFwd(OUT_B,50);Wait(700);~
 Off(OUT_BC);cyokkakul;massuguni;massuguni;//四角1
 #define sikakui down;massugui;up;OnFwd(OUT_C,50);OnFwd(OUT_B,50);~
 Wait(580);Off(OUT_BC);cyokkakul;massugui;//四角2
 #define hane OnFwd(OUT_B,30);OnFwd(OUT_C,10); Wait(200);Off(OUT_BC);//はね
 #define hanemodori OnRev(OUT_B,30);OnRev(OUT_C,10);Wait(200);Off(OUT_BC);//はねを戻す
 task main()
 {
        int i;      //町の口を書く
        for(i=0;i<4;i++){
                sikakuni;
         }
    OnFwd(OUT_BC,50); //切り返し  
    Wait(500);
    Off(OUT_BC);
    OnFwd(OUT_B,50);
    OnRev(OUT_C,50);
    Wait(470);
    Off(OUT_BC);
    OnRev(OUT_BC,50);
    Wait(650);
    Off(OUT_BC);
    down;       //田の中の横棒
    massuguni;
    massuguni;
    up;
    OnFwd(OUT_BC,50); //切り返し
    Wait(1100);
    Off(OUT_BC);
    OnFwd(OUT_C,40);
    OnRev(OUT_B,40);
    Wait(700);
    Off(OUT_BC);
    OnRev(OUT_BC,50);
    Wait(500);
    Off(OUT_BC);
    down;       //田の口の中の縦棒
    massuguni;
    up;
    OnFwd(OUT_C,40);   //切り返し
    OnRev(OUT_B,40);
    Wait(700);
    Off(OUT_BC);
    OnFwd(OUT_BC,50);
    Wait(220);
    Off(OUT_BC);
    OnFwd(OUT_B,30);
    OnRev(OUT_C,30);
    Wait(1000);
    Off(OUT_BC);
    OnFwd(OUT_BC,50);
    Wait(300);
    Off(OUT_BC);
    down;       //町の最後の画
    OnRev(OUT_B,50);
    OnRev(OUT_C,50);
    Wait(500);
    Off(OUT_BC);
    hane;       //はね
    up;
    OnFwd(OUT_B,50);  //切り返し
    OnRev(OUT_C,50);
    Wait(560);
    Off(OUT_BC);
    OnFwd(OUT_BC,50);
    Wait(520);
    Off(OUT_BC);
    OnFwd(OUT_C,50);
    OnRev(OUT_B,50);
    Wait(550);
    Off(OUT_BC);
    OnRev(OUT_BC,50);
    Wait(130);
    Off(OUT_BC);       
        int j;          //田の口
        for(j=0;j<4;j++){
                sikakui;
         }
    OnFwd(OUT_BC,50);  //切り返し
    Wait(250);
    Off(OUT_BC);
    OnFwd(OUT_B,50);
    OnRev(OUT_C,50);
    Wait(510);
    Off(OUT_BC);
    massugui;      
    down;
    massugui;            //田の中の横棒
    up;
    OnFwd(OUT_BC,50);  //切り返し
    Wait(700);
    Off(OUT_BC);
    cyokkakur;
    OnRev(OUT_BC,50);
    Wait(350);
    Off(OUT_BC);
    down;        //田の最後の縦棒
    massugui;
    up;
 }
田と町には同じ形があるため長さの定義を変えてそれぞれforでおいてなるべくシンプルにできるようにした.forでおいたのは,田の口のところである.どうしても切り返しが多くなっているのがやっていて悔しかった.回転数や時間など少しでも調節ミスがあると誤差が大きくなり,全く字が書けなくなってしまうので完成までずっと調整の繰り返しだった.~
さらに自分のこだわりとしてどうしても「はね」を入れたかった.左右のモーターの回転数を変えて,短い時間で動かすと「はね」を書くことに成功した.~
(注)プログラミング中の画数は,〈文字の書き順について〉の写真に示されている数字の通りにする.
*まとめ [#a36a65f3]
**完成した文字 [#s9a72391]
#ref(IMG_0432 (2).JPG)
町に関しては練習のほうが上手にできていたが,電池の消耗で誤差ができてしまった.~
田はうまく書けたと思う~
字が全体敵に大きくA4の紙にぎりぎり収まる感じだった.もっと小さくすればよりプログラムが簡単になったと思う.
**考察・問題点 [#pd18b37f]
今回初めての課題でロボットはシンプルであるのに対して,前・後ろ・回転など様々な動作を与える必要があったのでプログラミング自体が全体的に複雑になってしまい,思うようにまとめられなかった.微調整をするがゆえに,プログラミングをする中で様々な書き足しをしてしまい,見栄えも悪くなってしまった.~
調整することが必要不可欠であったため何度も繰り返ししていたら電池の消耗が激しく,すぐにずれが出てしまため調整にかなり時間がかかった.
**感想 [#u99b6c3c]
今回微調整をしなければいけないことがかなりありプログラムが複雑になり,きれいに描くことができなかった.ロボットを何もいじらなかったためこのようなことになった.他の班を見てをロボットにかなり工夫をしているチームが多かった.私たちもロボットに力を入れたらよりプログラミングも簡単になったと思う.次回の課題ではロボットに工夫を凝らしていきたい.
*失敗作 [#waa86ef9]
自分は「町田」を書いたが,その前は「水門」書く予定だったが電池を変えたためにプログラムを根底から変えなくてはいけなくなり,断念した.
#ref(NTGM6382 (2).JPG)
水までしか書けなかった.
この時に作ったはねを町にも生かした.

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS