2015a/Member

目次(ロボ)

課題

半径1m以内にある懐中電灯を探して、懐中電灯にピンポン玉を当てるロボットを製作すること。(できれば、ピンポン玉を放つ距離を10〜30cmにする。) ロボット本体が懐中電灯に接触しない限りどこからピンポン玉を放っても良いこと。

ロボット本体の説明

3つのモーターの用途

  • 車体の前後方向移動 (モータA,C)
  • 車体の旋回 (モータA,C)
  • アームの開閉 (モータB)
    IMG_3250.JPG
    IMG_3251.JPG

センサーの用途

  • 光センサー (センサー1) 前を見るようにつけ懐中電灯の光をとらえる

本体

本ロボットは二輪駆動であり、後部に補助輪がついた非常に簡単な構造をしている。

IMG_3252.JPG

プログラムの説明

光量の最大値を求めるプログラムとシュートのプログラム

#define TURN_TIME 395//一回転する時間
int light_max;	//lightセンサーの値の最大値
int time_max;	//lightセンサーの値が最大の時の時間
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);
GetMax();} else {    //10秒以上なら
shoot();
}
}
//lightセンサーが最大になる時の値、及び時間決定のタスク//
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);
}
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);
}
}
}
//シュートするタスク//
sub shoot () {
OnFwd(OUT_B); //開く
Wait(10);
OnRev(OUT_AC);Wait(10); //
OnFwd(OUT_AC);Wait(25);//ボールをシュート
}

改善した点

  • 初期のロボットは前部のアームが開閉せず、ピンポン玉の挙動が安定しなかったが、開閉式にすることで安定した仕事ができるようになった。

結果

懐中電灯にピンポン玉をあてることができた。

反省

タイマーでだいたいの距離を測ることになっているため,近くで当てるときは、タイマーの時間を長くするだけであり調整が簡単になった。ロボット前部に部品が集中したため光センサーの向きや位置を決めるのが難しかった。


添付ファイル: fileIMG_3252.JPG 102件 [詳細] fileIMG_3251.JPG 120件 [詳細] fileIMG_3250.JPG 106件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-08-11 (火) 15:18:01