#contents
*はじめに [#x2c223dd]
ロボティクス入門ゼミの一回目の課題として、「書道ロボット」の組み立て・プログラム作成をしました。

一つ断っておきたいことがあります。

後の'課題について'に載せました指示の中に『各自の名前の7画以上の漢字を選ぶ』とあり私の名前に該当する漢字がありましたが、細々しており私達が組み立てたロボットでは書くことが困難であったため、急遽姓に変更いたしました。

*課題について [#had03f72]
以下のような指定のありました。

各自の名前の中の一文字をA4用紙の中に書きなさい。 ただし7画以上の文字を選ぶこと。もし7画以上の文字がない場合には合計7画以上になるように複数の文字を書きなさい。以下の点に注意すること。
-マクロや関数、サブルーチンなどを使い、main関数がなるべく単純になるようにプログラムを作ること。
-定数名やマクロなどは分かりやすい名前を用いること
-余裕をもってA4の紙の中に収まる大きさにすること。読める範囲ならばいくら小さくてもよい。
-ペン以外はキットの部品を使うこと
-輪ゴムは切れやすく高価なので慎重に扱い、張力がかかりすぎないようにすること。

*ロボットについて [#ud82a3e4]
ロボットの上に取り付けたモーターにアームを作り、そこに輪ゴムで筆ペンを取り付けた。
#ref(./ロボ3.jpg,40%)
-直線→ペンを降ろしてそのまま前後に動く
-カーブ→本体を軸にして円を描く感じで
-本体からペン先まで距離があるので、少しずつ動かして調節した。
曲線を書くとき、少し回転しただけで結構長く書けるのでそこに注意した。
アームを上にあげるとき、ハネができて文字に味がでた。
*プログラム [#d64f9ae9]

***定義 [#rf590ca1]
全部で以下6つの定義を作った。
 #define PENUP OnFwd(OUT_A,50);Wait(100);Off(OUT,A);Wait(800);  //ペンを持ち上げる
 #define PENDOWN OnFwd(OUT_A,-50);Wait(100);Off(OUT,A);Wait(800); //ペンを降ろす 
 #define PENUP OnFwd(OUT_A,50);Wait(100);Off(OUT_A);Wait(800);  //ペンを持ち上げる
 #define PENDOWN OnFwd(OUT_A,-50);Wait(100);Off(OUT_A);Wait(800); //ペンを降ろす 
 #define TURNRIGHT OnFwd(OUT_B,50);OnFwd(OUT_C,-50)Wait(100);Off(OUT_A);Wait(800);  //右に曲がる
 #define TURNLEFT OnFwd(OUT_B,-50);OnFwd(OUT_C,50)Wait(100);Off(OUT_A);Wait(800);  //左に曲がる
 #define ZENSIN(s) OnFwd(OUT_BC,50);Wait(s);Off(OUT,BC);Wait(800);   //前進する
 #define KOUTAI(t) OnFwd(OUT_BC,-50);Wait(t);Off(OUT,BC);Wait(800);   //後退する
 #define ZENSIN(s) OnFwd(OUT_BC,50);Wait(s);Off(OUT_BC);Wait(800);   //前進する
 #define KOUTAI(t) OnFwd(OUT_BC,-50);Wait(t);Off(OUT_BC);Wait(800);   //後退する

***全体 [#k77c1f27]
 task main()
 {
   KOUTAI(500);    //「石」書き始め
   ZENSIN(200);      
   KOUTAI(500);    //「石」書き始め「一」
   ZENSIN(200);      //「ノ」
      OnFwd(OUT_B,-50);
      OnFwd(OUT_C,50);
      Wait(400);
      Off(OUT_BC);
      Wait(800);
   PENUP;
     OnFwd(OUT_B,-50);
     OnFwd(OUT_C,50);
     Wait(195);
     Off(OUT_BC);
     Wait(800);
   ZENSIN(600);
   TURNRIGHT;
   KOUTAI(100);
   PENDOWN;
   PENDOWN;    //口の「(下の)一」
   ZENSIN(300);
   PENUP;
     KOUTAI(300);
         TURNLEFT;
      KOUTAI(200);
           TURNRIGHT;
     PENDOWN;
     PENDOWN;       //口の「(上の)一と(右の)|」
      ZENSIN(400);
     
       OnFwd(OUT_B,-50);
       OnFwd(OUT_C,50);
       Wait(100);
       Off(OUT_BC);
       Wait(800);
     PENUP;    //「石」書き終わり

       OnFwd(OUT_B,-50);   //「石」→「山」
       OnFwd(OUT_C,50);
       Wait(450);
       Off(OUT_BC);
       Wait(800);
     KOUTAI(500);
     TURNRIGHT;
      OnFwd(OUT_BC,40);
      Wait(300);
      Off(OUT_BC);
      Wait(800);
     TURNLEFT;
    OnFwd(OUT_BC,40);
    Wait(300);
    Off(OUT_BC);
    Wait(800);
 

      PENDOWN;    //「山」書き始め
      PENDOWN;    //「山」書き始め 「(真ん中の)|」
     ZENSIN(400);
            PENUP;
     TURNRIGHT;
      ZENSIN(400);
            TURNLEFT;
     PENDOWN;
     PENDOWN;     //「(右の)|」
       KOUTAI(300);
           PENUP;
       TURNLEFT;
      ZENSIN(600);
             TURNRIGHT;
    PENDOWN;
    PENDOWN;      //「(左の)|」
      ZENSIN(300);
            PENUP;
        TURNRIGHT;
       KOUTAI(600);         
       TURNLEFT;
    ZENSIN(600);
           TURNRIGHT;
   PENDOWN;
   PENDOWN;      //「一」
      ZENSIN(700);
          PENUP;   //「山」書き終わり
 }

*完成 [#td53f748]
#ref(./ishiyama.JPG,10%)

非常に不恰好だが、読めなくもない。
*感想・反省 [#x18d7251]
プログラミングをしてロボットを動かすのはこのゼミが初めてでしたので苦戦しましたが、何とか作成することができました。

まず思うことは、思い通りにロボットがなかなか動かないことです。時間や長さをきっちり測ってプログラムを組んだわけではないので当り前かもしれませんが、直角に曲がっているように見えておそらく直角ではなかったのではないかと思います。

困ったことは、プログラミングとは関係ないのですが、ロボットの電池が満タンではなかったときに初めにプログラムを組んでいたので、電池交換したら動きが活発になりA4からはみ出してしまったということです。ロボットの管理はちゃんとしないといけないことを実感しました。


*次回に向けて [#aed30bd9]
まず、次回はロボットの構造をもっと工夫して考えたいと思いました。今回書道ロボットには向いていなかったという印象があります。
そして名前の方で製作できなかったので、次回は課題にしっかり沿って製作できればよいと思います。

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