A4用紙をxyzデカルト座標上のxy平面上に置く。短辺をx軸、長辺をy軸に平行に置く。 x,y,zそれぞれの方向の制御に1つずつ、計3つのサーボモータを使用した。 以下に各モジュールの説明を行う。
モーターに大きいタイヤを固定し、そのタイヤの両側面を棒状のパーツで挟む。棒状のパーツの先端にペンの上げ下げを行うモジュールを取り付ける。モーターを回転させると接触している棒状のパーツとペンの上げ下げを行うユニットがx方向にスライドする。
サーボモータに大きいタイヤを2つ取り付ける。安定性を高めるために補助輪を2つ付けた。y方向の制御モジュールの上にメインコンピューターや他のモジュールを載せている。
ペンの上げ下げはz方向のみの移動ではなく、zx平面に平行に円運動を行うようにした。
佳という字を書き順通りに書く。ペンの上げ下げ、x,y方向の移動の計4つの関数を定義した。
#define down RotateMotor(OUT_C,70,-100); //ペンを下げる #define up RotateMotor(OUT_C,70,100); //ペンを上げる #define slide(angle) RotateMotor(OUT_B,70,angle);//x方向の移動 /* angle>0 (slide right), angle<0 (slide left) max angle 150° */ #define move(angle) RotateMotor(OUT_A,70,angle);//y方向の移動 /* angle>0 (forword), angle<0 (back) */
最初はモーターの回転時間を指定していたが、電池の残量により回転数が大きく異なってしまうため回転角の指定をするように変更した。 まず人偏を書く。
task main () { slide(40); //イ down; RotateMotor(OUT_AB,70,-40); up; slide(25); move(-20); down; move(90); up; move(-150);
次に一つ目の土を書く。
slide(30); //土 down; slide(60); up; slide(-60); move(-10); down; move(50); up; slide(-60); down; slide(150); up; slide(-100); move(40);
最後に二つ目の土を書く。
down; //土 slide(80); up; slide(-60); move(-10); down; move(50); up; slide(-60); down; slide(150); up; slide(-100);
ペンの上げ下げについては、円運動ではなくxy平面に垂直な運動に変更すればよい。 電池残量による動作の違いは、サーボモータの制御を動作時間による指定から、動作角度の指定にすることにより少しは改善したが、やはり電池残量によって動作角度が違ってしまいプログラムに修正が必要であった。