- 追加された行はこの色です。
- 削除された行はこの色です。
水曜まで
*目次 [#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); //1画目のかきだし
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); //2画目の書き出す位置までの移動
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); //2画目の書き出し点までの微妙な位置調整
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(); //2画目書き出す
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); //3画目の位置まで移動
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); //4画目の場所まで移動
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); //4画目の書き出し位置まで移動完了
pen_down(); //4画目書き出し開始
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(); //5画目書き出し
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};
-機構に対する説明が不足しています。『こうなっているのでこのように動く』のような説明を加えましょう。 -- [[クノ]] &new{2007-12-10 (月) 12:08:43};
#comment