- 追加された行はこの色です。
- 削除された行はこの色です。
[[2014a/Member]]
目次 [#i8abe013]
#contents
* メンバー紹介[#f5b97111]
gamigami (自分) ラインのトレースを頑張った。
gomibakudan (協力した仲間)
gamigami (自分)
gomibakudan (協力した仲間)
*課題の説明 [#r3df13cf]
詳しくは[[2014a/Mission1]]をご覧ください
詳しくは[[2014a/Mission1]]をご覧ください
*ロボットの紹介 [#kb75725f]
#ref(2014a/Member/gamigami/Mission1/robo1.jpg,%,ロボットの機構)
&ref(robo2.jpg,100%,センサーの位置);
*プログラム [#o2155e95]
**定義付け [#hba138b1]
#define THRESHOLD 36 // しきい値
#define sp_H SetPower(OUT_AC,7); // スピード調整:早い
#define sp_L SetPower(OUT_AC,2); // スピード調整:遅い
#define go sp_H; OnFwd(OUT_AC); // 前進
#define turn_left1 sp_L; OnFwd(OUT_C); OnRev(OUT_A) // 右旋回
#define turn_left0 sp_L; OnFwd(OUT_C); Off(OUT_A) // 右回転
#define turn_right1 sp_L; OnFwd(OUT_A); OnRev(OUT_C); // 左旋回
#define turn_right0 sp_L; OnFwd(OUT_A); Off(OUT_C); // 左回転
#define STEP 1 // 行動を行う
#define nMAX 10 // 線上での行動が連続で10回行うとき指示が変わる
#define CROSS_TIME 50 // 交差点で直進させる時間
#define cross_line sp_L; OnFwd(OUT_AC); Wait(CROSS_TIME); //交差点を直進させる指示
#define turn_time 60 // 旋回させる時間
#define the_time 16 // ボールを取る部分のモーターが動く時間
**基本の動作のプログラム [#k5706497]
task main()
{
SetSensor(SENSOR_2,SENSOR_LIGHT); // 光センサーを使うように指示
int online=0; // 交差点または急カーブを判別
int next=0; // 交差点と急カーブの数をカウント
go; Wait(100); // 枠の中からライン上に移動
while(true) {
while (online < nMAX) { // ライン上での行動が10回同じ行動を取るまで繰り返し
if (SENSOR_2 < THRESHOLD - 6) {
turn_left1; // もしセンサーがしきい値より6未満の明るさ(線の上)を感知したら小さければ左旋回
online++; // 判別開始
} else if (SENSOR_2 < THRESHOLD - 1) {
turn_left0; //もしセンサーがしきい値より1未満の明るさ(境界線のライン側)を感知したらら左回転
online=0; // 判別し直し
} else if (SENSOR_2 < THRESHOLD + 2) {
go; //もしセンサーがしきい値より2大きい明るさまで(ラインの境界線上)を感知したら直進
online=0; // 判別し直し
} else if (SENSOR_2 < THRESHOLD + 5) {
turn_right0; //もしセンサーがしきい値より5大きい明るさまで(境界線の白紙側)を感知したら右回り
online=0; //判別し直し
} else if (SENSOR_2 < THRESHOLD +100) {
turn_right1; // もしセンサーがしきい値より100大きい明るさまで(白紙上)を感知したら右旋回
online=0; // 判別し直し
}
Wait(STEP); // 行動を一回行う
}
**途中のプログラム [#x5d3a3f4]
***最初のカーブ(曲がり切れないため) [#ce306594]
if (next < 1 ) { // 最初のカーブの内側で曲がり切れないため修正するプログラム
PlaySound(SOUND_UP); // 音を鳴らして動作確認
Wait(5); turn_left1;
Wait(50;
next++; // 次の動作に移行させる
online=0; // 別し直し
}
***最初の交差点でのプログラム [#h4e6e2e3]
else if (next == 1 ) {
turn_right1; // 旋回して方向転換さる
Wait(turn_time);
OnFwd(OUT_B);Wait(the_time); Off(OUT_B); // ピンポン玉をキャッチ
cross_line; // 交差点を通過させる
online=0;
next++; //次の動作に移行
}
***二個目の交差点でのプログラム [#e5094a6b]
else if (next == 2 ){ // 二個目の交差点でのoプログラム
turn_right1; // 旋回で方向転換
Wait(55);
OnFwd(OUT_AC); Wait(10); // 短い距離を移動
online=0; // 判別し直し
next++; // 次の動作に移行
}
***直角カーブでのプログラム [#paf27051]
else if (next == 3 ) {
PlaySound(SOUND_DOWN); // 音による動作確認
Wait(5); turn_left1;
Wait(50);
next++; // 次の動作に移行
online=0; // 判別し直し
}
***三個目の交差点でのプログラム [#k49287bf]
else if(next == 4)
turn_right1; // 方向転換
Wait(turn_time - 15); // 直進が必要なためturn_timeより短い時間
cross_line; // 交差点を直進
online=0; // 判別し直し
next++; // 次の行動に移行
}
***シュートのプログラム [#b0e8f2c0]
else if(next == 5) {
PlaySound(SOUND_UP); // 音で動作確認
OnRev(OUT_B); Wait(the_time); Off(OUT_B); // ピンポン玉の支えを解除
OnFwd(OUT_AC); Wait(90); Off(OUT_AC); // ボールを押す
OnFwd(OUT_AC); Wait(90); Off(OUT_AC); // ボールを押す
}
}
}
*反省 [#kadee4dc]
仲間と違う機構でプログラムをしてしまいなかなか完成しなかった.またピンポン玉をキャッチする部分を付けてからプログラムを打たなかったため誤作動が多かった.プログラムではカウント式にしたので直角カーブと交差点の判別をさせてないのため,誤作動が起こるとすべてやり直さなくてはいけないのでその点は次の課題でしっかりと改善したい.
**写真の添付 [#kb99a448]
添付
参照
アップロード
ページ名を打ちこむ
・&を使うときは後ろにセミコロン
// 直角カーブでのプロ
グラム
・#のときはいらない
・画像を並べるときは&
**プログラム [#p8e75004]
・行の一番最初に半角のスペースを入れる
・コメント文などで説明をする(特に変数は必要)