[[2015a/Member]]
#contents
*ロボットについて [#dcfecd33]
課題2で使ったロボットのアームの上部に超音波センサーを取り付けました。
#ref(./DSC_0138.JPG,20%);
*プログラミングについて [#wd1eb43d]
#define TURN OnFwd(OUT_B,20);OnRev(OUT_C,20);
#define TURN_TIME 7000
#define GO OnFwd(OUT_BC,50);
#define SHOOT_DIST 25
#define SHOOT OnRev(OUT_BC,80);Wait(500);OnFwd(OUT_BC,80);OnFwd(OUT_A,80);Wait(500);
#define STOP Off(OUT_BC);Wait(1000);
task main()
{
SetSensorLowspeed(S3);
int dist_mini=100;
while(true) {
long t = CurrentTick();
while(CurrentTick()-t <= TURN_TIME) {
TURN;
if (SensorUS(S3) < dist_mini) {
dist_mini=SensorUS(S3);
}
}
TURN;
if (SensorUS(S3) < dist_mini) {
dist_mini=SensorUS(S3);
}
}
STOP;
TURN;
until(SensorUS(S3) == dist_mini);
GO;
until(SensorUS(S3) <= SHOOT_DIST);
STOP;
SHOOT;
Off(OUT_BC);
}
}
今回作ったプログラミングは、だいたい一回転する間にカンとの距離を記録して、その後でカンの正面を向き、接近してボールをぶつけるというものです。
だいたい一回転する間に、「dist_mini」で100と定義した仮の最小値よりも小さい値を超音波センサーで検知したときに、仮の最小値をその値に更新します。全方向を超音波センサーで調査するために、回転する時間を「TURN_TIME」で7000と少し長めに設定しました。
その後、回転する間に仮の最小値から更新した最小値(カンとの距離)を超音波センサーがもう一度検知するまで回転し、カンの方を向きます。そのままカンとの距離が25�僂砲覆襪泙把梢覆靴泙后�
その後、「SHOOT」のプログラムでボールをカンにぶつけます。
*感想 [#y4bd9473]
ロボット本体に関しては、課題2のロボットにたまたま超音波センサーを簡単に付けることができたので、良かったです。
プログラミングに関しては、とても単純なプログラムになりましたが、正確に一回転する必要のないものを作ることができて満足しています。確実性を上げるためのプログラムが思いつかなかったのが残念でした。