目次
キットに付属する説明書に掲載されているものを素体にした。安定的に動作したが、細かい動きをする、ということには不向きであったとも考えられる。
ペンを支えるアームは、ペンの太さなどを考慮し、隙間に入れて固定するようにした。補強のため、ゴムを使って固定している。モーターによってペン先と紙面の着脱ができる。位置が、車体から見て右側にあったため、プログラムの設定が比較的複雑になってしまった。
昔に住んでいた名古屋市を、「ナゴヤシ」とカタカナで書くことにした。画数の削減のために曲線を半円によって表現しようとした。
#define PEN_TIME 150 //ペンの着脱の時間 #define TURN_TIME 1200 //右折および左折の時間 #define OFF_BRANK Wait(1000); //動作完了後の停止時間
最初に、ペンが紙に着いた状態でスタートすることで、確実に表記ができるよう心がけた。 動作完了後に空白時間を作ることで、前の動作の影響が後の動作に出ることを防いだ。
#define pen_on OnFwd(OUT_A,50);Wait(PEN_TIME);Off(OUT_A);OFF_BRANK //ペンを紙につける #define pen_off OnRev(OUT_A,50);Wait(PEN_TIME);Off(OUT_A);OFF_BRANK //ペンを紙から離す #define turn_right OnFwd(OUT_C,50);Wait(TURN_TIME);Off(OUT_C);OFF_BRANK //右折 #define turn_left OnRev(OUT_C,50);Wait(TURN_TIME);Off(OUT_C);OFF_BRANK //左折 #define write_left pen_on;OnRev(OUT_C,50);Wait(TURN_TIME);Off(OUT_C);OFF_BRANK;pen_off //左折かつ描画
左右のタイヤで、大回りか小回りかが異なるため、右折も左折も、常に小回りである方を採用した。 筆跡を安定させるため、常にモーターの後進時に描画されるようにした。
task main() {
pen_off //一画目 turn_right write_left
OnRev(OUT_BC,50); //移動 Wait(500); Off(OUT_BC); OFF_BRANK
pen_on //二画目 pen_off
OnFwd(OUT_C,50); //移動 Wait(300); Off(OUT_C); OFF_BRANK
pen_on //三画目 pen_off
OnRev(OUT_C,50); //移動 Wait(300); Off(OUT_C); OFF_BRANK
OnRev(OUT_BC,50); //移動 Wait(250); Off(OUT_BC); turn_left OnRev(OUT_BC,50); Wait(500); Off(OUT_BC); OFF_BRANK
turn_right //四画目 write_left
OnFwd(OUT_C,50); Wait(300); Off(OUT_C); OFF_BRANK
OnRev(OUT_C,50); //移動 Wait(300); Off(OUT_C); OFF_BRANK
pen_on //五画目 pen_off
OnRev(OUT_C,50); //移動 Wait(100); Off(OUT_C); OFF_BRANK
pen_on //六画目 pen_off
OnFwd(OUT_C,50); //移動 Wait(400); Off(OUT_C); OFF_BRANK
pen_on //七画目 OnRev(OUT_BC,50); Wait(500); Off(OUT_BC); OFF_BRANK pen_off
OnFwd(OUT_BC,50); //移動 Wait(500); Off(OUT_BC); OFF_BRANK OnFwd(OUT_C,50); Wait(900); Off(OUT_C); OFF_BRANK
pen_on //八画目 OnRev(OUT_BC,50); Wait(500); Off(OUT_BC); OFF_BRANK pen_off
OnRev(OUT_BC,50); //移動 Wait(500); Off(OUT_BC); OFF_BRANK OnFwd(OUT_C,50); Wait(600); Off(OUT_C); OFF_BRANK
write_left //九画目 OnFwd(OUT_C,50); Wait(600); Off(OUT_C); OFF_BRANK
OnRev(OUT_BC,50); ///移動 Wait(500); Off(OUT_BC); OFF_BRANK OnFwd(OUT_C,50); Wait(600); Off(OUT_C); OFF_BRANK
write_left //十画目 OnFwd(OUT_C,50); Wait(600); Off(OUT_C); OFF_BRANK
OnRev(OUT_BC,50); //移動 Wait(500); Off(OUT_BC); OFF_BRANK OnFwd(OUT_C,50); Wait(600); Off(OUT_C); OFF_BRANK
OnRev(OUT_BC,50); //移動 Wait(500); Off(OUT_BC); OFF_BRANK OnFwd(OUT_C,50); Wait(600); Off(OUT_C); OFF_BRANK
pen_on //十一画目 OnRev(OUT_BC,50); Wait(500); Off(OUT_BC); OFF_BRANK pen_off
turn_right OnRev(OUT_BC,50); //移動 Wait(500); Off(OUT_BC); OFF_BRANK OnFwd(OUT_C,50); Wait(600); Off(OUT_C); OFF_BRANK
pen_on //十二画目 turn_right write_left pen_off
}
最初に何からどうしていけば良いかわからず、ロボット本体への工夫があまりできなかった。そうであるがゆえか、動きの大きさゆえに文字を小さくすることに苦労したり、バッテリー残量に書く長さ、移動する長さや角度が依存してしまい、ある程度書き終えたものをまた一から作り直したりする必要性が出てきてしまったり、プログラムの調整が大変難しかった。また、全体的に文字が大きくなってしまった。 また、頭の中に思い浮かべた動きと、ロボットの実際の動きが異なることが多数あり、頭の中で考えてどんどん作っていくより、何回も動かして試して調整を重ねる、ということの重要さを学んだ。 他の班や他の人の発表や、ロボット、プログラムを見ることで、今後の課題への解決方法について考えていきたい。