- 履歴一覧
- 2015a/Member/Y.H/Mission2 は削除されています。
*目次 [#pdbe1a7d]
#contents
*課題について [#s030a29a]
課題2は光センサーを使ったライン・トレース・ロボットの製作
コースは以下の通り(課題2のページより)
#ref(./コース.png,50%)
-A地点からB地点へ (P三叉路およびQ交差点はともに直進)
-B地点からA地点へ (Q交差点では直進、P三叉路では直進)
-C地点からA地点へ (Q交差点では直進、P三叉路では右折)
また、これらの経路の途中(PQ間)においたボールをゴールまで運ぶこと。三叉路および交差点では二秒間停止すること。
今回は、B地点からA地点のコースとする。
*本体について [#j1672ef1]
タッチセンサをつけると邪魔になりそうだったので、つけないことにした。
アームはモーターCで動かす。ABは移動用に使った。
アームは上からボールにかぶせる形にした。
*プログラムについて [#z4ee3701]
**ライントレース [#hb0a73c2]
一番初めに組んだもの。五段階に光を分けた。
#define hikari 50
#define SPEED1 55
#define SPEED 25
#define turn_left OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED);
#define TURN_LEFT OnFwd(OUT_B,SPEED);
#define go_forward OnFwd(OUT_BC,SPEED1);
#define TURN_RIGHT OnFwd(OUT_C,SPEED);
#define turn_right OnFwd(OUT_C,SPEED);OnRev(OUT_B,SPEED);
#define STEP 2
task main(){
SetSensorLight(S3);
while(true){
if(SENSOR_3<hikari -7){
turn_left;
}else if(SENSOR_3<hikari -3){
TURN_LEFT;
}else if(SENSOR_3<hikari +3){
go_forward;
}else if(SENSOR_3<hikari +10){
TURN_RIGHT;
}else{
turn_right;
}
}
}
この時、ロボットは線の左端をなぞった。
このプログラムは、ただただライントレースのみを速く調整したいときに使えると思い、単純だが載せておこうと思った。
**交差点・三叉路 [#k3c8fb05]
交差点や三叉路の判定にはカウンターを使うことにした。
また、上のプログラムではコースをうまくなぞらなかったので、線の右端をなぞるようにした。(回転方向を反転させた)
追加の定義
#define nMAX 175
#define sofa Off(OUT_BC);Wait(2000);
#define CROSS_TIME 200
#define cross_line OnFwd(OUT_BC,SPEED);Wait(CROSS_TIME);sofa;
交差点を渡るようにしたプログラム
task main()
{
SetSensorLight(S3);
int nOnline=0;
while(true){
while(nOnline<nMAX){
if(SENSOR_3<hikari -7){
turn_right;
nOnline++;
}else{
if(SENSOR_3<hikari -3){
TURN_RIGHT;
}else if(SENSOR_3<hikari +3){
go_forward;
}else if(SENSOR_3<hikari +10){
TURN_LEFT;
}else{
turn_left;
}
nOnline=0;
}
Wait(STEP);
}
sofa;
turn_left;Wait(nMAX*STEP);
cross_line;
nOnline=0;
}
}
**ボールを運ぶ [#qf87d8a7]
一度上のように分けて考えたので、なるべくその形を生かせるようにプログラムを組もうと思った。
プログラムは、一度交差点を通過してからタイマーを使い、一定時間たったらアームを下げるようにした。
*感想 [#bfb90857]
どちらかのタイヤと、光センサーを近づければ、回転半径が左右で異なるので、また違うのではないかと思った。
もっと速く動かせるように改良したい。