課題1:書道ロボット

「長」、「京」の2文字を、タンクロボットに書かせる。(課題の発表のあとで気づいたのですが、土台も改造すればよかったんですね・・・。)

全体2.jpg

(製作者:座敷童、ネタ切れ)

ロボにペンを持たせる

最初の形では、とりあえずペンがつけばいいのかな?ということで、前にペンをつけてみました。が、ロボの回転の中心からペン先がずれ、曲ったあとのペン位置の修正が非常に大変!!

    ↓↓↓

思い切って大改造! ペンを本体の中央あたりで上下するようにしたら、曲ったあともペン先の位置は変わらないのではないだろうか? →とりあえず、回転の軸には近づいたけれど、若干ずれる…。

a9 system.jpg

 (▲後ろから見た写真です。ペンを上下させる部分です。)

上下.jpg

 (▲上と下から見た写真です。ペンが本体の中央あたりにあるのがわかると思います。)

最初の形ほどにずれがひどくはないので、ペン先の位置を修正しつつ動かすプログラム の作成にとりかかることになりました。

プログラム

ペンは下がった状態から開始します。

曲がったあとのペン先の修正

「長」のプログラム

#define MOTOR OUT_A+OUT_C  //
#define TURN_TIME  15 //
sub turn_left()                //角でのペン位置を調整しつつ左折
{
 OnRev(MOTOR); Wait(TURN_TIME);
 OnFwd(OUT_A);
 Wait(162);
 OnFwd(OUT_C); Wait(TURN_TIME);
 Off(MOTOR);
}
sub turn_right()            //角でのペン位置を調整しつつ右折
{
 OnRev(MOTOR); Wait(TURN_TIME);
 OnFwd(OUT_C);
 Wait(165);
 OnFwd(OUT_A); Wait(TURN_TIME);
 Off(MOTOR);
}
sub arm_up()              //ペンを紙から離す
{
 Off(MOTOR);
 OnFwd(OUT_B); Wait(6);
 Off(OUT_B);
}
sub arm_down()             //ペンを紙に下ろす
{
 Off(MOTOR);
 OnRev(OUT_B); Wait(8);
 Off(OUT_B);
}
task main()
{
 OnFwd(MOTOR); Wait(50);                    //1〜2を書く
 arm_up();
 OnRev(MOTOR); Wait(52);                    //2〜1を移動
 turn_right();
 arm_down();
 OnFwd(MOTOR); Wait(55);                    //1〜3を書く
 arm_up();
 OnRev(MOTOR); Wait(40);                    //3〜4を移動
 turn_left();
 arm_down();
 OnFwd(MOTOR); Wait(40);                    //4〜5を書く
 arm_up();
 OnRev(MOTOR); Wait(40);                    //5〜4を移動
 turn_right();
 OnFwd(MOTOR); Wait(18);                    //4〜6を移動
 turn_left();
 arm_down();
 OnFwd(MOTOR); Wait(38);                    //6〜7を書く
 arm_up();
 OnRev(MOTOR); Wait(38);                    //7〜6を移動
 turn_right();
 OnFwd(MOTOR); Wait(18);                    //6〜3を移動
 turn_right();
 OnFwd(MOTOR); Wait(45);                    //3〜8を移動
 arm_down();
 OnRev(MOTOR); Wait(100);                   //8〜9を書く
 arm_up();
 OnFwd(MOTOR); Wait(75);                    //9〜3を移動
 turn_left();
 arm_down();
 OnFwd(MOTOR); Wait(25);                    //3〜10を書く
 arm_up();
 OnRev(MOTOR); Wait(TURN_TIME);
 OnFwd(OUT_A); Wait(75);
 OnFwd(OUT_C); Wait(TURN_TIME);
 Wait(20);                  //10〜11を移動
 Off(MOTOR);
 arm_down();
 OnRev(MOTOR); Wait(41);                   //11〜12を書く
 arm_up();
 OnRev(MOTOR); Wait(25);              //12〜13を移動
 arm_down();
 OnFwd(MOTOR); Wait(20);            //13〜14を書く
 arm_up();
 turn_right();
 OnFwd(MOTOR); Wait(20);           //14〜15を移動
 arm_down();
 OnRev(MOTOR); Wait(65);                    //15〜16を書く
 arm_up();
 Off(MOTOR);
}

「京」のプログラム

#define MOTOR OUT_A+OUT_C  //
#define TURN_TIME  15 //
sub turn_left()               //角でのペン位置を調整しつつ左折
{
 OnRev(MOTOR); Wait(TURN_TIME);
 OnFwd(OUT_A);
 Wait(165);
 OnFwd(OUT_C); Wait(TURN_TIME);
 Off(MOTOR);
}
sub turn_right()              //角でのペン位置を調整しつつ右折
{
 OnRev(MOTOR); Wait(TURN_TIME);
 OnFwd(OUT_C);
 Wait(162);
 OnFwd(OUT_A); Wait(TURN_TIME);
 Off(MOTOR);
}
sub arm_up()                //ペンを紙から離す
{
 Off(MOTOR);
 OnFwd(OUT_B); Wait(6);
 Off(OUT_B);
}
sub arm_down()               //ペンを紙に下ろす
{
 Off(MOTOR);
 OnRev(OUT_B); Wait(8);
 Off(OUT_B);
}
task main()
{
 OnFwd(MOTOR); Wait(30);          //1〜2を書く
 arm_up();
 turn_right();
 OnFwd(MOTOR); Wait(50);               //2〜3を移動 
 arm_down();
 OnRev(MOTOR); Wait(100);              //3〜4を書く
 arm_up();
 OnFwd(MOTOR); Wait(90);               
 turn_left();
 OnFwd(MOTOR); Wait(20);         //4〜5を移動
 arm_down();
 OnFwd(MOTOR); Wait(40);               //5〜6を書く
 arm_up();
 OnRev(MOTOR); Wait(40);               //6〜5を移動
 turn_left();
 arm_down();
 OnFwd(MOTOR); Wait(100);              //5〜7を書く
 arm_up();
 turn_right();  
 arm_down();
 OnFwd(MOTOR); Wait(40);               //7〜8を書く
 arm_up();
 turn_right();
 OnFwd(MOTOR); Wait(100);              //8〜6を移動
 arm_down();
 OnRev(MOTOR); Wait(100);              //6〜8を書く
 arm_up();
 OnFwd(MOTOR); Wait(50);               //8〜9を移動
 turn_left();  
 arm_down();
 OnFwd(MOTOR); Wait(80);               //9〜10を書く
 arm_up();
 OnRev(MOTOR); Wait(80);               
 OnRev(MOTOR); Wait(TURN_TIME); 
 OnFwd(OUT_C); OnRev(OUT_A); Wait(70);
 OnFwd(MOTOR); Wait(30+TURN_TIME);    //10〜11を移動
 arm_down();
 OnFwd(MOTOR); Wait(70);               //11〜12を書く
 arm_up();
 OnRev(MOTOR); Wait(100+TURN_TIME);    //12〜9を移動
 OnRev(OUT_C); OnFwd(OUT_A); Wait(140);
 OnFwd(MOTOR); Wait(30+TURN_TIME);     //9〜13を移動
 arm_down();
 OnFwd(MOTOR); Wait(70);                //13〜14を書く
 Off(MOTOR);
}

実際に、「長」と「京」を書いてみました

「長」.jpg

  (▲「長」の結果です。)

「京」.jpg

  (▲「京」の結果です。)

工夫&努力した点

・曲がり角などでペン先の位置がずれてしまう。

→本体の中央あたりにペンを持ってきて、そこの場所で上下させることである程度ずれが解消されました。

・ペンの位置を中央にもってくることによって、左右のバランスが崩れてしまい、左折右折で数値がかわってくる。

 →左折、右折の場合でそれぞれ数値を出してそれぞれ調整。

・ペンと回転の軸を近づけるために、機械本体を立てることにしました。

 →固定に苦労しました・・・。なんとか固定。(下の写真が努力の結晶(?))

a9 stopper.jpg

・A4の紙にそれぞれの文字をおさめる。

 →文字がゆがんでしまうと、はみでてしまうので、多少のずれも考慮したサイズに変更しました。

感想

★コメントをどうぞ★


2007a/A9


添付ファイル: file上下.jpg 365件 [詳細] file全体2.jpg 344件 [詳細] file修正.jpg 314件 [詳細] file「長」.jpg 319件 [詳細] file「京」.jpg 294件 [詳細] file長.jpg 289件 [詳細] filekyou.jpg 322件 [詳細] filea9 stopper.jpg 339件 [詳細] filea9 system1.jpg 153件 [詳細] filea9 system.jpg 294件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-06-06 (水) 22:37:07