[[2018a/Member]] *課題 [#jb8cc9e1] ** 内容 [#g6bf40a8] A4用紙に地元に関する十画以上の二文字を書くロボットの製作とプログラムの作成 私は広島と関わりのある「呉市」の二文字を書いた *ロボットの説明 [#d431317c] **本体について [#a5b4079e] 今回作ったロボットは四輪の車に、モーターを用いてペンの上げ下げを行う機構を取り付けた。 ペンを固定し、紙を車輪で動かす機構を考えたが、机との摩擦を考慮した結果ペンを持ったまま動く機械を造ることにした。 本プログラムでは紙の周辺を回り、横軸(x軸)の線を描いた後に、縦軸(y軸)を描き文字を完成させる。 &ref(IMG_3253.jpg); **ペンの上げ下げについて [#i33f1fc4] ペンの上げ下げにはモーターの動力を横回転から縦回転にして、上からペンを押さえつける形をとった。 &ref(IMG_3254.jpg); **全体の構造について [#z344e3a1] 大きく分けて車両部分、ペンの昇降部分の二つに分けられる。この機械ではまず縦線を引き、次に横線を引くようにプログラミングされている。ペンの上げ下げにはスピードが付きすぎ、機械が壊れる可能性があるので、動作ごとにレストをとり、慎重な動きをする構造となった。 *プログラミングについて [#ye0d869f] **書き順について [#s2ce566a] &ref(IMG_3862.JPG); 上図のように書き順を定めた. **プログラム [#u10b8221] ***define [#be933b1f] #define TURN_TIME 80 //機械が90°回転するまでの時間 #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); ***横線(x軸)のプログラム [#n8622570] task main(){ pen_down; OnRev(OUT_AC); Wait(30); pen_up; //"呉"1画目終了 OnFwd(OUT_AC); Wait(30); turn_left; OnFwd(OUT_AC); Wait(25); turn_right; //"呉"2画目へ移動 pen_down; OnRev(OUT_AC); Wait(30); pen_up; //"呉"2画目終了 OnRev(OUT_AC); Wait(30); //引き続き"市"1画目へ移動 pen_down; OnRev(OUT_AC); Wait(60); pen_up; //"市"1画目終了 OnFwd(OUT_AC); Wait(135); turn_left; OnFwd(OUT_AC); Wait(15); turn_right2; //"呉"3画目へ移動 pen_down; OnRev(OUT_AC); Wait(45); pen_up; //"呉"4画目終了 OnRev(OUT_AC); Wait(30); //引き続き"市"の2画目へ移動 pen_down; OnRev(OUT_AC); Wait(60); pen_up; //"市"2画目終了 OnFwd(OUT_AC); Wait(140); turn_left; OnFwd(OUT_AC); Wait(20); turn_right; //"呉"4画目へ移動 pen_down; OnRev(OUT_AC); Wait(55); pen_up; //"呉"4画目終了 ****横軸(y軸)のプログラム [#sd57fbf7] OnFwd(OUT_AC); Wait(10); Off(OUT_AC); turn_right; OnFwd(OUT_AC); Wait(60); //"呉"5画目へ移動 pen_down; OnRev(OUT_AC); Wait(20); pen_up; //"呉"5画目終了 OnRev(OUT_AC); Wait(37); //"呉"6画目へ移動 pen_down; OnRev(OUT_AC); Wait(10); pen_up; //"呉"6画目終了 OnFwd(OUT_AC); Wait(70); turn_right2; OnFwd(OUT_AC); Wait(30); turn_left; //"呉"7画目へ移動 pen_down; OnRev(OUT_AC); Wait(20); pen_up; //"呉"7画目終了 OnRev(OUT_AC); Wait(15); //"呉"8画目へ移動 pen_down; OnRev(OUT_AC); Wait(20); pen_up; //"呉"8画目終了 OnRev(OUT_AC); Wait(7); //"呉"9画目へ移動 pen_down; OnRev(OUT_AC); Wait(10); pen_up; //"呉"9画目終了 OnFwd(OUT_AC); Wait(72); turn_right; OnFwd(OUT_AC); Wait(30); turn_left; OnRev(OUT_AC); Wait(35); //"市"3画目へ移動 pen_down; OnRev(OUT_AC); Wait(20); pen_up; //"市"3画目終了 OnFwd(OUT_AC); Wait(55); turn_right; OnFwd(OUT_AC); Wait(30); turn_light; //"市"4画目へ移動 pen_down; OnRev(OUT_AC); Wait(75); pen_up; //"市"4画目終了 OnFwd(OUT_AC); Wait(75); turn_right; OnFwd(OUT_AC); Wait(30); turn_light; OnRev(OUT_AC); Wait(35); //"市"5画目へ移動 pen_down; OnRev(OUT_AC); Wait(20); pen_up; //"市"5画目終了 Off(OUT_AC); //終了 } **プログラミングにおいて気を付けた・工夫した点 [#ia09d885] プログラミングにおいて工夫した点は、何度も右回転,左回転を繰り返すうちに回転角が小さくなり、直線を書くことが難しい状況であった。それを解消するために右回転の定義を2つ作り、回転角が小さくなった時点でturn_right2という回転角を大きくしたプログラミングを入れることで問題を解消した。 気を付けた点は、文字として認識できるように線をつなげた点である。進んだ秒数だけ戻っても元の位置に戻ることはあまりなく、調整することに多くの時間をかけた。 *まとめ [#nb599d0c] **今回の課題を振り返って [#ea34efaa] 人生で初めてプログラムを作り、機械を動かした。すべてが初めてで、分からないことやうまくRISに転送できないことが多発したが、形になり実際に動いてくれた時には感動とともに達成感が込み上げてきた。 **反省点 [#m3d6d392] 今回のプログラミンの目標として見た目でも内容でも簡潔にすることが挙げられていたが、慣れない作業と微調整などにより目指していた簡潔な見た目にはならなかった。知識と技術を身に着けてより良いプログラミングができるように努力しなければならない。