2015b/Member

目次

書道ロボット

今回製作したロボットには、私の出身県である茨城県の「茨」を書かせようとした。

ロボット本体

zentai_2.jpg

ペンの移動

左右のモーターの回転によってペンを移動させる
2つのモーターを逆方向に回転させるとペンは上下に動き、同じ方向に回転させると左右に動くようになっている。片方のモーターのみ動かすことで斜め方向の移動もできる。
ただしプログラム上では、モーターが左右で逆向きに取り付けられているため、上下移動では同じ方向の入力、左右移動では逆方向の入力をすることになる。
線の長さは実際にロボットを動かしながら回転速度と時間を調整した。
ロボットの製作後、ペンの上下の位置によって左右の可動範囲が狭まってしまうために、文字を余り大きく書くことができなくなることがわかったが、読める程度の大きさの字は書けたのでこの問題は放置してしまった。

ペンの上げ下げ

asi_2.jpg

3つ目のモーターの回転させ、ロボットの上半分を浮かせるようにしてペンを紙面から離すようにした。
その際、本体が滑ってしまわないように滑り止め兼おもりとして小さいタイヤを下の画像のように取り付けた。 本体をロボットに搭載せず、傍に置くという方法をとったからこの方法をとることができた。

suberidome_2.jpg

プログラム

最も多く使うであろう上下左右の移動とペンの上げ下げを最初にdefineで定義した。ペンの移動時間はいずれも引数tを用いた
筆順はについてはプログラムは長くなってしまうが、実際の筆順の通りに書いた方がわかりやすい字を書けると考えた為、実際の筆順の通りに書くようにした。
ロボット起動時のペンの位置は、上下方向には上端,左右方向には中央にくるようになっており、ペンは上げた状態になっている。

実際に作成したプログラムは以下である

#define Go_Up(t) OnRev(OUT_AB,20);Wait(t);Off(OUT_AB);
#define Go_Down(t) OnFwd(OUT_AB,20);Wait(t);Off(OUT_AB);
#define Go_Right(t) OnRev(OUT_B,20);OnFwd(OUT_A,20);Wait(t);Off(OUT_AB);
#define Go_Left(t) OnRev(OUT_A,20);OnFwd(OUT_B,20);Wait(t);Off(OUT_AB);
#define Pen_up OnFwd(OUT_C,70);Wait(200);Off(OUT_C);
#define Pen_down OnRev(OUT_C,30);Wait(200);Off(OUT_C);

task main()
{
      Go_Left(200);
      Go_Down(50);
      Pen_down;           // ここまで一画目の位置へのペン移動
      Go_Right(400);
      Pen_up;
      Go_Left(300);
      Go_Up(30);
      Pen_down;
      Go_Down(100);
      Pen_up;
      Go_Up(100);
      Go_Right(200);
      Pen_down;
      Go_Down(100);
      Pen_up;             // ここまで草冠
      Go_Left(200);
      Go_Down(100);
      Pen_down;
      Go_Right(100);
      Pen_up;
      Go_Left(100);
      Go_Down(150);
      Pen_down;
      OnRev(OUT_B,20);       // 右上方向に移動
      Wait(100);
      Pen_up;             // ここまで左下のンの部分
      Go_Right(50);
      Go_Up(50);
      Pen_down;
      Go_Down(150);
      Pen_up;
      Go_Up(80);
      Pen_down;
      Go_Right(100);
      Go_Down(50);
      Pen_up;
      Go_Left(80);
      Pen_down;
      Go_Down(100);
      OnFwd(OUT_B,20);       // 左下方向に移動
      Wait(100);
      Pen_up;
      OnRev(OUT_B,20);       // 右上方向に移動
      Wait(100);
      Pen_down;
      OnFwd(OUT_A,20);       // 左下方向に移動
      Wait(100);
      Pen_up;             // ここまで右下の欠の部分,終了
}

実際に書かせた結果

kekka_2.jpg

左下の欠の部分が崩れてしまった。モーターの回転時間を短くしすぎたせいで実際にはペンを動かせなかったのだろうと思われる。この部分は回転時間の調整だけではなく、回転速度の部分も調整するべきだった。

反省点

描画可動範囲の狭さという構造の問題を放置してしまった。今回の課題に対してはこれでもよかったかもしれないが、もし字の大きさが指定されていた場合を考えるとこのロボットでは不十分だと感じた。
プログラムが非常に長くなってしまった。ペンの移動と上げ下げをdefineを用いて短くしたとはいえ、まだ短くする方法はあったのではないか、実際の筆順にこだわらずプログラムが短くなるような筆順にすればよかったのではないかと考えた。


添付ファイル: filekekka_2.jpg 88件 [詳細] fileasi_2.jpg 133件 [詳細] filesuberidome_2.jpg 86件 [詳細] filezentai_2.jpg 89件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-11-26 (木) 18:44:00 (1364d)