[[2018b/Member]] 目次 #contents *課題1 [#t713a5e0] これまで住んだことのある都道府県名、市町村名、地区名などの中から2文字以上、かつ合計10画以上のものを選び、それをA4の紙を書くロボットを製作せよ。 私たちは書きやすさを考慮し、仙台という文字を書くことにした。私は「仙」という文字のプログラミングを担当した。 *ロボットの説明 [#l8dce5b3] 私たちのグループでは、当初プリンタ型のロボットを作ろうと考えていたが、斜線が上手く書けなかったり、NXTではプリンタ型のロボットが出来ないと思い、車両にペンを固定させた書道ロボットを作成することにした。 &ref(2018b/Member/Tom/Mission1/robo.jpg,50%,ロボット); **製作過程の問題点 [#t4d3de17] 問題点1 制御スピードについて 始めはロボットのスピードを50で動かしたが、左右に曲がるときに、片側の車輪が浮き、車体が傾いた。 改善策1 私たちはロボットのスピードが速すぎることが原因でこのような問題が発生したのだと考え、スピードを50から30へと下げることでこの問題を解決した。 **走行時の問題点 [#i7892366] 問題点1 使用するペンについて アームを下げるたびにペンの角度が変化して文字が書けなくなってしまったり、ペンが下がりすぎて車体を浮かせてしまう。 改善策1 &ref(2018b/Member/Tom/Mission1/39109.jpg,50%,ロボット); プログラムを変えることは難しいと考えたため、使用するペンを鉛筆、名前ペンから筆ペンへと変更した。筆ペンは、先のほうが鉛筆などと比べて柔らかく、ペンが下がりすぎてもペンの角度を微調整してくれるため、これらの問題を解決することが出来た。 問題点2 文字の大きさの調節について 文字を書いてみるとA4の紙に文字が収まらずにうまく字が書けない。 改善策2 ロボットを動かす時間をたくさん定義し、読める文字が書けるまで定義を書き直し、文字の間隔を微調整した。 **工夫した点 [#m9a77c71] 重心を真ん中にするために左右対称になるロボットを製作した。 旋回をした時に文字がつながらなくなるのを防ぐために、2つのタイヤの中点にペンを配置した。 後輪をを取り付けることで重心を少し前にずらし、回転をよりスムーズに行えるようにした。 &ref(2018b/Member/Tom/Mission1/39104.jpg,50%,ロボット); *プログラムの説明 [#y3453750] **各定義の意味 [#yb6efdbe] M_T=Move_Time ロボットが動く。 M_T=Move_Time 時間を定義する。 STP=STOP ロボットが停止する。 SSM=SUSUME 前進する。 MDR=MODORE 後退する。 MMGR=MiginiMAGARE 45度右に回る。 HMGR=HidariniMAGARE 45度左に回る。 PD=PenDown ペンを持つアームを上げる。 PU=PenUp ペンを持つアームを下げる。 定義は大きく分けて以下の8種類を作成した。 ロボットの動く時間の定義 #define M_T 250 //0.250秒を表している #define M_T1 500 //0.500秒を表している #define M_T2 707 //0.707秒を表している #define M_T3 1000 //1.000秒を表している #define M_T4 1500 //1.500秒を表している #define M_T5 1875 //1.875秒を表している #define M_T6 275 //0.275秒を表している #define M_T7 457 //0.457秒を表している ロボットの走行スピードの定義 #define SP 30 モータの停止の定義 #define STP Wait(M_T) //0.250秒間モータが停止する #define STP1 Wait(M_T1) //0.500秒間モータが停止する #define STP2 Wait(M_T2) //0.707秒間モータが停止する #define STP3 Wait(M_T3) //1.000秒間モータが停止する #define STP4 Wait(M_T4) //1.500秒間モータが停止する #define STP5 Wait(M_T5) //1.875秒間モータが停止する #define STP6 Wait(M_T6) //0.275秒間モータが停止する #define STP7 Wait(M_T7) //0.457秒間モータが停止する ロボットの停止時間の定義 #define TIS Off(OUT_BC);Wait(M_T1) //0.250秒間ロボットが停止する ロボットの前進の定義 #define SSM OnFwd(OUT_BC,SP);STP;TIS //0.250秒間ロボットが前進する #define SSM1 OnFwd(OUT_BC,SP);STP1;TIS //0.500秒間ロボットが前進する #define SSM2 OnFwd(OUT_BC,SP);STP2;TIS //0.707秒間ロボットが前進する #define SSM3 OnFwd(OUT_BC,SP);STP3;TIS //1.000秒間ロボットが前進する #define SSM4 OnFwd(OUT_BC,SP);STP4;TIS //1.500秒間ロボットが前進する #define SSM5 OnFwd(OUT_BC,SP);STP7;TIS //0.457秒間ロボットが前進する ロボットの後退の定義 #define MDR OnRev(OUT_BC,SP);STP;TIS //0.250秒間ロボットが後退する #define MDR1 OnRev(OUT_BC,SP);STP1;TIS //0.500秒間ロボットが後退する #define MDR2 OnRev(OUT_BC,SP);STP2;TIS //0.707秒間ロボットが後退する #define MDR3 OnRev(OUT_BC,SP);STP3;TIS //1.000秒間ロボットが後退する #define MDR4 OnRev(OUT_BC,SP);STP4;TIS //1.500秒間ロボットが後退する #define MDR5 OnRev(OUT_BC,SP);STP7;TIS //0.457秒間ロボットが後退する 旋回の定義 #define MMGR OnFwd(OUT_B,SP);OnRev(OUT_C,SP);STP6;TIS; //右に45度回転する #define HMGR OnFwd(OUT_C,SP);OnRev(OUT_B,SP);STP6;TIS; //左に45度回転する ペンの上げ下げの定義 #define PD RotateMotor(OUT_A,50,-90);Wait(M_T3); //ペンを下ろす #define PU RotateMotor(OUT_A,50,90);Wait(M_T3); //ペンを上げる **ロボットの稼働プログラム [#wf24613e] 文字は下記の写真のような書き順で書き、プログラムの右側の文字が書き順と対応している。 &ref(2018b/Member/Tom/Mission1/SENDAI.jpg,50%,ロボット); ***「仙」のイ [#w41cc116] SSM3; //�,鮟颪�。 TIS; PU; //ペンを上げる。 MDR1; //�,能颪い神�の中点まで戻る。ここで�,�書き終わる。 TIS; HMGR; //�△鮟颪�ために左に45度回転する。 TIS; PD; //ペンを下げる。 SSM3; //�△鮟颪�。 TIS; PU; //ここで�△�書き終わる。 HMGR; //ここからは��を書くための移動のプログラム。 TIS; HMGR; //左に旋回を2回することで90度回転し右を向く。 TIS; SSM1; //��を書くために右に進む。 TIS; HMGR; TIS; HMGR; //��を書くために左に2回旋回する。 TIS; //移動完了。 ***「仙」の山 [#j18e14bd] PD; //ペンを下げる。 SSM1; //��を書く。 TIS; //ここで��が書き終わる。 PU; //ペンを上げる。 MDR1; //ここからは�い鮟颪�ための移動のプログラム。 TIS; MMGR; MMGR; //右に2回旋回することで90度回転する。 TIS; //移動完了。 PD; //ペンを下げる。 SSM3; //�い鮟颪�。 TIS; //ここで�い�書き終わる。 PU; //ペンを上げる。 HMGR; //ここからは�イ鮟颪�ための方向転換のプログラム。 TIS; HMGR; //左に2回旋回することで90度回転する。方向転換完了。 PD; //ペンを下げる。 SSM1; //�イ鮟颪�。 TIS; //ここで�イ�書き終わる。 PU; //ペンを上げる。 SSM3; //ここからは�Δ鮟颪�ための移動プログラム。 TIS: HMGR; TIS; HMGR; //左に2回旋回することで90度回転する。 TIS; SSM1; //�い涼翕世留篦浩�上まで移動する。 TIS; HMGR; TIS; HMGR; //左に2回旋回することで90度回転する。 TIS; //移動完了。 PD; //ペンを下げる。 SSM4; //�Δ鮟颪�。 TIS; //ここで�Δ�書き終わる。 PU; //ペンを上げる。 TIS; //ここからは�Г鮟颪�ための移動プログラム。 HMGR; // TIS; HMGR; //左に2回旋回することで90度回転する。 SSM4; //�Г鮟颪�ための初期位置に移動する。 TIS; //移動完了。 ***「台」のロ [#b973208b] PD; //ペンを下げる。 SSM3; //�Г鮟颪�。 TIS; PU; //ペンを上げる。 HMGR; TIS; HMGR; //左に2回旋回することで90度回転し、向きを変える。 TIS; PD; //ペンを下げる。 TIS; SSM1; //�Г梁海�を書く TIS; //ここで�Г�書き終わる。 PU; //ペンを上げる。 TIS; //ここからは�┐鮟颪�ために向きを変えるプログラム。 HMGR; TIS; HMGR; //左に2回旋回することで90度回転し、向きを変える。 TIS; //方向転換完了。 PD; //ペンを下げる。 SSM3; //�┐鮟颪�。 TIS; PU; //ペンを上げる。 HMGR; TIS; HMGR; //左に2回旋回することで90度回転し、向きを変える。 TIS; PD; //ペンを下げる。 SSM1; //�┐梁海�を書く。 TIS; //ここで�┐�書き終わる。 PU; //ペンを上げる。 MDR3; //ここからは��を書くための移動のプログラム。 TIS; HMGR; TIS; HMGR; //左に2回旋回することで90度回転し、向きを変える。 TIS; //移動完了。 ***「台」のム [#c2281337] PD; //ペンを下げる。 SSM3; //��を書く。 TIS; //ここで��が書き終わる。 PU; //ペンを上げる。 HMGR; //ここからは��を書くための移動のプログラム。 HMGR; HMGR; //左に3回旋回することで135度回転し向きを変える。 MDR; //��を書くための初期位置に移動する。 TIS; //移動完了。 PD; //ペンを下げる。 SSM1; //��を書く。 TIS; //ここで��が書き終わる。 PU; //ペンを上げる。 SSM5; //ここからは��を書くための移動のプログラム。前進する。 TIS; HMGR; HMGR; //左に2回旋回することで90度回転し、向きを変える。 TIS; //移動完了。 PD; //ペンを下げる。 SSM2; //��を書く。 TIS; //ここで��が書き終わる。 PU; //ペンを上げる。 *実際に書けた文字 [#x0f21595] &ref(2018b/Member/Tom/Mission1/39151.jpg,50%,ロボット); A4の紙でもぎりぎりのサイズの大きさの文字ではあるが何とか書くことが出来た。 *考察 [#w6c5cc02] 車体にペンを取り付けて走行するロボットは1度旋回を失敗するとミスを誘発してしまう。また、OnFwdとOnRevの関数で旋回をすると回転する角度の調節が難しいうえに電池の残量が回転の角度に大きな影響を与えていた。このことから、旋回をするときにはRotateMotor関数を利用したほうが良いと考えられる。