- 追加された行はこの色です。
- 削除された行はこの色です。
[[2008a/MemberOnly/進行状況A]]
*目次 [#s8c31da0]
#contents
*課題3:1番明るい方向を探し出して、その方向にものを投げるロボット [#f5791964]
***課題条件~ [#u44f3ad4]
1.全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。~
2.懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。~
3.懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば50cmの距離まで近づいてブロックを投げる。~
(ただし、モータ、光センサ、タッチセンサはそれぞれ2個まで使用可。懐中電灯の代わりに携帯のライトなどを利用してもよい。 )~
※今回は1・2のプログラムを作った。
*作成したロボット [#a9a70d70]
ロボットの外形~
#ref()~
#ref()~
基本構造のロボットの前部に光センサ2個と小さいタイヤをつける。~
#ref(2008a/A5/課題3右/080630_1913~01.JPG,100%,robo)~
#ref(2008a/A5/課題3右/080630_1913~02.JPG,100%,zennrinn)~
基本構造のロボットの前部に光センサ2個とキャスターをつける。~
キャスターは前方高めにつけて、重心を後ろ側にした。~
~
~
ブロックを飛ばす部分~
#ref()~
#ref(2008a/A5/課題3右/080630_1914~01.JPG,100%,arm)~
ギアを全くかませない簡素なモノとした。~
~
~
ディフェレンシャル・ギアの構造
#ref()~
#ref(2008a/A5/課題3右/080630_1913~03.JPG,100%,de)~
ディフェレンシャル・ギアとは、一つのモーターでロボットを時計回りと反時計回りに回転させる様に工夫されたものである。
~
~
*作成したプログラム [#l13779ca]
**プログラム1 [#pe473047]
#define THRESHOLD 62 //光の閾値を定義
task main ()
{
SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1を光センサー
SetSensor(SENSOR_2,SENSOR_LIGHT); //センサー3を光センサー
while ( true ) {
if ( ( SENSOR_1 < THRESHOLD ) || ( SENSOR_3 < THRESHOLD ) ) { //センサー1またはセンサー3が光閾値より低いならば
SetPower(OUT_C,5);//モーターCの出力を5とする。
OnFwd ( OUT_C ) ; //モーターCを正回転=回転
Off ( OUT_A ) ; //投げない
} else { //両方のセンサーが光閾値を超えるなら
Off ( OUT_C ) ; //モーターC停止=回転停止
SetPower(OUT_A,1);
OnFwd ( OUT_A ) ; //投げ始める
Wait ( 45 ) ;
OnRev ( OUT_A ) ; //おろす
Wait ( 40) ;
Off ( OUT_A ) ; //停止
}
}
}
**プログラム2 [#ydba4ab8]
#define THRESHOLD 60//光閾値1を定義
#define THRESHOLD2 68//光り閾値2を定義
task main()
{
SetSensor(SENSOR_1, SENSOR_LIGHT);//センサー1を光センサー
SetSensor(SENSOR_3, SENSOR_LIGHT);//センサー2を光センサー
while(true){
if((SENSOR_1 < THRESHOLD)&&(SENSOR_3 > THRESHOLD)) //センサー1が光閾値1より低く、センサー3が光閾値1より低いならば
{
OnRev(OUT_C);//回転
Wait(10);
Off(OUT_C);//停止
} else {
if((SENSOR_1 > THRESHOLD)&&(SENSOR_3 < THRESHOLD))//センサー1が光閾値1より高く、センサー3が光閾値1より低いならば
{
OnFwd(OUT_C);//回転
Wait(10);
Off(OUT_C);//停止
}else{
if((THRESHOLD<SENSOR_1<THRESHOLD2)&&(THRESHOLD<SENSOR_3<THRESHOLD2))//センサー1と3が光閾値1より高く、2より低いならば
repeat(5){OnFwd(OUT_C);
Wait(35);
OnRev(OUT_C);
Wait(35);
Off(OUT_C);
}//左右に曲がる×5
else{
if((SENSOR_1>THRESHOLD2)&&(SENSOR_3>THRESHOLD2))//センサー1とセンサー3が光閾値2より高いならば
{
OnFwd(OUT_A);
Wait(40);
OnRev(OUT_A);
Wait(40);
Off(OUT_A);
}//ブロック投げる
}}}}}
*苦労した点・工夫した点 [#xc74e91a]
・光センサをとりつける幅~
・よく使うプログラムは、定義を用いる。~
・プログラムの微調整が面倒。~
*未解決な点・今後への課題 [#kb6b2233]
・まっすぐに進む時ガタガタになる。~
→モーターを増やす(今回は無理)~
・不快音がする。~
→タイヤを小さくして、本体とタイヤの摩擦をなくした。~
・強度が弱い。~
→補強する。特に投げる構造。~
*課題2を終えての感想 ~ [#y5038ea9]
・難しかった。最初はディフェレンシャル・ギアの組み立てがわからなくて、ものすごい騒音を出しながら走るロボットができた。~
組み立て直したら、普通に走ったからほっとした。~
*コメントお願いします。 [#ud2dcd4a]
- 光センサについて、絶対的な閾値を使わずに、少し前の値あるいは左右の違いなどを判断して動くロボットのプログラムを考えてみてください。 -- [[松本]] &new{2008-07-01 (火) 08:35:18};
#comment
プログラムは3つ作ってください。I