今回の課題の目的はこれまで住んだことのある都道府県名、市町村名、地区名などの中から2文字以上のものを選び、それをA4の紙の中1に書くロボットを製作する。
わたしは大学に入る前の1年半の間、東京で日本語を勉強していたので「東京」の文字を選んだ。
ロボットを作る前にグループの中で様々なことを考えた。例えば、各自の文字の書く方法、過去のロボット、などである。結局、プログラムを簡単に書けるためx-y軸するロボットを作ることに決定した。
ロボットでは、図のように3つのモータを使った。(A)x軸移動のモータ(右左)、(B)y軸移動のモータ(上下)(C)アームのモータ(ペンの上げ下げ)。
図より、x軸移動ロボットではローバー部分と高架部分である。
文字を書く前に方向による1センチの線を書くためにモータのスピード(speed)と動く時間(Wait)を測定した。また、アームロボットではペンの上げ下げのためのモータのスピード(speed)と動く時間(Wait)も測定した。結果は以下のものである;
方向 | スピード(speed) | 動く時間(Wait) |
leftとright | 20 | 200 |
upとdown | 20 | 300 |
liftpen | 23 | 200 |
putpen | 15 | 250 |
また、斜め線の場合はx軸移動とy軸移動を両方使った。1センチの線を書くためにモータのスピード(speed)と動く時間(Wait)の測定結果は以下のものである;
方向 | xのスピード(x-speed) | yのスピード(y-speed) | 動く時間(Wait) |
leftup | 17 | 15 | 250 |
leftdown | 15 | 15 | 250 |
rightup | 13 | 14 | 250 |
rightdown | 15 | 17 | 250 |
同じ1センチを書くだが方向が違うと動くロボットが違う。それは、x軸移動ロボットの移動がy軸移動ロボットよりいどうが遅い。
文字については、できるだけロボットを移動しないように図のように書き順を決めた。ただし、オレンジ色はペンを上げること、また、灰色はペンを上げ下げること。番号のように文字を書くことを行った。
東京を書くためのプログラム以下のようになる。
定義(define)は実験からの値を扱う
#define left(t) OnFwd(OUT_A,20);Wait(t);Off(OUT_A); //leftの移動 #define right(t) OnRev(OUT_A,20);Wait(t);Off(OUT_A); //rightの移動 #define up(t) OnFwd(OUT_B,20);Wait(t);Off(OUT_B); //upの移動 #define down(t) OnRev(OUT_B,20);Wait(t);Off(OUT_B); //downの移動 #define liftpen OnRev(OUT_C,23);Wait(200);Off(OUT_C); //ペンを上げる #define putpen OnFwd(OUT_C,15);Wait(250);Off(OUT_C); //ペンを下げる #define leftdown(t) OnFwd(OUT_A,15);OnRev(OUT_B,15);Wait(t);Off(OUT_AB); //leftdownの移動 #define rightdown(t) OnRev(OUT_A,17);OnRev(OUT_B,15);Wait(t);Off(OUT_AB); //rightdownの移動 #define leftup(t) OnFwd(OUT_A,15);OnFwd(OUT_B,17);Wait(t);Off(OUT_AB); //leftupの移動 #define rightup(t) OnRev(OUT_A,13);OnFwd(OUT_B,14);Wait(t);Off(OUT_AB); //rightupの移動
文字「東」と「京」をそれぞれ説明するが、さっきほどの文字の書く方法(1ー12までの順番): 文字の書く方法に沿って説明したいと思う。ただし、ロボットを安定するや脱輪しないのため時々ロボットを止める(Waitを使って実行する)
文字「東」
task main() { putpen; right(1800); //ここから「東」を書く。(Pendown1) Wait(400); //ロボットを安定するや脱輪しないのため時々ロボットを止める liftpen; //Penup2 left(1800); down(1400); putpen; //Pendown3 Wait(400); right(2000); Wait(400); up(600); Wait(400); left(2000); Wait(400); down(1200); Wait(400); right(2100); Wait(400); up(600); liftpen; left(1000); up(2000); putpen //Pendown4 down(1200); Wait(400); down(1200); Wait(400); down(1200); liftpen; up(1000); putpen; //Pendown5 Wait(400); leftdown(1400); liftpen; rightup(1500); putpen; //Pendown6 Wait(400); rightdown(1400); liftpen; //「東」を書き終わった。 leftup(1500); //ここはロボットを文字「東」 から 「京」に移動する命令 up(2200); right(2800);
文字「京」
putpen; // ここから「京」を書く。(Pendown7) Wait(400); down(500); liftpen; left(1000); putpen; //Penup8 Wait(400); right(2000); liftpen; //Pendown9 down(1100); putpen; //Penup10 Wait(400); up(600); Wait(400); left(2000); Wait(400); down(1200); Wait(400); right(2100); Wait(400); up(600); Wait(400); liftpen; //Pendown11 left(1000); down(800); putpen; //Penup11 Wait(400); down(1100); liftpen; up(1000); leftdown(400); putpen; //Pendown12 Wait(400); leftdown(1100); liftpen; up(640); right(1000); putpen; rightdown(1100); liftpen; //「京」を書き終わった。(Finish) }
最初では実験の結果とおりプログラムを書いたが、実際にやってみると文字はうまく書けない。そのため、モータのスピード(speed)と動く時間(Wait)を少し変えた。
図のように発表準備したときロボットは4回連続「東京」の文字は書けたが、発表したときロボットがうまく文字を書けなかった。特にペンの上げ下げが問題であった。それは電源が原因だと考えた。
ロボットではいろいろな工夫点であったが、まだ欠点がある。例えば、発表したときのペンの上げ下げが問題である。先生より、ペンの運動が円運動であり、ロボットがバランスとることが難しい事が指摘された。また、部品をたくさん使ったが無駄な部品が多かった。次回の課題はそのことを考えなければならない。 今回の課題ではロボットを作ったこととプログラムを書くことは初めてである。また、留学生の立場で日本人とグループワークすることも初めてであったがみんなが優しくしてくれた。今回の課題により、さらにコミュニケーションをすることができたと思う。