[[2016a/Member]] 目次 #contents *課題 [#b9947262] 今回の課題はセンサーを利用してライントレースをするロボットを作ることです。 *ロボット本体の説明 [#q2f77fad] #ref(2016a/Member/oyco/Mission2/IMG_1482.JPG,30%,本体の構造) 本体の前方にセンサーをつけました。 #ref(2016a/Member/oyco/Mission2/IMG_1483.JPG,30%,センサー) このセンサーを使ってラインを判断します。 *コース [#hfdddc43] **図 [#b1090389] 黒い線に沿って進み、交差点で一度止まり、ゴールまで行って止まること。 http://yakushi.shinshu-u.ac.jp/robotics/?plugin=attach&refer=2016a%2FMission2&openfile=2016a-mission2.png **コース(ルート) [#bee49fd4] A地点からB地点へ (A地点 → P直進 → Q直進 → Q直進 → R左折 → B地点) *プログラムの説明 [#hf725160] **定義 [#p71412d5] #define BLACK 42 #define WHITE 50 #define RIGHT_H OnFwd(OUT_A); OnRev(OUT_C);//右旋回 #define LEFT_H OnFwd(OUT_C); OnRev(OUT_A);//左旋回 #define RIGHT_L OnFwd(OUT_A); Off(OUT_C);//右回転 #define LEFT_L OnFwd(OUT_C); Off(OUT_A);//左回転 #define GO_FORWARD(t) OnFwd(OUT_AC); Wait(t); Off(OUT_AC); #define STEP 1 sub LINE() { ClearTimer(0); while(FastTimer(0) <= 50) { if (SENSOR_2 <= BLACK) { RIGHT_H; } else if (SENSOR_2 < BLACK){ RIGHT_L; // } else if (SENSOR_2 < WHITE) { LEFT_L; ClearTimer(0); } else if (SENSOR_2 >= WHITE) { LEFT_H; // ClearTimer(0); } else { OnFwd(OUT_AC); ClearTimer(0); } Wait(STEP); } Off(OUT_AC); ClearTimer(0); PlaySound(SOUND_UP); Wait(100); } sub LEFT() { while(FastTimer(0) < 170) { LEFT_L; } ClearTimer(0); } sub CROSS_LEFT() { while(FastTimer(0) < 250) { LEFT_H; } ClearTimer(0); } sub WHOLE() { while(FastTimer(0) < 36) { if(SENSOR_2 < BLACK){ RIGHT_L; } else if (SENSOR_2 > WHITE){ LEFT_L; ClearTimer(0); } else if (SENSOR_2 >= WHITE) { LEFT_H; ClearTimer(0); } else { GO_FORWARD(50); ClearTimer(0); } Wait(STEP); } Off(OUT_AC); ClearTimer(0); } **メイン [#l068566d] task main() { SetSensor(SENSOR_2, SENSOR_LIGHT); GO_FORWARD(120); LINE(); LEFT(); LINE(); LEFT(); LINE(); LEFT(); LINE(); CROSS_LEFT(); GO_FORWARD(120); LINE(); } *まとめ [#a6afc464] **反省点 [#u56ddd1d] **感想 [#oe0b723f]