[[2019a/Member]] 目次 #contents *課題について [#i1cb85b4] 課題についてはリンクを参照[[2019a/Mission3]] *ロボットについて [#l8a9a609] -今回のロボットは、モーターを球をつかむ用のアームで2つ、ロボットの車部分で2つ用いた。こうすることによって、スムーズにロボットが動くと思ったからだ。NXTを通信することによって4台のモーターを動かすことができる。 -ロボットを前からみた図 &ref(2019a/Member/Daisuke/Mission3/ロボット10.jpg.jpg,100%,てすとa); -ロボットを右斜め前からみた図 &ref(2019a/Member/Daisuke/Mission3/ロボット11.jpg.jpg,100%,てすとb); -ロボットを後ろからみた図 &ref(2019a/Member/Daisuke/Mission3/ロボット12.jpg.jpg,100%,てすとc); -ロボットを左上からみた図 &ref(2019a/Member/Daisuke/Mission3/ロボット13.jpg.jpg,100%,てすとd); **センサーについて [#bf0fcd13] -今回のロボットはセンサーの位置を工夫した。課題2での失敗を反省して、センサーをタイヤの軸となるべく重なるように取り付けた。そうすることによってロボットが回転するとき、センサーが大きく黒線からずれるのを防ごうと思った。また、紙とセンサーをほぼ水平にしてより正確に色を判断できるようにした。 **アームについて [#i2958f66] 上記の通り、アームの方には2つのモーターを使用しそれぞれアームの上下運動と開閉運動に使った。開閉運動をするアームの方はギアをたくさんつけて、1つのモーターで左右の開閉ができるようにした。上下運動の方はひし形の形をした部分の角の点を回転させることでそれを可能にした。モーターをロボットに直接つけて上下させようとすると先端についているモーターやアームが重すぎて上下する用のモーターに負荷がかかる。だから僕たちは、アームのモーターに小さいギア、ひし形の角の側に大きなギアを付けることでモーターにかかる負担を少なくして、安定した動作の実現と部品破損のリスクの軽減に成功した。 *プログラムについて [#rf36b083] -今回はNXT2台(マスター側とスレーブ側)を通信させて、マスター側はロボットの移動を、スレーブ側はアームの開閉と上下をそれぞれ担当している。また、ライントレースの際、センサーの判定をより繊細なものにするためにセンサーの値を5段階で判定した。NXTのモニター機能でセンサーが完全に線の上に乗っかっている時と白いところにいるときの数値を計り、それぞれをblackとwhiteと定義する。よって、black以下の数値の時は線上、white以上の数値の時は線外、これらの数値の間の場合は白いところと黒線の境目の灰色のところにセンサーがあるということになる。 **マスター側のプログラムについて [#u586f3a9] ***定義 [#a9467efe] -今回のプログラムでは定義を次のようにした。 #define black 30 //完全に黒のときの値 #define white 50 //完全に白のときの値 #define speedH 60 //速いスピード #define speedL 30 //遅いスピード #define speedM 20 //逆回転ときのスピード #define mae OnFwd(OUT_BC,speedH); //前進の動作 #define ushiro OnRev(OUT_BC,speedH); //後退の動作 #define turnRRR OnFwd(OUT_C,speedH);OnRev(OUT_B,speedM); //一番キツい右曲がり #define turnLLL OnFwd(OUT_C,speedH);OnRev(OUT_C,speedM); //一番キツい左曲がり #define turnRR OnFwd(OUT_C,speedH);Off(OUT_B); //右曲がり #define turnLL OnFwd(OUT_B,speedH);Off(OUT_C); //左曲がり #define turnR OnFwd(OUT_C,speedH);OnFwd(OUT_B,speedL); //緩めの右曲がり #define turnL OnFwd(OUT_B,speedH);OnFwd(OUT_C,speedL); //緩めの左曲がり #define step 1 //ライントレースの動作時間 #define jikan 100 //完全に黒で居続けられる時間の最大値(しきい値) #define teishi Off(OUT_BC);Wait(300); //一時停止 #define CONN 1 //スレイブの番号 #define SIGNAL1 11 //スレイブとやり取りする信号の番号 #define SIGNAL2 12 //同上 #define SIGNAL3 13 //同上 #define SIGNAL4 14 //同上 #define curveL OnFwd(OUT_B,20);OnRev(OUT_C,10); //左に回転してカーブする動作 #define black 30 //完全に黒のときの値 #define white 50 //完全に白のときの値 #define speedH 60 //速いスピード #define speedL 30 //遅いスピード #define speedM 20 //逆回転ときのスピード #define mae OnFwd(OUT_BC,speedH); //前進の動作 #define ushiro OnRev(OUT_BC,speedH); //後退の動作 #define turnRRR OnFwd(OUT_C,speedH);OnRev(OUT_B,speedM); //一番キツい右曲がり #define turnLLL OnFwd(OUT_C,speedH);OnRev(OUT_C,speedM); //一番キツい左曲がり #define turnRR OnFwd(OUT_C,speedH);Off(OUT_B); //右曲がり #define turnLL OnFwd(OUT_B,speedH);Off(OUT_C); //左曲がり #define turnR OnFwd(OUT_C,speedH);OnFwd(OUT_B,speedL); //緩めの右曲がり #define turnL OnFwd(OUT_B,speedH);OnFwd(OUT_C,speedL); //緩めの左曲がり #define step 1 //ライントレースの動作時間 #define jikan 100 //完全に黒で居続けられる時間の最大値(しきい値) #define teishi Off(OUT_BC);Wait(300); //一時停止 #define CONN 1 //スレイブの番号 #define SIGNAL1 11 //スレイブとやり取りする信号の番号 #define SIGNAL2 12 //同上 #define SIGNAL3 13 //同上 #define SIGNAL4 14 //同上 #define curveL OnFwd(OUT_B,20);OnRev(OUT_C,10); //左に回転してカーブする動作