- 追加された行はこの色です。
- 削除された行はこの色です。
*ロボットの説明 [#n55d9faa]
*ロボットの説明 [#w5c8de80]
半径1m以内にある懐中電灯を探して、懐中電灯にピンポン玉を当てるロボットを製作した。
task main(){
SetSensor(SENSOR_2,SENSOR_LIGHT);
int t = 0;
int T = 0;
int MAX = 0;
int i = 0;
while(1){
t = FastTimer(0);
if(t < 150){
OnFwd(OUT_A);
OnRev(OUT_C);
if(SENSOR_2 > MAX){
MAX = SENSOR_2;
T = FastTimer(0);
}
}else{
if(i == 2){
PlaySound(SOUND_UP);
Off(OUT_AC);
Wait(20);
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(150 - T);
Off(OUT_AC);
OnFwd(OUT_B);
Wait(100);
OnRev(OUT_AC);
Off(OUT_B);
Wait(50);
Off(OUT_ABC);
Wait(9999);
}else{
PlaySound(SOUND_UP);
Off(OUT_AC);
Wait(20);
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(150 - T);
OnRev(OUT_AC);
Wait(100);
Off(OUT_AC);
Wait(20);
ClearTimer(0);
t = 0;
T = 0;
MAX = 0;
i++;
}
}
}
}
#ref(2015a/Member/kaz/Mission3/S__30531587.jpg,30%)
*ハードウェア [#ra3432d8]
課題2のロボットの光センサーの位置を底面から前方に移動した。前輪駆動のロボットに後輪をキャスターにしている。アームではじめから搭載していボールを車体を停止した後、アームを上げて車体を前進させてボールを放つ。
*ソフトウェア [#h872d03d]
タイマーとを用いて光量が最大になる市を検出してその向きにボールを放つプログラムを作成した。まず車体を旋回させてセンサーの値が最大になる時の、回転を始めてからの時間を求め光量の値が最大になる市を検出する。1回転にかかった時間から光量が最大になるまでの時間を引いた時間の分だけ逆回転する
。これにより車体は光源に向く。その後ボールを放つ。以下プログラム
task main(){
SetSensor(SENSOR_2,SENSOR_LIGHT);
int t = 0;
int T = 0;
int MAX = 0;
int i = 0;
while(1){
t = FastTimer(0);
if(t < 150){
OnFwd(OUT_A);
OnRev(OUT_C);
if(SENSOR_2 > MAX){
MAX = SENSOR_2;
T = FastTimer(0);
}
}else{
if(i == 2){
PlaySound(SOUND_UP);
Off(OUT_AC);
Wait(20);
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(150 - T);
Off(OUT_AC);
OnFwd(OUT_B);
Wait(100);
OnRev(OUT_AC);
Off(OUT_B);
Wait(50);
Off(OUT_ABC);
Wait(9999);
}else{
PlaySound(SOUND_UP);
Off(OUT_AC);
Wait(20);
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(150 - T);
OnRev(OUT_AC);
Wait(100);
Off(OUT_AC);
Wait(20);
ClearTimer(0);
t = 0;
T = 0;
MAX = 0;
i++;
}
}
}
}
*改善点 [#g4d69d5b]
センサーを正面の光のみを拾うように覆いをつければ精度は上がると思われる。しかし今回は覆いをつけなくても動作した。