- 追加された行はこの色です。
- 削除された行はこの色です。
[[2010a]]
目次
#contents
*課題2:黒い線に沿って動くロボット [#g2725cd5]
各チームで作成したコースを1周するロボットを製作せよ。交差点以外のコース上に350mlの空の空き缶を2個以上おき、空き缶にぶつかった時には次のような動作するプログラムを作成せよ。(他のメンバーと重ならないように一人一つのプログラムを作成する)
1.空き缶をコース上に戻して再びコースに戻って進む
2.空き缶を次の交差点まで運んで行き、その交差点に空き缶を残してさらにコースに沿って進む
3.奇数回目に空き缶に遭遇したら、その場で反転して進み、偶数回目に遭遇したら、空き缶を押しのけて進む
ただし、
•速さと正確さを追求すること
•コースを1周したら自動的に止まること
•交差点では一時停止すること
*メンバー [#ue4fe1ee]
舩山 蔵
鎌倉 竜馬
*目標 [#l068c647]
・より安定なロボットを制作する。
・確実に読み取れるロボットを作る。
*コース [#qda5309a]
#ref(コース.jpg)
・コースはシンプルかつ単純すぎないやつにした。
*ロボットの説明 [#v0653de2]
**本体[#wf848ea8]
・一回目の失敗 この構造では、タッチセンサーに当たらないので失敗。
#ref(sippai3.jpg)
#ref(全体上失敗2.jpg)
・二回目の本体もいまいちうまくいかず失敗。
**アーム [#z17539bc]
#ref(アーム失敗1.jpg)
・一回目のアーム↑と二回目のアーム↓どちらもうまく空き缶を運べなかった。
#ref(アーム上失敗2.jpg)
**光・アーム [#db6de454]
**光・タッチセンサー [#db6de454]
#ref(光センサー.jpg)
・光センサーはここにつけることですぐに成功した。だが二つのセンサーで読み取る値が違うので上下にずらした。
#ref(タッチセンサー失敗.jpg)
・一つのセンサーが壊れていたため一つで挑戦したが、反応せず・・・
**工夫した点 [#e351ea2f]
・アームを作る際、車体から大きく外れてアームが飛び出るため強度が小さくなってしまうのでブロックを車体全体で組みバランスをとった。
・タッチセンサーを反応しやすく、ゴムで固定した。
**問題点 [#c4f8d60b]
・光センサーを二つ使用してライントレースを試みたのだが二つのセンサーで光の感度が異なっていたことである。
・「一回目の失敗」であるようにタッチセンターに空き缶があたらず感知できないという問題が発生。
・直線を進む場合は比較的に想像通りに進むが、カーブでコースアウトする。
・うまく缶を運んでくれない。
**問題点から工夫した点 [#wa6e1f5b]
・センサーの高さを揃えずに白い所で同じ値になるような高さに設置した。
・タッチセンサーの位置を前にだして缶に当たるようにした。
*舩山 蔵のプログラム [#z26896bd]
//1.空き缶をコース上に戻して再びコースに戻って進む//
#define a OUT_A
#define c OUT_C
#define THRESHOLD 38//光センサーの値
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);//センサー1を光センサー左とする SetSensor(SENSOR_2,SENSOR_TOUCH);//センサー2をタッチセンサーとする
SetSensor(SENSOR_3,SENSOR_LIGHT);//センサー3を光センサー右とする
int x;変数x
x=0;初期値0とおく
while(true){
if(SENSOR_2==1){ //タッチセンサーが反応した時 OnFwd(c);OnRev(a);Wait(250);OnRev(a+c);Wait(200);Off(a+c);//空き缶をとり、反転して元の位置に戻す
OnFwd(a);OnRev(c);Wait(150);Off(a+c);} //その後コース上に戻る
if (SENSOR_1>THRESHOLD){ //光センサー左が白の位置にある時
if (SENSOR_3>THRESHOLD){ //両方のセンサーが白の位置にある時
OnFwd(a+c);} //直進
else{ //右が黒の位置にある時、右に曲がる
OnFwd(a);
Wait(7);
Off(a);
OnRev(c);
Wait(2);
Off(c);
}
}
else{ //左が黒の位置にある時
if(SENSOR_3>THRESHOLD){ //右が白の位置にある時、左にまがる
OnFwd(c);
Wait(7);
Off(c);
OnRev(a);
Wait(2);
Off(a);
}
else{ //交差点上の時
Off(a+c);Wait(40); //一時停止
OnFwd(a+c); //前進
Wait(10);
Off(a+c);
x = x + 1; //交差点ごとにカウント
}
if(x >= 12)break; //カウントが一周分すると終了
}
}
}
*鎌倉 竜馬のプログラム [#ydf991de]
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT); //1のセンサーに光センサーを定義
SetSensor(SENSOR_3,SENSOR_LIGHT); //2のセンサーにタッチセンサーを定義
SetSensor(SENSOR_2,SENSOR_TOUCH); //3のセンサーに光センサーを定義
ClearTimer(0);
while(Timer(0)<=950)
{ //ライントレース開始!
if(SENSOR_1 < 40){OnFwd(OUT_C);OnRev(OUT_A);Wait(4); } //光センサー1が40より小さい値をとると左のタイヤをリバースして左に進路を修正 else if(SENSOR_3 < 40){ OnFwd(OUT_A);OnRev(OUT_C);Wait(4); } //光センサー2が40より小さい値をとると右のタイヤをリバースさせて右に進路を修正
if((SENSOR_1 < 40) && (SENSOR_3 < 40)){Off(OUT_A+OUT_C); Wait(200); //両方のセンサーが40より小さい値を同時にとると交差点に差し掛かったので2秒一時停止
OnFwd(OUT_A+OUT_C);Wait(50);}
else{ OnFwd(OUT_A+OUT_C); Wait(4);} 方向修正が必要ないとき、光センサーがラインを割ってないときは直進
ここより空きかんを使った課題
if(SENSOR_2==1){ Off(OUT_A+OUT_C); Wait(90); //タッチセンサーで空き缶を感知したら一時停止をして
if(SENSOR_1 < 40){OnFwd(OUT_C);OnRev(OUT_A);Wait(4); }
else if(SENSOR_3 < 40){ OnFwd(OUT_A);OnRev(OUT_C);Wait(4); } //空き缶を運びつつライントレース
if((SENSOR_1 < 40) && (SENSOR_3 < 40)){OnFwd(OUT_A+OUT_C);Wait(150); //交差点を感知したら反転したときに空き缶が交差点に来るように前進
Off(OUT_A+OUT_C); Wait(100); //一旦停止
OnFwd(OUT_A);OnRev(OUT_C);Wait(170); //反時計回りに180°
OnRev(OUT_A+OUT_C);Wait(150); //バックして缶を置く
OnFwd(OUT_A);OnRev(OUT_C);Wait(170); // 向きを直して
OnFwd(OUT_A+OUT_C);Wait(10);}
} //ライントレース再開
}
*まとめ [#w922f5f8]
鎌倉のまとめ
・「if」、「else」をつかったプログラムはなかなか慣れずに思うような動きをするプログラムが組めなかった。
舩山のまとめ
全体のまとめ
・タッチセンサーを三種類考えた。鎌倉が二つ。舩山一つ。鎌倉のは二つとも缶を感知しなかったり、接触しなかったりと最終的に舩山の案を採用した。
*コメントをどうぞ [#qe049ebf]
#comment