- 追加された行はこの色です。
- 削除された行はこの色です。
[[2015a/Member]]
目次(ロボ)
#contents
* 課題 [#bcd2fde6]
半径1m以内にある懐中電灯を探して、懐中電灯にピンポン玉を当てるロボットを製作すること。(できれば、ピンポン玉を放つ距離を10〜30cmにする。) ロボット本体が懐中電灯に接触しない限りどこからピンポン玉を放っても良いこと。
* ロボット本体の説明 [#a6947f86]
** 3つのモーターの用途 [#y196ef65]
-車体の前後方向移動 (モータA,C)
-車体の旋回 (モータA,C)
-アームの開閉 (モータB)
#ref(IMG_3250.JPG)
#ref(IMG_3251.JPG)
** センサーの用途 [#ocfd73a_a]
-光センサー (センサー1)
前を見るようにつけ懐中電灯の光をとらえる
** 本体 [#y5887c38]
本ロボットは二輪駆動であり、後部に補助輪がついた非常に簡単な構造をしている。
#ref(IMG_3252.JPG)
* プログラムの説明 [#icf16dd0]
** 光量の最大値を求めるプログラムとシュートのプログラム [#p86fab44]
#define TURN_TIME 395//一回転する時間
int light_max; //lightセンサーの値の最大値
int time_max; //lightセンサーの値が最大の時の時間
task main(){
task main() {
SetSensor(SENSOR_1, SENSOR_LIGHT);
ClearTimer(1);
if (Timer(1) <=10000) { //Timer(1)が10秒以内なら光を追いかける
light_max = 0;
time_max = 0;
OnFwd(OUT_A);
OnRev(OUT_C);
start GetMax;} else { //10秒以上なら
start shoot;}
GetMax();} else { //10秒以上なら
shoot();
}
}
//lightセンサーが最大になる時の値、及び時間決定のタスク//
task GetMax(){
sub GetMax() {
ClearTimer(0);//タイマーを初期化
while (FastTimer(0) <= TURN_TIME) {//一回転する間に一番明るいところを探す
if (SENSOR_1 > light_max){
light_max=SENSOR_1; //SENSOR_3の値が現在のlight_max
time_max=FastTimer(0); //SENSOR_3が最大の時の時間を記録
}
}
//回転して//
if (time_max <= TURN_TIME/2) {//最明点≦180°のとき
Wait(time_max); //360もう一度回る
}
else {//最明点>180°のとき
Toggle(OUT_A);//反転
Toggle(OUT_C);//反転→左旋回
Wait(TURN_TIME-time_max);
}
start Chase;
Chase();
}
//光を追いかけるタスク//
task Chase(){
sub Chase() {
Float(OUT_AC);
while(true){
if (SENSOR_1 >= light_max){
OnFwd(OUT_A);
Float(OUT_C);
}
else {
Float(OUT_A);
OnFwd(OUT_C);
}
}
}
//シュートするタスク//
task shoot ()
{
sub shoot () {
OnFwd(OUT_B); //開く
Wait(10);
OnRev(OUT_AC);Wait(10);
OnFwd(OUT_AC);Wait(25);
OnRev(OUT_AC);Wait(10); //
OnFwd(OUT_AC);Wait(25);//ボールをシュート
}
* 改善した点 [#sa2ab6c6]
-初期のロボットは前部のアームが開閉せず、ピンポン玉の挙動が安定しなかったが、開閉式にすることで安定した仕事ができるようになった。
*結果 [#l4980d10]
懐中電灯にピンポン玉をあてることができた。
*反省 [#k5a92a87]
タイマーでだいたいの距離を測ることになっているため,近くで当てるときは、タイマーの時間を長くするだけであり調整が簡単になった。ロボット前部に部品が集中したため光センサーの向きや位置を決めるのが難しかった。