*目次 [#l10175d2]
#contents

*書道ロボット [#m05901ec]
漢字の「矢」と「吉」という字を書くロボットを作りました。

&ref(071106_1652~012.jpg);

写真は全体像です。モーターを後ろに積んでいるので全長が長くなってしまいました。

&ref(071106_1651~011.jpg);

ペンをアームにくくりつけて上下に運動するようにしました。

ペンを振り上げるスピードが早すぎて上げきった衝撃で少しペンがずれてしまいそうなのでがっちりと固定するようにしました。

**工夫した点 [#r2764344]
 ロボットの重心のバランスを考え、モーターを乗せる荷台を取り付けました。

 また文字を書くとき、ペンがぶれないように輪ゴムとパーツでしっかりと固定できるようにしました。
**苦労した点 [#t41e4ff4]
 初めは足で動くロボットでいく予定だったのですが、それだと書く文字がぶれてしまうので途中からタイヤにかえました。

 また、ペンを動かす機能は初めはスライドで動きロボットの中央の穴から文字を書く装置にしたかったのですが、スライド機能のパーツ作りが不可能となったためペンを振り下ろすタイプの装置に変更しました。

 ロボットの動きでプログラムを作ると全然うまく字が書けないのでペンの動きを計算してプログラムを考えるのが大変でした。
*プログラム [#u7b6db86]
**「矢」のプログラム [#x861e5bf]

***感想 [#e015747f]
プログラミングが一番難しかったです。具体的には4画目と5画目の書き出す位置を見つけるのに苦労したことです。何回も試行錯誤してようやく完成しました。また文字を書く時下の紙もロボットと一緒に動いてしまうのも完成時間を遅くした要因です。なんとか字になった時は本当にうれしかったです。
***プログラム [#x2c56f4d]
 #define penmoving 40
 sub pen_down()
 {
 OnFwd(OUT_B);
 Wait(penmoving);
 Off(OUT_B);
 Wait(50); 
 }
 sub pen_up()
 {
 OnRev(OUT_B);
 Wait(penmoving);
 Off(OUT_B);
 Wait(50);
 }
 task main()
 {
 OnFwd(OUT_A+OUT_C);
 Wait(75);
 Off(OUT_A+OUT_C);
 pen_up();   
 
 Off(OUT_A+OUT_C);              //1画目
  
 OnRev(OUT_A);
 OnFwd(OUT_C);
 Wait(80);
 Off(OUT_A+OUT_C);
 
 OnRev(OUT_A+OUT_C);
 Wait(30);
 Off(OUT_A+OUT_C);
 
 OnRev(OUT_A+OUT_C); 	 
 Wait(40);
 Off(OUT_A+OUT_C);       
               
 OnRev(OUT_C);
 OnFwd(OUT_A);
 Wait(30);
 Off(OUT_A+OUT_C);    
 
 OnFwd(OUT_A+OUT_C);
 Wait(50);
 Off(OUT_A+OUT_C);    
 
 OnRev(OUT_A);
 OnFwd(OUT_C);
 Wait(30);
 Off(OUT_A+OUT_C); 
    
 OnRev(OUT_A+OUT_C); 	 
 Wait(40);
 Off(OUT_A+OUT_C); 
 
 pen_down();
 
 OnRev(OUT_A+OUT_C); 	 
 Wait(40);
 Off(OUT_A+OUT_C);
 pen_up();              //2画目
 
 OnRev(OUT_C);
 OnFwd(OUT_A);
 Wait(60);
 Off(OUT_A+OUT_C);    
 
 OnFwd(OUT_A+OUT_C);
 Wait(25);
 Off(OUT_A+OUT_C);    
 
 OnRev(OUT_A);
 OnFwd(OUT_C);
 Wait(60);
 Off(OUT_A+OUT_C); 
    
 OnFwd(OUT_A+OUT_C);
 Wait(25);
 Off(OUT_A+OUT_C);    
 
 pen_down();
 
 OnRev(OUT_A+OUT_C); 	 
 Wait(40);
 Off(OUT_A+OUT_C);
 pen_up();              //3画目
                               
 
 OnRev(OUT_A);
 OnFwd(OUT_C);
 Wait(90);
 Off(OUT_A+OUT_C);
 
 
 OnFwd(OUT_A+OUT_C);
 Wait(140);                            //
 Off(OUT_A+OUT_C);
 
 
 OnRev(OUT_A);
 OnFwd(OUT_C);
 Wait(50);                             //    
 Off(OUT_A+OUT_C);
 
 
 OnRev(OUT_A+OUT_C); 	 
 Wait(205);                            //
 Off(OUT_A+OUT_C);
 
 
 pen_down();
 
 OnRev(OUT_A+OUT_C); 	 
 Wait(90);
 Off(OUT_A+OUT_C);
 pen_up();              //4画目
 
 OnFwd(OUT_A+OUT_C);
 Wait(150);
 
 OnRev(OUT_C);
 OnFwd(OUT_A);
 Wait(60);
 Off(OUT_A+OUT_C);
 
 OnRev(OUT_A+OUT_C); 	 
 Wait(90);
  Off(OUT_A+OUT_C);
 
 pen_down();
 
 OnRev(OUT_A+OUT_C); 	 
 Wait(40);
 Off(OUT_A+OUT_C);
 pen_up();              //5画目
 
 }                      //終了   
   
**「吉」のプログラム [#vb37e0d6]
***工夫したところ [#bf3c0786]
サブルーチンを使ってプログラムの簡略化を試みてみました。

またペンの軌道と本体の軌道がずれるため、ごく短い時間の微調整を入れました。

一画一画調整する時間の長さが違うため、同じ画を何十回と書かせて調整しました。

***プログラム [#d937b9d9]
 
    #define TURN_TIME1 100
         sub turn_left()                         //左に90°曲がるサブルーチン     
    }  
      OnRev(OUT_A); OnFwd(OUT_C);   
      Wait(TURN_TIME1);
      Off(OUT_A+OUT_C); 
    }
   #define TURN_TIME2 100  
    sub turn_right()                         //右に90°曲がるサブルーチン 
    {
      OnFwd(OUT_A); OnRev(OUT_C);
      Wait(TURN_TIME2);
      Off(OUT_A+OUT_C);
    }
   #define penmoving 40  
   sub pen_up()                             //ペンを上げるサブルーチン
    {
      OnRev(OUT_B);
      Wait(penmoving);
      Off(OUT_B);
    }
        sub pen_down()                           //ペンを下げるサブルーチン
    {
      OnFwd(OUT_B);
      Wait(penmoving);
      Off(OUT_B);
    }
        task main()
   {
      OnFwd(OUT_A+OUT_C); Wait(150);        //一画目
      Off(OUT_A+OUT_C);
      pen_up();
   
      OnRev(OUT_A+OUT_C); Wait(10);        //二画目への移動
      turn_left();
      OnRev(OUT_A+OUT_C); Wait(130);
      Off(OUT_A+OUT_C):
   
      pen_down();                  //二画目
      OnFwd(OUT_A+OUT_C); Wait(130);
      Off(OUT_A+OUT_C);
      pen_up();
   
      OnFwd(OUT_A+OUT_C); Wait(70);        //三画目への移動。本体軌道とペンの軌道がずれるため微調整
      turn_right();
      OnRev(OUT_A+OUT_C); Wait(120);
      Off(OUT_A+OUT_C);
   
      pen_down();                  //三画目
      OnFwd(OUT_A+OUT_C); Wait(100);
      Off(OUT_A+OUT_C);
      pen_up();
  
      OnRev(OUT_A+OUT_C); Wait(30);        //四画目への移動
      turn_left();
      OnFwd(OUT_A+OUT_C); Wait(40);
      Off(OUT_A+OUT_C);
   
      pen_down();                  //四画目
      OnFwd(OUT_A+OUT_C); Wait(90);
      Off(OUT_A+OUT_C);
      pen_up();
   
      OnRev(OUT_A+OUT_C); Wait(15);       //五画目への移動、微調整
      turn_right();
      OnRev(OUT_A+OUT_C); Wait(80); 
      Off(OUT_A+OUT_C);
      
      pen_down();                  //五画目
      OnFwd(OUT_A+OUT_C); Wait(100);
      Off(OUT_A+OUT_C);
      pen_up();
   
      OnFwd(OUT_A+OUT_C); Wait(70);        //五画目を一度に書くことができないためペンを上げて微調整
      turn_left();
      OnRev(OUT_A+OUT_C); Wait(70);
      Off(OUT_A+OUT_C);
   
      pen_down();                  //五画目のつづき
      OnFwd(OUT_A+OUT_C); Wait(90);
      Off(OUT_A+OUT_C);
      pen_up();
   
      OnFwd(OUT_A+OUT_C); Wait(60);        //六画目への移動
      turn_right();
      OnRev(OUT_A+OUT_C); Wait(160);
      Off(OUT_A+OUT_C);
      
      pen_down();                  //六画目
      OnFwd(OUT_A+OUT_C); Wait(100);
      Off(OUT_A+OUT_C);
      pen_up();
   }                          //終了

***苦労したところ [#i8b6b1b7]
ペンを本体の前につけたため、プログラムと動きに微妙にずれが生じ、うまく書くのが難しかったです。

せっかくペンを買ったのに一回で壊れてしまったので残念でした。

完成がギリギリになってしまい不安でした。

一度書いた場所にもう一度ペン先を持っていくのが大変だった。
***完成した字 [#k66e6c81]
&ref(071108_1919~01.jpg);

最後の最後でなぜか曲がってしまいきれいに書けなくて残念でした。

途中まではちゃんと直角に曲がってたのに・・・
*感想 [#g667e7a9]
思った以上に時間がなく、また二人の時間もあわず苦戦しました。

しかし忙しい中でも楽しく作業ができてよかったです。

ペン先がつぶれてしまったのが残念だった。

ロボットの動きが単純だった分文字のプログラミングは緻密な動きができない分非常に苦労しました。次に作るロボットはより複雑な構造となるようにしたいです。

***コメントをお願いします。 [#v4740b9d]
-矢の方も期待しています。吉のプログラムももう少し、工夫・苦労した点はありませんか? 些細なことでも重要ですよ。 -- [[まいける(TA)]] &new{2007-11-07 (水) 19:10:23};
-「矢」プログラムに説明が不足しています。不明瞭すぎます。 -- [[クノ]] &new{2007-11-19 (月) 11:31:39};

#comment


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS