2015b/Member 目次
書道ロボットの作成: 自分の氏名または出身地の都道府県名の漢字。漢字の合計画数を7画以上すること。A4用紙上に書く。
上の写真がロボット本体です。このロボットは三つのモーターを使い、一つのモーターで一方向への運動(前後運動など)をしています。
次にロボットの各部位の説明をします。
赤い丸がついているモーターでタイヤ(黄色い丸)を動かし前後運動をします。
赤い丸がついているモーターで歯車(黄色い丸)を動かし左右運動をします。黒色の歯車(ターンテーブル)にペンを付けたモーターをつけることにより、左右運動を可能にした。
赤い丸がついているモーターでペンの部分(黄色い丸)を動かし上下運動をします。
私は「佳」を書くことに決めました。この漢字は前後、左右、上下の動作を組み合わせれば書くことができます。そのため先にマクロで定義しました。更に、横棒が多いため横棒を書く一連の動作も定義しました。
最初はペンの下げをタッチセンサーを用いて行っていました。 しかし、タッチセンサーは地面と接触するため抵抗が大きくなり横棒を書いていくと徐々に長さがずれてしまいます。
その為、サーボ・モーターの特性を活かし角度で調整しました。更に、移動も全て角度に変えました。しかし、斜めへの移動がうまくいかず断念しました。
失敗した二つのプログラムを利用することで、プログラムを完成させることができました。 ペンの下げは抵抗を減らすために角度で、移動は調整が簡単な時間にしました。 横移動には歯車を使っているためバックラッシュが発生します。その為、サブルーチンではバックラッシュを減らし横棒を書く定義をしました。
#define go(t,s) OnRev(OUT_A,s);Wait(t);Off(OUT_A); //前進 #define back(t,s) OnFwd(OUT_A,s);Wait(t);Off(OUT_A); //後進 #define left(T,S) OnFwd(OUT_B,S);Wait(T);Off(OUT_B); //右移動 #define right(T,S) OnRev(OUT_B,S);Wait(T);Off(OUT_B); //左移動 #define toolup Wait(300);RotateMotor(OUT_C,20,-30); //上げ #define tooldw RotateMotor(OUT_C,15,30); //下げ sub bar() //横棒を書き、真ん中に戻す { OnFwd(OUT_B,50);OnRev(OUT_A,10);Wait(110);Off(OUT_A);Off(OUT_B); tooldw; OnRev(OUT_B,50);Wait(90);Off(OUT_B); OnRev(OUT_B,50);Wait(90);Off(OUT_B); toolup; left(170,50);right(115,50); //バックラッシュの軽減 } task main() {
最初に「圭」を書く。「圭」の方が画数が多いため「圭」を主体とした。
bar(); go(250,50); tooldw; back(500,50); toolup; bar(); back(250,50); bar(); go(250,50); tooldw; back(500,50); toolup; bar();
次に「亻」を書く。
go(955,50); left(120,50); tooldw; OnFwd(OUT_B,20);Wait(25); //斜め OnFwd(OUT_A,45);Wait(400); Off(OUT_A);Off(OUT_B); toolup; right(118,50); go(200,60); tooldw; back(860,50); //縦棒 toolup; right(120,50); //中心へ }
今回はターンテーブルなどのギアを多量に使用したためかなり大きなバックラッシュが発生しました。
その為、一定方向に歯をあてバックラッシュを取り除きました。
「圭」の方が画数が多いため「圭」を主体としました。
理由としては、ロボット近辺の方が誤差が少なくすむからです。
「圭」の横棒の長さが微妙に違うのと縦棒を一直線上に書くことができず残念に思います。
ロボットでは、一作目のロボットを先生に見てもらい良くないところを指摘していただきました。 二作目では極力部品を減らすよう努力したら一作目の2/5くらいまで減らすことができました。二作目を作り自分でも一作目のロボットは無駄が多いと感じました。このことを活かし少ない部品で作るよう心掛けていきたいです。