2015a/Member

目次(ロボ)

課題

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

ロボット本体の説明

3つのモーターの用途

センサーの用途

本体

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

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 192件 [詳細] fileIMG_3251.JPG 211件 [詳細] fileIMG_3250.JPG 209件 [詳細]

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