[[2018a/Member]]
*課題 [#jb8cc9e1]
** 内容 [#g6bf40a8]
A4用紙に地元に関する二文字を書くロボットの製作とプログラムの作成

私は広島と関わりのある「呉市」の二文字を書いた
*ロボットの説明 [#d431317c]
**本体について [#a5b4079e]
今回作ったロボットは四輪の車に、モーターを用いてペンの上げ下げを行う機構を取り付けた。
#refhttps://www.dropbox.com/s/kd48t5t0um6frzu/IMG_3253.jpg?dl=0
&ref(https://www.dropbox.com/s/kd48t5t0um6frzu/IMG_3253.jpg?dl=0);
**ペンの上げ下げについて [#i33f1fc4]
ペンの上げ下げにはモーターの動力を横回転から縦回転にして、上からペンを押さえつける形をとった。
#refhttps://www.dropbox.com/s/dbpmbwfxvew4chh/IMG_3254.jpg?dl=0
&ref(https://www.dropbox.com/s/dbpmbwfxvew4chh/IMG_3254.jpg?dl=0);

**全体の構造について [#z344e3a1]
大きく分けて車両部分、ペンの昇降部分の二つに分けられる。この機械ではまず縦線を引き、次に横線を引くようにプログラミングされている。ペンの上げ下げにはスピードが付きすぎ、機械が壊れる可能性があるので、動作ごとにレストをとり、慎重な動きをする構造となった。

*プログラミングについて [#ye0d869f]
**プログラム [#u10b8221]
 task main()
 {

 #define TURN_TIME 80
 #define turn_left OnFwd(OUT_C);OnRev(OUT_A);Wait(TURN_TIME);Off(OUT_AC);
 #define turn_right OnFwd(OUT_A);OnRev(OUT_C);Wait(TURN_TIME);Off(OUT_AC);
 #define turn_right2 OnFwd(OUT_A);OnRev(OUT_C);Wait(90);Off(OUT_AC);
 #define pen_down Off(OUT_AC);OnFwd(OUT_B);Wait(20);Off(OUT_B);Wait(200);
 #define pen_up Off(OUT_AC);OnRev(OUT_B);Wait(20);Off(OUT_B);Wait(200);

    pen_down;
    OnRev(OUT_AC);
    Wait(30);
    pen_up;
    OnFwd(OUT_AC);
    Wait(30);
    turn_left;
    OnFwd(OUT_AC);
    Wait(25);
    turn_right;
    pen_down;
    OnRev(OUT_AC);
    Wait(30);
    pen_up;
    OnRev(OUT_AC);
    Wait(30);    
    pen_down;
    OnRev(OUT_AC);
    Wait(60);
    pen_up;
    OnFwd(OUT_AC);
    Wait(135);
    turn_left;
    OnFwd(OUT_AC);
    Wait(15);
    turn_right2;
    pen_down;
    OnRev(OUT_AC);
    Wait(45);
    pen_up;
    OnRev(OUT_AC);
    Wait(30);
    pen_down;
    OnRev(OUT_AC);
    Wait(60);
    pen_up;
    OnFwd(OUT_AC);
    Wait(140);
    turn_left;
    OnFwd(OUT_AC);
    Wait(20);
    turn_right;
    pen_down;
    OnRev(OUT_AC);
    Wait(55);
    pen_up;//横線終了
    OnFwd(OUT_AC);
    Wait(10);
    Off(OUT_AC);
    turn_right;
    OnFwd(OUT_AC);
    Wait(60);                            
    pen_down;
    OnRev(OUT_AC);
    Wait(20);
    pen_up;
    OnRev(OUT_AC);
    Wait(37);
    pen_down;
    OnRev(OUT_AC);
    Wait(10);
    pen_up;
    OnFwd(OUT_AC);
    Wait(70);
    turn_right2;
    OnFwd(OUT_AC);
    Wait(30);
    turn_left;
    pen_down;
    OnRev(OUT_AC);
    Wait(20);
    pen_up;
    OnRev(OUT_AC);
    Wait(15);
    pen_down;
    OnRev(OUT_AC);
    Wait(20);
    pen_up;
    OnRev(OUT_AC);
    Wait(7);
    pen_down;
    OnRev(OUT_AC);
    Wait(10);
    pen_up;
    OnFwd(OUT_AC);
    Wait(72);
    turn_right;
    OnFwd(OUT_AC);
    Wait(60);
    turn_left;
    pen_down;
    OnRev(OUT_AC);
    Wait(75);
    pen_up;//縦線終了
 }


**プログラミングにおいて気を付けた・工夫した点 [#ia09d885]
プログラミングにおいて工夫した点は、何度も右回転,左回転を繰り返すうちに回転角が小さくなり、直線を書くことが難しい状況であった。それを解消するために右回転の定義を2つ作り、回転角が小さくなった時点でturn_right2という回転角を大きくしたプログラミングを入れることで問題を解消した。

気を付けた点は、文字として認識できるように線をつなげた点である。進んだ秒数だけ戻っても元の位置に戻ることはあまりなく、調整することに多くの時間をかけた。

*まとめ [#nb599d0c]
**今回の課題を振り返って [#ea34efaa]
人生で初めてプログラムを作り、機械を動かした。すべてが初めてで、分からないことやうまくRISに転送できないことが多発したが、形になり実際に動いてくれた時には感動とともに達成感が込み上げてきた。
**反省点 [#m3d6d392]
今回のプログラミンの目標として見た目でも内容でも簡潔にすることが挙げられていたが、慣れない作業と微調整などにより目指していた簡潔な見た目にはならなかった。知識と技術を身に着けてより良いプログラミングができるように努力しなければならない。


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS