- 追加された行はこの色です。
- 削除された行はこの色です。
目次
#contents
*課題2 黒い線に沿って動くロボット [#y3596a15]
各チームで作成したコースを3周するロボットを製作せよ。交差点のうちの一つには500mlの空の紙パックをおき、次のような動作するプログラムを作成せよ。(他のメンバーと重ならないように一人一つのプログラムを作成する)
1. 紙パックを迂回する、あるいは紙パックをもとの位置に戻したのちコースに戻って進む (交差点を通過後、紙パックが元の位置にあればよい)
2. 紙パックを次の交差点まで運んで行き、その交差点に紙パックを残してさらに黒い線に沿って進む
**完成したロボット [#e015b271]
今回は各プログラムにつきパーツをかえてロボットをつくりました。
***ノーマル [#z8140992]
#ref(2009a/A3/課題2左/ノーマル.jpg,50%)
***恵のロボット(改善前) [#uff10e12]
#ref(2009a/A3/課題2左/恵のロボット.jpg,50%)
***堀内のロボット [#bc0948b0]
#ref(2009a/A3/課題2左/堀内のロボット.jpg,50%)
***改善前の光センサー [#uf094e72]
#ref(2009a/A3/課題2左/光センサー.jpg,50%)
***ロボット作成において工夫した点 [#adda88b4]
ロボットの本体は、小回りが利くようになるべく小さく、かつ頑丈に創りました。
バンパーは、テコの原理を用いて、なるべく低くしました。
**プログラムの説明 [#kd62ac00]
***恵のプログラム [#he1cbf21]
#define GO OnFwd(OUT_A+OUT_C); //前に進む
#define LEFT OnRev(OUT_A); OnFwd(OUT_C); //左に回る
#define RIGHT OnRev(OUT_C); OnFwd(OUT_A); //右に回る
#define RUN_TIME 8000 //走る時間の設定
task main ()
{
SetSensor ( SENSOR_1, SENSOR_LIGHT );
SetSensor ( SENSOR_2, SENSOR_TOUCH );
SetSensor ( SENSOR_3, SENSOR_LIGHT ); //センサーの設定
ClearTimer(0); //タイマーを初期化
int flag; //交差点の名前
flag = 0; //交差点の値を0にしておく
while( FastTimer(0) <= RUN_TIME ) //タイマーの時間を満たすまで
{
while ( SENSOR_2 == 1 ) //センサー2が反応する間
{
OnFwd(OUT_B); //牛乳パックを捕まえる
Wait(50);
Off(OUT_B);
if (flag==4 || flag==10 ) //もし4番目と10番目の交差点を通れば
{
GO;
Wait(80);
LEFT;
Wait(170); //若干前に進み、左に180度回り、
OnRev(OUT_B);
Wait(50);
Off(OUT_B); //捕まえた牛乳パックを放す
RIGHT;
Wait(170); //右に180度回る
}
if ( SENSOR_1 > 40 && SENSOR_3 > 40 ) //センサー1とセンサー3が白のとき、前に進む
{
GO
}
if ( SENSOR_1 < 40 && SENSOR_3 > 40 ) //せんさー1が黒、センサー3が白のとき、左に回る
{
LEFT
}
if ( SENSOR_1 > 40 && SENSOR_3 < 40 ) //センサー1が白、センサー3が黒のとき、右に回る
{
RIGHT
}
if ( SENSOR_1 < 40 && SENSOR_3 < 40 ) //センサー1とセンサー3が黒のとき、flagに1を足して、前に進む
{
flag==flag+1;
GO
}
}
if ( SENSOR_1 > 40 && SENSOR_3 > 40 )
{
GO
}
if ( SENSOR_1 < 40 && SENSOR_3 > 40 )
{
LEFT
}
if ( SENSOR_1 > 40 && SENSOR_3 < 40 )
{
RIGHT
}
if ( SENSOR_1 < 40 && SENSOR_3 < 40 )
{
flag==flag+1;
GO
}
}
Off(OUT_A+OUT_C); //終了
}
***堀内のプログラム [#q40d9bdf]
#define turn_left OnFwd(OUT_C);OnRev(OUT_A);Wait(90);Off(OUT_A+OUT_C); //左に回る
#define turn_right OnFwd(OUT_A);OnRev(OUT_C);Wait(70);Off(OUT_A+OUT_C); //右に回る
task main ()
{
SetSensor ( SENSOR_1, SENSOR_LIGHT );
SetSensor ( SENSOR_2, SENSOR_TOUCH );
SetSensor ( SENSOR_3, SENSOR_LIGHT );
int flag=0;
while(flag<12){ //交差点を12回通過する
if (( SENSOR_1 > 40) && (SENSOR_3 > 40 ))
{
OnFwd(OUT_A+OUT_C);
} //センサー1とセンサー3が白のとき直進する
if(( SENSOR_1 < 40) && (SENSOR_3 > 40 ))
{
OnRev(OUT_A);
OnFwd(OUT_C);
} //センサー1が黒でセンサー3が白のとき左に回る
if(( SENSOR_1 > 40) && (SENSOR_3 < 40 ))
{
OnRev(OUT_C);
OnFwd(OUT_A);
} //センサー1が白でセンサー3が黒のとき右に回る
if(( SENSOR_1 < 40) && (SENSOR_3 < 40 ))
{
OnFwd(OUT_A+OUT_C);
flag++;
} //両方のセンサーが黒のときflagに1をたして直進する
if (SENSOR_2==1) //タッチセンサーに触れた場合
{
OnRev(OUT_A+OUT_C);Wait(80);Off(OUT_A+OUT_C); //後ろに下がる
turn_right;
OnFwd(OUT_A+OUT_C);Wait(120);Off(OUT_A+OUT_C); //前に進む
turn_left;
OnFwd(OUT_A+OUT_C);Wait(120);Off(OUT_A+OUT_C); //前に進む
}
}
Off(OUT_A+OUT_C); //終了
}
***感想、反省点 [#p210bb9a]
んー、なんか、ロボットの制作するのが意外と時間を食ったし、プログラムも若干、苦労しました;;
でも自分的には、けっこうできた方だと思います。by恵
プログラムが自分にとってはとても難しかったです。 by堀内
**コメントお願いします [#f06c3a94]
#comment