2013b/Member/mato/Mission1
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#contents
*MISSION [#g57706c4]
自作したコースに沿って一周するするロボットを作成せよ。
ただし、次の点に注意すること
一人は時計回り用、もう一人は半時計回うり用のプログラムを...
次のステップでプログラムを作成すること。
-交差点をきちんと認識し、正しく判断して通過できるようにす...
-確実に一周できるようにする。スタート地点から出発して元に...
-空き缶を交差点から10cm以上離した線上に起き、それを一旦ど...
-1個の空き缶でうまくいったら、2個の空き缶でやってみる。
**コース [#ke4b0572]
&ref(2013b/Member/mato/Mission1/route5.jpg);
私は左周りを担当する。
後のプログラムの説明のためにコースを3つに分ける。
右上の円を小円と呼ぶ
*ロボットの説明 [#ya482e58]
&ref(2013b/Member/mato/Mission1/IMG_0558 (3).jpg);
&ref(2013b/Member/mato/Mission1/ロボ.jpg,20%);
-バンパーを中心から離すことで、てこの原理によりタッチセン...
-缶を一本のアームで掴むためにアームをかぎづめ型にした。
-モーターとアームの位置が離れているためゴムを使って動かせ...
*プログラム [#m44b309f]
**定義 [#d1bdcea1]
#define THRESHOLD 43 //閾値
#define HIPOWER 2 //高速
#define LOWPOWER 1 //低速
#define set_power_H SetPower(OUT_AC,HIPOWER); //ACを高速...
#define set_power_L SetPower(OUT_AC,LOWPOWER); //ACを低...
#define go_forward set_power_H; OnFwd(OUT_AC); //前進
#define turn_left1 set_power_L; Off(OUT_A); OnFwd(OUT_C)...
#define turn_left2 set_power_L; OnRev(OUT_A); OnFwd(OUT_...
#define turn_left3 set_power_L; OnRev(OUT_A); //右後進
#define turn_right1 set_power_L; Off(OUT_C); OnFwd(OUT_A...
#define turn_right2 set_power_L; OnRev(OUT_C); OnFwd(OUT...
#define arm_hold OnFwd(OUT_B);Wait(50);Off(OUT_B); //缶...
#define arm_part OnRev(OUT_B);Wait(50);Off(OUT_B); //缶...
#define STEP 1
#define nMAX 4 //カウンタの最大数
#define short_break Off(OUT_AC);Wait(50); //小休止
#define CROSS_TIME 40 //交差点を渡る時間
#define cross_line set_power_L; OnFwd(OUT_AC); Wait(CROS...
#define time0 2000 //?の時間
#define time1 700 //?の時間
**サブルーチン [#a2fda3b2]
-普通のライントレース(5段階評価)
sub normal_trace()
{
if (SENSOR_2 < THRESHOLD -1){
turn_left2;
} else if (SENSOR_2 < THRESHOLD +3){
turn_left1;
} else if (SENSOR_2 < THRESHOLD +7){
go_forward;
} else if (SENSOR_2 < THRESHOLD +8){
turn_right1;
} else {
turn_right2;
}
}
-交差点を渡るライントレース(4回連続で左旋回したら直進)
sub across_line ()
{
int nOnline=0;
while(nOnline < nMAX ){
if(SENSOR_2< THRESHOLD -1) {
turn_left2;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD ){
turn_left1;
}else if(SENSOR_2< THRESHOLD +4){
go_forward;
}else if(SENSOR_2< THRESHOLD +7){
turn_right1;
}else{
turn_right2;
}
nOnline=0;
}
Wait(STEP);
}short_break;PlaySound(2);
turn_right1;Wait(nMAX*STEP);
cross_line;
nOnline=0;
}
-小円の内側を渡るライントレース(右後進を駆使して曲がりき...
sub circle_trace()
{
ClearTimer(0);
while(FastTimer(0) <= time1){
if (SENSOR_2 < THRESHOLD -2){
turn_left3;
} else if (SENSOR_2 < THRESHOLD -1){
turn_left2;
} else if (SENSOR_2 < THRESHOLD +5){
go_forward;
} else {
turn_right1
}
}
}
-缶を退ける
sub can_turn ()
{
set_power_L ;
arm_hold;
OnFwd(OUT_AC); Wait(200);
turn_right2; Wait(500);
arm_part;
turn_left2 ; Wait(500);
}
**メインのプログラム [#yf4e269e]
task main()
{
SetSensor(SENSOR_2, SENSOR_LIGHT);
SetSensor(SENSOR_3, SENSOR_TOUCH);
ClearTimer(0); // タイマーをリセット
while(FastTimer(0) <= time0){ //?まで以下のプログラム...
if (SENSOR_3 == 1){ //タッチセンサが反応したら
PlaySound(2); //音をならして
can_turn(); //缶を退ける
} else { //タッチセンサが反応しなかったら
normal_trace(); // 通常のライントレース
}
}
repeat(3) { //?に来たら交差点を3回わたる
across_line();
}
circle_trace(); //?に来たら小円を回る
across_line(); //小円をぬける
while(true){
normal_trace(); //通常のライントレース
}
}
*工夫した点 [#l399870a]
+アームはモーター1つでかぎ爪の形にすることで、しっかりつ...
+タイヤのモーターのスピードを2と1を使っているのは、最初は...
+交差点を渡る際にカウンタがうまく使えず、プログラムを見直...
+小円を回るのがうまくいかず円からはみ出すため、左のモータ...
+プログラムは無駄なく作れたと思う。
*改善点 [#y6b316fc]
-腕のモーターの機構が重くなってしまい、後ろのタイヤが浮い...
-タイマーを使わないプログラムを組みたい。
-缶を1つしか退けれてないので、2つのプログラミングも作り...
*感想 [#a4ad8d1c]
カウンタが使えずタイマーに頼ようと思ったが、まさか自分の...
アームの製作があまり時間を取れず、簡易で壊れやすいものに...
二人で協力してロボットを作っていればもう少し完成度が高く...
終了行:
#contents
*MISSION [#g57706c4]
自作したコースに沿って一周するするロボットを作成せよ。
ただし、次の点に注意すること
一人は時計回り用、もう一人は半時計回うり用のプログラムを...
次のステップでプログラムを作成すること。
-交差点をきちんと認識し、正しく判断して通過できるようにす...
-確実に一周できるようにする。スタート地点から出発して元に...
-空き缶を交差点から10cm以上離した線上に起き、それを一旦ど...
-1個の空き缶でうまくいったら、2個の空き缶でやってみる。
**コース [#ke4b0572]
&ref(2013b/Member/mato/Mission1/route5.jpg);
私は左周りを担当する。
後のプログラムの説明のためにコースを3つに分ける。
右上の円を小円と呼ぶ
*ロボットの説明 [#ya482e58]
&ref(2013b/Member/mato/Mission1/IMG_0558 (3).jpg);
&ref(2013b/Member/mato/Mission1/ロボ.jpg,20%);
-バンパーを中心から離すことで、てこの原理によりタッチセン...
-缶を一本のアームで掴むためにアームをかぎづめ型にした。
-モーターとアームの位置が離れているためゴムを使って動かせ...
*プログラム [#m44b309f]
**定義 [#d1bdcea1]
#define THRESHOLD 43 //閾値
#define HIPOWER 2 //高速
#define LOWPOWER 1 //低速
#define set_power_H SetPower(OUT_AC,HIPOWER); //ACを高速...
#define set_power_L SetPower(OUT_AC,LOWPOWER); //ACを低...
#define go_forward set_power_H; OnFwd(OUT_AC); //前進
#define turn_left1 set_power_L; Off(OUT_A); OnFwd(OUT_C)...
#define turn_left2 set_power_L; OnRev(OUT_A); OnFwd(OUT_...
#define turn_left3 set_power_L; OnRev(OUT_A); //右後進
#define turn_right1 set_power_L; Off(OUT_C); OnFwd(OUT_A...
#define turn_right2 set_power_L; OnRev(OUT_C); OnFwd(OUT...
#define arm_hold OnFwd(OUT_B);Wait(50);Off(OUT_B); //缶...
#define arm_part OnRev(OUT_B);Wait(50);Off(OUT_B); //缶...
#define STEP 1
#define nMAX 4 //カウンタの最大数
#define short_break Off(OUT_AC);Wait(50); //小休止
#define CROSS_TIME 40 //交差点を渡る時間
#define cross_line set_power_L; OnFwd(OUT_AC); Wait(CROS...
#define time0 2000 //?の時間
#define time1 700 //?の時間
**サブルーチン [#a2fda3b2]
-普通のライントレース(5段階評価)
sub normal_trace()
{
if (SENSOR_2 < THRESHOLD -1){
turn_left2;
} else if (SENSOR_2 < THRESHOLD +3){
turn_left1;
} else if (SENSOR_2 < THRESHOLD +7){
go_forward;
} else if (SENSOR_2 < THRESHOLD +8){
turn_right1;
} else {
turn_right2;
}
}
-交差点を渡るライントレース(4回連続で左旋回したら直進)
sub across_line ()
{
int nOnline=0;
while(nOnline < nMAX ){
if(SENSOR_2< THRESHOLD -1) {
turn_left2;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD ){
turn_left1;
}else if(SENSOR_2< THRESHOLD +4){
go_forward;
}else if(SENSOR_2< THRESHOLD +7){
turn_right1;
}else{
turn_right2;
}
nOnline=0;
}
Wait(STEP);
}short_break;PlaySound(2);
turn_right1;Wait(nMAX*STEP);
cross_line;
nOnline=0;
}
-小円の内側を渡るライントレース(右後進を駆使して曲がりき...
sub circle_trace()
{
ClearTimer(0);
while(FastTimer(0) <= time1){
if (SENSOR_2 < THRESHOLD -2){
turn_left3;
} else if (SENSOR_2 < THRESHOLD -1){
turn_left2;
} else if (SENSOR_2 < THRESHOLD +5){
go_forward;
} else {
turn_right1
}
}
}
-缶を退ける
sub can_turn ()
{
set_power_L ;
arm_hold;
OnFwd(OUT_AC); Wait(200);
turn_right2; Wait(500);
arm_part;
turn_left2 ; Wait(500);
}
**メインのプログラム [#yf4e269e]
task main()
{
SetSensor(SENSOR_2, SENSOR_LIGHT);
SetSensor(SENSOR_3, SENSOR_TOUCH);
ClearTimer(0); // タイマーをリセット
while(FastTimer(0) <= time0){ //?まで以下のプログラム...
if (SENSOR_3 == 1){ //タッチセンサが反応したら
PlaySound(2); //音をならして
can_turn(); //缶を退ける
} else { //タッチセンサが反応しなかったら
normal_trace(); // 通常のライントレース
}
}
repeat(3) { //?に来たら交差点を3回わたる
across_line();
}
circle_trace(); //?に来たら小円を回る
across_line(); //小円をぬける
while(true){
normal_trace(); //通常のライントレース
}
}
*工夫した点 [#l399870a]
+アームはモーター1つでかぎ爪の形にすることで、しっかりつ...
+タイヤのモーターのスピードを2と1を使っているのは、最初は...
+交差点を渡る際にカウンタがうまく使えず、プログラムを見直...
+小円を回るのがうまくいかず円からはみ出すため、左のモータ...
+プログラムは無駄なく作れたと思う。
*改善点 [#y6b316fc]
-腕のモーターの機構が重くなってしまい、後ろのタイヤが浮い...
-タイマーを使わないプログラムを組みたい。
-缶を1つしか退けれてないので、2つのプログラミングも作り...
*感想 [#a4ad8d1c]
カウンタが使えずタイマーに頼ようと思ったが、まさか自分の...
アームの製作があまり時間を取れず、簡易で壊れやすいものに...
二人で協力してロボットを作っていればもう少し完成度が高く...
ページ名: