2012a/A2/Jiro/M2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2012a/Member]]
*目次 [#cb0b9ab2]
#contents
*課題2 ライントレースをするロボット [#x4757067]
**コース作成の条件 [#oc0654b0]
・四つの出口を作る。
・交差点を二つ作る。
・直角カーブを作る。
・ヘアピンカーブを作る。
この中で特に苦しんだのは直角カーブと交差点でしょうか。
**ルール [#c30b3414]
出口のうちの一つから入り一周半して反対側の出口から出る。
では、それぞれの紹介を始めて行きたいと思います。
**コースの紹介 [#ib4b7a27]
&ref(コース.JPG);
書くときに特に予定も立てず、勢いでやってしまったのがこの課題での最大のミスでしょうか。
このコースでの問題点をあげるなら、
・直角カーブが100度くらいある。
・交差点が直行していない。
・ヘアピンカーブが反り返りすぎている。
・入り口がT字ではなく横向きのY字などの歪な形
などなど高難易度のコースとなっています。
**ロボット紹介 [#va02c617]
ロボットは何段階かに分けて進化していっています。
まずはver.1から
&ref(P1000063.jpg);
横からの写真
剥き出しのギアは全バージョンに共通する特徴です。
&ref(正面から.jpg);
正面から
&ref(裏返し.jpg);
裏返した状態 中心の青いものがセンサーで、ロボットの中心についています
ver.1は試作品となっておりとりあえずどのように作るか、
を考えるために組んでおり、すこし脆くなっていたり、センサーが一つしかなかったりします。
**プログラム紹介 [#ld4dca8c]
#define THRESHOLD 45 //閾値
#define go_st OnFwd(OUT_A+OUT_C);
#define go_le1 Off(OUT_A); OnFwd(OUT_C); OnRev(OUT_A);
#define go_ri1 Off(OUT_C); OnFwd(OUT_A); OnRev(OUT_C);
#define go_le2 SetPower(OUT_A,2); SetPower(OUT_C,0);Off(OUT_A); OnFwd(OUT_C); OnRev(OUT_A);
#define go_ri2 SetPower(OUT_A,0); SetPower(OUT_C,2);Off(OUT_C); OnFwd(OUT_A); OnRev(OUT_C);
#define go_le3 SetPower(OUT_A,2); SetPower(OUT_C,0);Off(OUT_A); OnFwd(OUT_C); OnRev(OUT_A);
#define go_ri3 SetPower(OUT_A,4); SetPower(OUT_C,1);Off(OUT_C); OnFwd(OUT_A); OnRev(OUT_C);
#define t_overa 1170
#define t_overb 1380
#define t_overc 1700
#define t_overd 2750
#define t_overe 3500
#define t_overf 3800
#define t_overg 4700
task main()
{
ClearTimer(0); //タイマーリセット
SetPower(OUT_A,0);
SetPower(OUT_C,0);
SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_3, SENSOR_LIGHT);
int cross = 0; //両方黒になった 回数をカウント
while(true){ //百回きたら止める。
if(SENSOR_1<THRESHOLD&&SENSOR_3<THRESHOLD){ //両方黒線の上に いるとき
SetPower(OUT_A,0);
SetPower(OUT_C,0);
go_st;
cross++; //カウントする
}else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)<=t_overa){ //3だけ黒線の上にあるとき
PlaySound(SOUND_CLICK);
go_st;
Wait(5);
SetPower(OUT_A,0);
SetPower(OUT_C,4);
go_ri1;
}else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)<=t_overa){ //1だけ黒線の上にある時
PlaySound(SOUND_CLICK);
go_st
Wait(5);
SetPower(OUT_A,4);
SetPower(OUT_C,0);
go_le1;
}else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overa && FastTimer(0)<=t_overb){ //1だけ黒線の上にあるとき
PlaySound(SOUND_UP) ;
go_ri3;
}else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overa && FastTimer(0)<=t_overb){ //3だけ黒線の上にある時
PlaySound(SOUND_UP) ;
SetPower(OUT_A,0);
SetPower(OUT_C,0);
go_le3;
}else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overb && FastTimer(0)<=t_overc){ //3だけ黒線の上にあるとき
PlaySound(SOUND_CLICK);
go_st;
Wait(5);
SetPower(OUT_A,0);
SetPower(OUT_C,4);
go_ri1;
}else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overb && FastTimer(0)<=t_overc){ //1だけ黒線の上にある時
PlaySound(SOUND_CLICK);
go_st
Wait(5);
SetPower(OUT_A,4);
SetPower(OUT_C,0);
go_le1;
PlaySound(SOUND_UP) ;
}else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overc && FastTimer(0)<=t_overd){ //1だけ黒線の上にあるとき
PlaySound(SOUND_UP) ;
SetPower(OUT_A,0);
SetPower(OUT_C,0);
go_ri2;
}else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overc && FastTimer(0)<=t_overd){ //3だけ黒線の上にある時
PlaySound(SOUND_UP) ;
SetPower(OUT_A,0);
SetPower(OUT_C,0);
go_le2;
}else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overd && FastTimer(0)<=t_overe){ //3だけ黒線の上にあるとき
PlaySound(SOUND_CLICK);
go_st;
Wait(5);
SetPower(OUT_A,0);
SetPower(OUT_C,4);
go_ri1;
}else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overd && FastTimer(0)<=t_overe){ //1だけ黒線の上にある時
PlaySound(SOUND_CLICK);
go_st
Wait(5);
SetPower(OUT_A,4);
SetPower(OUT_C,0);
go_le1;
}else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overe && FastTimer(0)<=t_overf){ //1だけ黒線の上にあるとき
PlaySound(SOUND_UP) ;
SetPower(OUT_A,0);
SetPower(OUT_C,0);
go_ri2;
}else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overe && FastTimer(0)<=t_overf){ //3だけ黒線の上にある時
PlaySound(SOUND_UP) ;
SetPower(OUT_A,0);
SetPower(OUT_C,0);
go_le2;
}else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overf){ //3だけ黒線の上にあるとき
PlaySound(SOUND_CLICK);
go_st;
Wait(5);
SetPower(OUT_A,0);
SetPower(OUT_C,4);
go_ri1;
}else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overf){ //1だけ黒線の上にある時
PlaySound(SOUND_CLICK);
go_st
Wait(5);
SetPower(OUT_A,4);
SetPower(OUT_C,0);
go_le1;
}else if(SENSOR_1>THRESHOLD && SENSOR_3>THRESHOLD){ //両方黒の外にあるとき
SetPower(OUT_A,0);
SetPower(OUT_C,0);
go_st;
}
}
}
終了行:
[[2012a/Member]]
*目次 [#cb0b9ab2]
#contents
*課題2 ライントレースをするロボット [#x4757067]
**コース作成の条件 [#oc0654b0]
・四つの出口を作る。
・交差点を二つ作る。
・直角カーブを作る。
・ヘアピンカーブを作る。
この中で特に苦しんだのは直角カーブと交差点でしょうか。
**ルール [#c30b3414]
出口のうちの一つから入り一周半して反対側の出口から出る。
では、それぞれの紹介を始めて行きたいと思います。
**コースの紹介 [#ib4b7a27]
&ref(コース.JPG);
書くときに特に予定も立てず、勢いでやってしまったのがこの課題での最大のミスでしょうか。
このコースでの問題点をあげるなら、
・直角カーブが100度くらいある。
・交差点が直行していない。
・ヘアピンカーブが反り返りすぎている。
・入り口がT字ではなく横向きのY字などの歪な形
などなど高難易度のコースとなっています。
**ロボット紹介 [#va02c617]
ロボットは何段階かに分けて進化していっています。
まずはver.1から
&ref(P1000063.jpg);
横からの写真
剥き出しのギアは全バージョンに共通する特徴です。
&ref(正面から.jpg);
正面から
&ref(裏返し.jpg);
裏返した状態 中心の青いものがセンサーで、ロボットの中心についています
ver.1は試作品となっておりとりあえずどのように作るか、
を考えるために組んでおり、すこし脆くなっていたり、センサーが一つしかなかったりします。
**プログラム紹介 [#ld4dca8c]
#define THRESHOLD 45 //閾値
#define go_st OnFwd(OUT_A+OUT_C);
#define go_le1 Off(OUT_A); OnFwd(OUT_C); OnRev(OUT_A);
#define go_ri1 Off(OUT_C); OnFwd(OUT_A); OnRev(OUT_C);
#define go_le2 SetPower(OUT_A,2); SetPower(OUT_C,0);Off(OUT_A); OnFwd(OUT_C); OnRev(OUT_A);
#define go_ri2 SetPower(OUT_A,0); SetPower(OUT_C,2);Off(OUT_C); OnFwd(OUT_A); OnRev(OUT_C);
#define go_le3 SetPower(OUT_A,2); SetPower(OUT_C,0);Off(OUT_A); OnFwd(OUT_C); OnRev(OUT_A);
#define go_ri3 SetPower(OUT_A,4); SetPower(OUT_C,1);Off(OUT_C); OnFwd(OUT_A); OnRev(OUT_C);
#define t_overa 1170
#define t_overb 1380
#define t_overc 1700
#define t_overd 2750
#define t_overe 3500
#define t_overf 3800
#define t_overg 4700
task main()
{
ClearTimer(0); //タイマーリセット
SetPower(OUT_A,0);
SetPower(OUT_C,0);
SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_3, SENSOR_LIGHT);
int cross = 0; //両方黒になった 回数をカウント
while(true){ //百回きたら止める。
if(SENSOR_1<THRESHOLD&&SENSOR_3<THRESHOLD){ //両方黒線の上に いるとき
SetPower(OUT_A,0);
SetPower(OUT_C,0);
go_st;
cross++; //カウントする
}else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)<=t_overa){ //3だけ黒線の上にあるとき
PlaySound(SOUND_CLICK);
go_st;
Wait(5);
SetPower(OUT_A,0);
SetPower(OUT_C,4);
go_ri1;
}else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)<=t_overa){ //1だけ黒線の上にある時
PlaySound(SOUND_CLICK);
go_st
Wait(5);
SetPower(OUT_A,4);
SetPower(OUT_C,0);
go_le1;
}else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overa && FastTimer(0)<=t_overb){ //1だけ黒線の上にあるとき
PlaySound(SOUND_UP) ;
go_ri3;
}else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overa && FastTimer(0)<=t_overb){ //3だけ黒線の上にある時
PlaySound(SOUND_UP) ;
SetPower(OUT_A,0);
SetPower(OUT_C,0);
go_le3;
}else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overb && FastTimer(0)<=t_overc){ //3だけ黒線の上にあるとき
PlaySound(SOUND_CLICK);
go_st;
Wait(5);
SetPower(OUT_A,0);
SetPower(OUT_C,4);
go_ri1;
}else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overb && FastTimer(0)<=t_overc){ //1だけ黒線の上にある時
PlaySound(SOUND_CLICK);
go_st
Wait(5);
SetPower(OUT_A,4);
SetPower(OUT_C,0);
go_le1;
PlaySound(SOUND_UP) ;
}else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overc && FastTimer(0)<=t_overd){ //1だけ黒線の上にあるとき
PlaySound(SOUND_UP) ;
SetPower(OUT_A,0);
SetPower(OUT_C,0);
go_ri2;
}else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overc && FastTimer(0)<=t_overd){ //3だけ黒線の上にある時
PlaySound(SOUND_UP) ;
SetPower(OUT_A,0);
SetPower(OUT_C,0);
go_le2;
}else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overd && FastTimer(0)<=t_overe){ //3だけ黒線の上にあるとき
PlaySound(SOUND_CLICK);
go_st;
Wait(5);
SetPower(OUT_A,0);
SetPower(OUT_C,4);
go_ri1;
}else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overd && FastTimer(0)<=t_overe){ //1だけ黒線の上にある時
PlaySound(SOUND_CLICK);
go_st
Wait(5);
SetPower(OUT_A,4);
SetPower(OUT_C,0);
go_le1;
}else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overe && FastTimer(0)<=t_overf){ //1だけ黒線の上にあるとき
PlaySound(SOUND_UP) ;
SetPower(OUT_A,0);
SetPower(OUT_C,0);
go_ri2;
}else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overe && FastTimer(0)<=t_overf){ //3だけ黒線の上にある時
PlaySound(SOUND_UP) ;
SetPower(OUT_A,0);
SetPower(OUT_C,0);
go_le2;
}else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overf){ //3だけ黒線の上にあるとき
PlaySound(SOUND_CLICK);
go_st;
Wait(5);
SetPower(OUT_A,0);
SetPower(OUT_C,4);
go_ri1;
}else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overf){ //1だけ黒線の上にある時
PlaySound(SOUND_CLICK);
go_st
Wait(5);
SetPower(OUT_A,4);
SetPower(OUT_C,0);
go_le1;
}else if(SENSOR_1>THRESHOLD && SENSOR_3>THRESHOLD){ //両方黒の外にあるとき
SetPower(OUT_A,0);
SetPower(OUT_C,0);
go_st;
}
}
}
ページ名: